package org.springframework.issues;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Rule;
import org.junit.Test;
import org.junit.internal.AssumptionViolatedException;
import org.junit.rules.TestRule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.issues.filter.HttpDumperFilter;
import org.springframework.issues.filter.HttpStatusOverrideFilter;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebAppConfiguration
@ActiveProfiles("dev")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring/context.xml")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class GateControllerTest {
private static final Logger logger = LoggerFactory.getLogger(GateControllerTest.class);
@Autowired
private WebApplicationContext webApplicationContext;
//
private MockMvc mockMvcWithOnlyOneFilter;
//
private MockMvc firstMockMvcWithTwoFilters;
//
private MockMvc secondMockMvcWithTwoFilters;
@Rule
public TestRule watcher = new MyTestWatcher();
@Before
public void setup() throws Exception {
//
mockMvcWithOnlyOneFilter = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilters(new HttpStatusOverrideFilter()).build();
//
firstMockMvcWithTwoFilters = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilters(new HttpDumperFilter(), new HttpStatusOverrideFilter()).build();
//
secondMockMvcWithTwoFilters = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilters(new HttpStatusOverrideFilter(), new HttpDumperFilter()).build();
}
@Test
public void failedTestWithOnlyOneFilter() throws Exception {
mockMvcWithOnlyOneFilter.perform(post("/invalid-request-uri")).andExpect(status().is(equalTo(230)));
}
@Test
public void firstPassedTestWithTwoFilters() throws Exception {
firstMockMvcWithTwoFilters.perform(post("/invalid-request-uri")).andExpect(status().is(equalTo(230)));
}
@Test
public void secondPassedTestWithTwoFilters() throws Exception {
secondMockMvcWithTwoFilters.perform(post("/invalid-request-uri")).andExpect(status().is(equalTo(230)));
}
private static class MyTestWatcher extends TestWatcher {
@Override
protected void starting(Description description) {
logger.info("--------------------------------------------------------------------------------------------");
logger.info("Starting {}", description.getDisplayName());
}
@Override
protected void succeeded(Description description) {
logger.info("--------------------------------------------------------------------------------------------");
logger.info("Succeeded {}", description.getDisplayName());
}
@Override
protected void failed(Throwable e, Description description) {
logger.info("--------------------------------------------------------------------------------------------");
logger.info("Failed {}", description.getDisplayName());
}
@Override
protected void skipped(AssumptionViolatedException e, Description description) {
logger.info("--------------------------------------------------------------------------------------------");
logger.info("Skipped {}", description.getDisplayName());
}
}
}