/* (c) 2014 - 2016 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.web.demo; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Iterator; import org.apache.wicket.AttributeModifier; import org.apache.wicket.MarkupContainer; import org.apache.wicket.behavior.Behavior; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.data.DataView; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.CatalogBuilder; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.config.GeoServer; import org.geoserver.data.test.MockData; import org.geoserver.web.GeoServerWicketTestSupport; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geoserver.wfs.WFSInfo; import org.junit.Ignore; import org.junit.Test; public class MapPreviewPageTest extends GeoServerWicketTestSupport { @Test public void testValues() throws Exception { tester.startPage(MapPreviewPage.class); tester.assertRenderedPage(MapPreviewPage.class); } @Test public void testLayerGroupNamesPrefixed() throws Exception { Catalog cat = getCatalog(); LayerGroupInfo lg = cat.getFactory().createLayerGroup(); lg.setName("foo"); lg.setWorkspace(cat.getWorkspaceByName("sf")); lg.getLayers().add(cat.getLayerByName(getLayerId(MockData.PRIMITIVEGEOFEATURE))); new CatalogBuilder(cat).calculateLayerGroupBounds(lg); cat.add(lg); tester.startPage(MapPreviewPage.class); tester.assertRenderedPage(MapPreviewPage.class); //move to next page GeoServerTablePanel table = (GeoServerTablePanel) tester.getComponentFromLastRenderedPage("table"); System.out.println(table.getDataProvider().size()); tester.clickLink("table:navigatorBottom:navigator:next", true); DataView data = (DataView) tester.getComponentFromLastRenderedPage("table:listContainer:items"); boolean exists = false; for (Iterator it = data.iterator(); it.hasNext(); ) { MarkupContainer c = (MarkupContainer) it.next(); Label l = (Label) c.get("itemProperties:2:component"); String model = l.getDefaultModelObjectAsString(); if ("sf:foo".equals(model)) { exists = true; } } assertTrue(exists); } @Test @Ignore public void testLayerNamesPrefixed() throws Exception { Catalog cat = getCatalog(); LayerInfo ly = cat.getLayerByName(getLayerId(MockData.STREAMS)); assertNotNull(ly); tester.startPage(MapPreviewPage.class); tester.assertRenderedPage(MapPreviewPage.class); //move to next page tester.clickLink("table:navigatorBottom:navigator:next", true); DataView data = (DataView) tester.getComponentFromLastRenderedPage("table:listContainer:items"); boolean exists = false; for (Iterator it = data.iterator(); it.hasNext(); ) { MarkupContainer c = (MarkupContainer) it.next(); Label l = (Label) c.get("itemProperties:1:component"); if (getLayerId(MockData.STREAMS).equals(l.getDefaultModelObjectAsString())) { exists = true; } } assertTrue(exists); } @Test public void testMaxNumberOfFeaturesForPreview() throws Exception { GeoServer geoserver = getGeoServer(); WFSInfo wfsInfo = geoserver.getService(WFSInfo.class); int maxFeatures = 100; wfsInfo.setMaxNumberOfFeaturesForPreview(maxFeatures); geoserver.save(wfsInfo); tester.startPage(MapPreviewPage.class); tester.assertRenderedPage(MapPreviewPage.class); assertMaxFeaturesInData( (DataView) tester.getComponentFromLastRenderedPage("table:listContainer:items"), maxFeatures); maxFeatures = 0; wfsInfo.setMaxNumberOfFeaturesForPreview(maxFeatures); geoserver.save(wfsInfo); tester.startPage(MapPreviewPage.class); tester.assertRenderedPage(MapPreviewPage.class); assertMaxFeaturesInData( (DataView) tester.getComponentFromLastRenderedPage("table:listContainer:items"), maxFeatures); } @Test public void testWfsOutputFormatValueUrlEncoding() { tester.startPage(MapPreviewPage.class); tester.assertRenderedPage(MapPreviewPage.class); Label optionLabel = (Label) tester.getComponentFromLastRenderedPage("table:listContainer:items:4:itemProperties:4:component:menu:wfs:wfsFormats:3"); assertTrue(optionLabel.getDefaultModelObjectAsString().equals("GML3.2")); for (Iterator<? extends Behavior> itBehaviors = optionLabel.getBehaviors().iterator(); itBehaviors.hasNext();) { Behavior b = itBehaviors.next(); if (b instanceof AttributeModifier) { AttributeModifier am = (AttributeModifier)b; String url = am.toString(); assertTrue(!url.contains("gml+xml")); assertTrue(url.contains("gml%2Bxml")); break; } } } private void assertMaxFeaturesInData(DataView data, int maxFeatures) { for (Iterator it = data.iterator(); it.hasNext(); ) { MarkupContainer c = (MarkupContainer) it.next(); MarkupContainer list = (MarkupContainer) c.get("itemProperties:4:component:menu"); for (Iterator<? extends Behavior> itBehaviors = list.getBehaviors().iterator(); itBehaviors.hasNext();) { Behavior b = itBehaviors.next(); if (b instanceof AttributeModifier) { AttributeModifier am = (AttributeModifier)b; String url = am.toString(); if (maxFeatures > 0) { assertTrue(url.contains("&maxFeatures="+maxFeatures)); } else { assertTrue(!url.contains("&maxFeatures=")); } } } } } }