package org.jboss.resteasy.test.spring.unit;
import org.jboss.resteasy.core.Dispatcher;
import org.jboss.resteasy.core.ResourceMethodRegistry;
import org.jboss.resteasy.mock.MockDispatcherFactory;
import org.jboss.resteasy.spi.Registry;
import org.jboss.resteasy.spi.ResteasyDeployment;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.support.StaticWebApplicationContext;
import javax.servlet.ServletContext;
import static org.junit.Assert.assertEquals;
/**
* @tpSubChapter Spring
* @tpChapter Unit test
* @tpTestCaseDetails Tests that SpringContextLoader does proper validations and adds an application listener
* @tpSince RESTEasy 3.0.16
*/
public class SpringContextLoaderTest {
private SpringContextLoaderSubclass contextLoader;
@Before
public void setupEditor() {
contextLoader = new SpringContextLoaderSubclass();
}
/**
* @tpTestDetails Tests that ResteasyDeployment is required for customizeContext() of SpringContextLoader
*/
@Test(expected = RuntimeException.class)
public void testThatDeploymentIsRequired() {
contextLoader.customizeContext(mockServletContext(null), mockWebApplicationContext());
}
/**
* @tpTestDetails Tests that only one application listener is added for customizeContext() call of SpringContextLoader
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testThatWeAddedAnApplicationListener() {
StaticWebApplicationContext context = mockWebApplicationContext();
int numListeners = context.getApplicationListeners().size();
contextLoader.customizeContext(mockServletContext(someDeployment()), context);
int numListenersNow = context.getApplicationListeners().size();
assertEquals("Expected to add exactly one new listener; in fact added " + (numListenersNow - numListeners),
numListeners + 1, numListenersNow);
}
private StaticWebApplicationContext mockWebApplicationContext() {
return new StaticWebApplicationContext();
}
private ServletContext mockServletContext(ResteasyDeployment deployment) {
MockServletContext context = new MockServletContext();
if (deployment != null) {
context.setAttribute(ResteasyDeployment.class.getName(), deployment);
}
return context;
}
private ResteasyDeployment someDeployment() {
return new ResteasyDeployment();
}
}