package thredds.server.ncss.controller.point; import org.jdom2.Document; import org.jdom2.Element; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import thredds.junit4.SpringJUnit4ParameterizedClassRunner; import thredds.mock.web.MockTdsContextLoader; import thredds.util.ContentType; import thredds.util.xml.XmlUtil; import ucar.unidata.util.test.category.NeedsCdmUnitTest; import java.util.Arrays; import java.util.Collection; import java.util.List; import static org.junit.Assert.assertEquals; /** * Test ncss point dataset info * * @author caron * @since 11/1/13 */ @RunWith(SpringJUnit4ParameterizedClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = {"/WEB-INF/applicationContext-tdsConfig.xml"}, loader = MockTdsContextLoader.class) @Category(NeedsCdmUnitTest.class) public class TestPointFCController { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup(){ this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } @SpringJUnit4ParameterizedClassRunner.Parameters public static Collection<Object[]> getTestParameters(){ return Arrays.asList(new Object[][]{ {"/ncss/testBuoyFeatureCollection/Surface_Buoy_Point_Data_fc.cdmr", 54, "point"}, {"/ncss/testSurfaceSynopticFeatureCollection/Surface_Synoptic_Point_Data_fc.cdmr", 41, "point"}, }); } String path, type; int nvars; public TestPointFCController(String path, int nvars, String type) { this.path = path; this.nvars = nvars; this.type = type; } @Test public void getDatasetXml() throws Exception { String xmlpath = path + "/dataset.xml"; System.out.printf("request='%s'%n", xmlpath); RequestBuilder rb = MockMvcRequestBuilders.get(xmlpath).servletPath(xmlpath); MvcResult result = this.mockMvc.perform(rb) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(ContentType.xml.getContentHeader())) .andReturn(); String ress = result.getResponse().getContentAsString(); System.out.printf("%s%n", ress); Document doc = XmlUtil.getStringResponseAsDoc(result.getResponse()); int hasVars = XmlUtil.evaluateXPath(doc, "//variable").size(); System.out.printf("nvars = %s%n", hasVars); assertEquals(this.nvars, hasVars); List<Element> elems = XmlUtil.evaluateXPath(doc, "capabilities/featureDataset"); assert elems.size() == 1; Element fdx = elems.get(0); assertEquals(fdx.getAttributeValue("type"), this.type); assert fdx.getAttributeValue("url").equals("/thredds"+path) : "/thredds"+path; } @Test public void getDatasetHtml() throws Exception { String htmlpath = path + "/dataset.html"; System.out.printf("request='%s'%n", htmlpath); RequestBuilder rb = MockMvcRequestBuilders.get(htmlpath).servletPath(htmlpath); MvcResult result = this.mockMvc.perform(rb) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(ContentType.html.getContentHeader())) .andReturn(); System.out.printf("%s%n", result.getResponse().getContentAsString()); } }