package org.geoserver.web.data.layer; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; import javax.xml.namespace.QName; import org.apache.wicket.Component; import org.apache.wicket.IPageMap; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.form.CheckBox; import org.geoserver.catalog.LayerInfo; import org.geoserver.data.test.MockData; import org.geoserver.web.GeoServerWicketTestSupport; import org.geoserver.web.wicket.GeoServerTablePanel; public class LayerPageTest extends GeoServerWicketTestSupport { public static QName GS_BUILDINGS = new QName(MockData.DEFAULT_URI, "Buildings", MockData.DEFAULT_PREFIX); @Override protected void populateDataDirectory(MockData dataDirectory) throws Exception { dataDirectory.addWellKnownType(MockData.BUILDINGS, null); // add a second layer, same name, different workspace String buildings = MockData.BUILDINGS.getLocalPart(); URL properties = MockData.class.getResource(buildings + ".properties"); dataDirectory.addPropertiesType(GS_BUILDINGS, properties, Collections.singletonMap(MockData.KEY_STYLE, buildings)); } 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:1: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.getServletRequest().setParameter(selector.getInputName(), "true"); tester.executeAjaxEvent(selector, "onclick"); 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; } }