/* (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.data.layer; import static org.geoserver.data.test.CiteTestData.BUILDINGS; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; import org.apache.wicket.markup.html.form.CheckBox; import org.geoserver.catalog.LayerInfo; import org.geoserver.data.test.MockData; import org.geoserver.data.test.SystemTestData; import org.geoserver.data.test.SystemTestData.LayerProperty; import org.geoserver.web.GeoServerWicketTestSupport; import org.geoserver.web.wicket.GeoServerTablePanel; import org.junit.Test; public class LayerPageTest extends GeoServerWicketTestSupport { public static QName GS_BUILDINGS = new QName(MockData.DEFAULT_URI, "Buildings", MockData.DEFAULT_PREFIX); @Override protected void setUpTestData(SystemTestData testData) throws Exception { //we don't want any of the defaults testData.setUpSecurity(); } @Override protected void onSetUp(SystemTestData testData) throws Exception { super.onSetUp(testData); testData.addVectorLayer(BUILDINGS, getCatalog()); Map<LayerProperty,Object> props = new HashMap(); props.put(LayerProperty.STYLE, BUILDINGS.getLocalPart()); testData.addVectorLayer(GS_BUILDINGS, props, getCatalog()); } @Test public void testBasicActions() { login(); // test that we can load the page tester.startPage(new LayerPage()); tester.assertRenderedPage(LayerPage.class); tester.assertNoErrorMessage(); // check it has two layers GeoServerTablePanel table = (GeoServerTablePanel) tester.getComponentFromLastRenderedPage("table"); assertEquals(2, table.getDataProvider().size()); List<String> workspaces = getWorkspaces(table); assertTrue(workspaces.contains("cite")); assertTrue(workspaces.contains("gs")); // sort on workspace once (top to bottom) String wsSortPath = "table:listContainer:sortableLinks:3:header:link"; tester.clickLink(wsSortPath, true); workspaces = getWorkspaces(table); assertEquals("cite", workspaces.get(0)); assertEquals("gs", workspaces.get(1)); // sort on workspace twice (bottom to top) tester.clickLink(wsSortPath, true); workspaces = getWorkspaces(table); assertEquals("gs", workspaces.get(0)); assertEquals("cite", workspaces.get(1)); // select second layer String checkBoxPath = "table:listContainer:items:6:selectItemContainer:selectItem"; CheckBox selector = (CheckBox) tester.getComponentFromLastRenderedPage(checkBoxPath); // dirty trick, how to set a form component value without a form tester.getRequest().setParameter(selector.getInputName(), "true"); tester.executeAjaxEvent(selector, "click"); assertEquals(1, table.getSelection().size()); LayerInfo li = (LayerInfo) table.getSelection().get(0); assertEquals("cite", li.getResource().getStore().getWorkspace().getName()); } private List<String> getWorkspaces(GeoServerTablePanel table) { Iterator it = table.getDataProvider().iterator(0, 2); List<String> workspaces = new ArrayList<String>(); while(it.hasNext()) { LayerInfo li = (LayerInfo) it.next(); String wsName = li.getResource().getStore().getWorkspace().getName(); workspaces.add(wsName); } return workspaces; } }