/* Copyright (c) 2001 - 2009 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.catalog.rest;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.StyleInfo;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.w3c.dom.Document;
import com.mockrunner.mock.web.MockHttpServletResponse;
public class LayerGroupTest extends CatalogRESTTestSupport {
@Override
protected void setUpInternal() throws Exception {
super.setUpInternal();
LayerGroupInfo lg = catalog.getFactory().createLayerGroup();
lg.setName( "sfLayerGroup" );
lg.getLayers().add( catalog.getLayerByName( "sf:PrimitiveGeoFeature" ) );
lg.getLayers().add( catalog.getLayerByName( "sf:AggregateGeoFeature" ) );
lg.getStyles().add( catalog.getStyleByName( StyleInfo.DEFAULT_POINT ) );
lg.getStyles().add( catalog.getStyleByName( StyleInfo.DEFAULT_POINT ) );
lg.setBounds( new ReferencedEnvelope( -180,-90,180,90, CRS.decode( "EPSG:4326") ) );
catalog.add( lg );
}
public void testGetAllAsXML() throws Exception {
Document dom = getAsDOM( "/rest/layergroups.xml");
assertEquals( catalog.getLayerGroups().size(), dom.getElementsByTagName( "layerGroup").getLength());
}
public void testGetAllAsHTML() throws Exception {
getAsDOM( "/rest/layergroups.html");
}
public void testGetAsXML() throws Exception {
print(get("/rest/layergroups/sfLayerGroup.xml"));
Document dom = getAsDOM( "/rest/layergroups/sfLayerGroup.xml");
assertEquals( "layerGroup", dom.getDocumentElement().getNodeName() );
assertXpathEvaluatesTo("sfLayerGroup", "/layerGroup/name", dom );
assertXpathEvaluatesTo( "2", "count(//layer)", dom );
assertXpathEvaluatesTo( "2", "count(//style)", dom );
}
public void testGetAsHTML() throws Exception {
getAsDOM( "/rest/layergroups/sfLayerGroup.html");
}
public void testPost() throws Exception {
String xml =
"<layerGroup>" +
"<name>newLayerGroup</name>" +
"<layers>" +
"<layer>Ponds</layer>" +
"<layer>Forests</layer>" +
"</layers>" +
"<styles>" +
"<style>polygon</style>" +
"<style>point</style>" +
"</styles>" +
"</layerGroup>";
MockHttpServletResponse response = postAsServletResponse("/rest/layergroups", xml );
assertEquals( 201, response.getStatusCode() );
assertNotNull( response.getHeader( "Location") );
assertTrue( response.getHeader("Location").endsWith( "/layergroups/newLayerGroup" ) );
LayerGroupInfo lg = catalog.getLayerGroupByName( "newLayerGroup");
assertNotNull( lg );
assertEquals( 2, lg.getLayers().size() );
assertEquals( "Ponds", lg.getLayers().get( 0 ).getName() );
assertEquals( "Forests", lg.getLayers().get( 1 ).getName() );
assertEquals( 2, lg.getStyles().size() );
assertEquals( "polygon", lg.getStyles().get( 0 ).getName() );
assertEquals( "point", lg.getStyles().get( 1 ).getName() );
assertNotNull( lg.getBounds() );
}
public void testPostNoStyles() throws Exception {
String xml =
"<layerGroup>" +
"<name>newLayerGroup</name>" +
"<layers>" +
"<layer>Ponds</layer>" +
"<layer>Forests</layer>" +
"</layers>" +
"</layerGroup>";
MockHttpServletResponse response = postAsServletResponse("/rest/layergroups", xml );
assertEquals( 201, response.getStatusCode() );
LayerGroupInfo lg = catalog.getLayerGroupByName( "newLayerGroup");
assertNotNull( lg );
assertEquals( 2, lg.getLayers().size() );
assertEquals( "Ponds", lg.getLayers().get( 0 ).getName() );
assertEquals( "Forests", lg.getLayers().get( 1 ).getName() );
assertEquals( 2, lg.getStyles().size() );
assertNull(lg.getStyles().get( 0 ));
assertNull(lg.getStyles().get( 1 ));
}
public void testPut() throws Exception {
String xml =
"<layerGroup>" +
"<name>sfLayerGroup</name>" +
"<styles>" +
"<style>polygon</style>" +
"<style>line</style>" +
"</styles>" +
"</layerGroup>";
MockHttpServletResponse response = putAsServletResponse("/rest/layergroups/sfLayerGroup", xml, "text/xml" );
assertEquals( 200, response.getStatusCode() );
LayerGroupInfo lg = catalog.getLayerGroupByName( "sfLayerGroup" );
assertEquals( 2, lg.getLayers().size() );
assertEquals( 2, lg.getStyles().size() );
assertEquals( "polygon", lg.getStyles().get( 0 ).getName() );
assertEquals( "line", lg.getStyles().get( 1 ).getName() );
}
public void testDelete() throws Exception {
MockHttpServletResponse response = deleteAsServletResponse( "/rest/layergroups/sfLayerGroup");
assertEquals( 200, response.getStatusCode() );
assertEquals( 0, catalog.getLayerGroups().size() );
}
}