/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.geotools.wfs.v2_0.WFS;
import org.w3c.dom.Document;
/**
* WFS test based on GeoSciML 3.0rc1, a GML 3.2 application schema.
*
* @author Ben Caradoc-Davies, CSIRO Earth Science and Resource Engineering
*/
public class Gsml30WfsTest extends AbstractAppSchemaTestSupport {
/**
* @see org.geoserver.test.AbstractAppSchemaTestSupport#buildTestData()
*/
@Override
protected Gsml30MockData createTestData() {
return new Gsml30MockData();
}
/**
* Test DescribeFeatureType response.
*/
@Test
public void testDescribeFeatureType() {
String path = "wfs?request=DescribeFeatureType&typename=gsml:MappedFeature&version=1.1.0";
String newline = System.getProperty("line.separator");
Document doc = getAsDOM(path);
LOGGER.info("Response for " + path + " :" + newline + prettyString(doc));
assertEquals("xsd:schema", doc.getDocumentElement().getNodeName());
// check target name space is encoded and is correct
assertXpathEvaluatesTo(getNamespace("gsml"), "//@targetNamespace", doc);
// make sure the content is only relevant include
assertXpathCount(1, "//xsd:include", doc);
// no import to gml since it is already imported inside the included schema
assertXpathCount(0, "//xsd:import", doc);
// gsml schemaLocation
assertXpathEvaluatesTo(Gsml30MockData.GSML_SCHEMA_LOCATION,
"//xsd:include/@schemaLocation", doc);
// nothing else
assertXpathCount(0, "//xsd:complexType", doc);
assertXpathCount(0, "//xsd:element", doc);
}
/**
* Test whether GetFeature returns wfs:FeatureCollection.
*/
@Test
public void testGetFeature() {
String path = "wfs?request=GetFeature&typename=gsml:MappedFeature&outputFormat=gml32";
String newline = System.getProperty("line.separator");
Document doc = getAsDOM(path);
LOGGER.info("Response for " + path + " :" + newline + prettyString(doc));
assertEquals(WFS.NAMESPACE, doc.getDocumentElement().getNamespaceURI());
assertEquals("FeatureCollection", doc.getDocumentElement().getLocalName());
}
/**
* Test whether GetFeature response is schema-valid.
*/
@Test
public void testGetFeatureValid() {
String path = "wfs?request=GetFeature&typename=gsml:MappedFeature&outputFormat=gml32";
String newline = System.getProperty("line.separator");
Document doc = getAsDOM(path);
LOGGER.info("Response for " + path + " :" + newline + prettyString(doc));
validateGet(path);
}
/**
* Test content of GetFeature response.
*/
@Test
public void testGetFeatureContent() throws Exception {
String path = "wfs?request=GetFeature&typename=gsml:MappedFeature&outputFormat=gml32";
String newline = System.getProperty("line.separator");
Document doc = getAsDOM(path);
LOGGER.info("Response for " + path + " :" + newline + prettyString(doc));
assertXpathEvaluatesTo("2", "/wfs:FeatureCollection/@numberReturned", doc);
assertXpathEvaluatesTo("unknown", "/wfs:FeatureCollection/@numberMatched", doc);
assertXpathCount(2, "//gsml:MappedFeature", doc);
// test names
assertXpathEvaluatesTo("First", "//gsml:MappedFeature[@gml:id='mf.1']/gml:name", doc);
assertXpathEvaluatesTo("Second", "//gsml:MappedFeature[@gml:id='mf.2']/gml:name", doc);
assertXpathEvaluatesTo("250000",
"//gsml:MappedFeature[@gml:id='mf.1']/gsml:resolutionScale"
+ "/gmd:MD_RepresentativeFraction/gmd:denominator/gco:Integer", doc);
assertXpathEvaluatesTo("250000",
"//gsml:MappedFeature[@gml:id='mf.2']/gsml:resolutionScale"
+ "/gmd:MD_RepresentativeFraction/gmd:denominator/gco:Integer", doc);
}
/**
* Test namespace of GetFeature response.
*/
@Test
public void testNamespace() throws Exception {
String path = "wfs?request=GetFeature&typename=gsml:MappedFeature&outputFormat=gml32";
String newline = System.getProperty("line.separator");
Document doc = getAsDOM(path);
LOGGER.info("Response for " + path + " :" + newline + prettyString(doc));
assertXpathEvaluatesTo("2", "/wfs:FeatureCollection/@numberReturned", doc);
assertXpathEvaluatesTo("unknown", "/wfs:FeatureCollection/@numberMatched", doc);
assertXpathCount(2, "/wfs:FeatureCollection/wfs:member", doc);
// test that all namespaces are present on the root element
for (String prefix : getNamespaces().keySet()) {
assertEquals(getNamespace(prefix),
doc.getFirstChild().getAttributes().getNamedItemNS(XMLNS, prefix)
.getTextContent());
}
// test that no namespaces are present on the wfs:member elements
assertEquals(0, doc.getFirstChild().getChildNodes().item(0).getAttributes().getLength());
assertEquals(0, doc.getFirstChild().getChildNodes().item(1).getAttributes().getLength());
}
}