/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2009 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.test; import org.junit.Test; import org.w3c.dom.Document; /** * Test GetPropertyValue request, combined with local resolves * * @author Niels Charlier */ public class GetPropertyValueTest extends AbstractAppSchemaTestSupport { @Override protected XLink32MockData createTestData() { return new XLink32MockData(); } /** * Test GetPropertyValue for a simple property, tests only selected property is returned */ @Test public void testGetPropertyValue() { Document doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&valueReference=gml:name"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathEvaluatesTo("GUNTHORPE FORMATION", "//wfs:member[1]/gml:name", doc); assertXpathCount(4, "//gml:name", doc); assertXpathCount(0, "//gsml:shape", doc); assertXpathCount(0, "//gsml:specification", doc); } /** * Test GetPropertyValue without local resolve */ @Test public void testNoResolve() { Document doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&valueReference=gsml:specification&resolve=none"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathEvaluatesTo("urn:x-test:GeologicUnit:gu.25699", "//wfs:member[1]/gsml:specification/@xlink:href", doc); assertXpathCount(0, "//gsml:GeologicUnit", doc); assertXpathCount(0, "//gsml:CompositionPart", doc); } /** * Test GetPropertyValue with Local Resolve with Depth 2. */ @Test public void testResolveDepth2() { Document doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&resolve=local&valueReference=gsml:specification&resolveDepth=2"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathEvaluatesTo("gu.25699", "//gsml:specification[1]/gsml:GeologicUnit/@gml:id", doc); assertXpathEvaluatesTo( "urn:ogc:def:nil:OGC::unknown", "//wfs:member[1]/gsml:specification/gsml:GeologicUnit/gsml:composition/gsml:CompositionPart/gsml:role/@xlink:href", doc); assertXpathCount(3, "//gsml:GeologicUnit", doc); assertXpathCount(3, "//gsml:CompositionPart", doc); // now test x-path & multi-valued attributes doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&resolve=local&valueReference=gsml:specification/gsml:GeologicUnit/gml:name&resolveDepth=2"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathCount(10, "//gml:name", doc); assertXpathEvaluatesTo("Yaugher Volcanic Group", "//wfs:member[1]/gml:name", doc); assertXpathEvaluatesTo("-Py", "//wfs:member[2]/gml:name", doc); doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&resolve=local&valueReference=gsml:specification/gsml:GeologicUnit/gml:name[1]&resolveDepth=2"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathCount(4, "//gml:name", doc); assertXpathEvaluatesTo("Yaugher Volcanic Group", "//wfs:member[1]/gml:name", doc); doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&resolve=local&valueReference=gsml:specification/gsml:GeologicUnit/gml:name[2]&resolveDepth=2"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathCount(4, "//gml:name", doc); assertXpathEvaluatesTo("-Py", "//wfs:member[1]/gml:name", doc); } /** * Test GetPropertyValue with Local Resolve with Depth 1. */ @Test public void testResolveDepth1() { Document doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&valueReference=gsml:specification&resolve=local&resolveDepth=1"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathEvaluatesTo("gu.25699", "//wfs:member[1]/gsml:specification/gsml:GeologicUnit/@gml:id", doc); assertXpathEvaluatesTo( "urn:x-test:CompositionPart:cp.167775491936278899", "//wfs:member[1]/gsml:specification/gsml:GeologicUnit/gsml:composition/@xlink:href", doc); assertXpathCount(3, "//gsml:GeologicUnit", doc); assertXpathCount(0, "//gsml:CompositionPart", doc); } /** * Test GetPropertyValue with count parameter */ @Test public void testGetPropertyValueMax() { Document doc = getAsDOM("wfs?request=GetPropertyValue&version=2.0.0&typename=gsml:MappedFeature&valueReference=gml:name&count=2"); LOGGER.info("WFS GetPropertyValue response:\n" + prettyString(doc)); assertXpathCount(2, "//gml:name", doc); } }