/* (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.security.web; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Iterator; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.util.tester.FormTester; import org.geoserver.web.ComponentBuilder; import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.junit.Before; import org.junit.Test; public abstract class AbstractTabbedListPageTest<T> extends AbstractSecurityWicketTestSupport { public static final String FIRST_COLUM_PATH="itemProperties:0:component:link"; @Before public void setUp() throws Exception { login(); } @Before public void initService() throws Exception { doInitialize(); clearServices(); insertValues(); } protected void doInitialize() throws Exception { initializeForXML(); } @Test public void testRenders() throws Exception { tester.assertRenderedPage(listPage(getServiceName()).getClass()); } protected String getItemsPath() { return getTabbedPanelPath()+":panel:table:listContainer:items"; }; protected abstract String getTabbedPanelPath(); protected abstract String getServiceName(); abstract protected Page listPage(String serviceName); abstract protected Page newPage(AbstractSecurityPage responsePage,Object...params); abstract protected Page editPage(AbstractSecurityPage responsePage,Object...params); abstract protected String getSearchString() throws Exception; abstract protected Property<T> getEditProperty(); abstract protected boolean checkEditForm(String search); @Test public void testEdit() throws Exception { // the name link for the first user AbstractSecurityPage listPage = (AbstractSecurityPage) listPage(getServiceName()); //tester.startPage(listPage); String search = getSearchString(); assertNotNull(search); Component c = getFromList(FIRST_COLUM_PATH, search, getEditProperty()); assertNotNull(c); tester.clickLink(c.getPageRelativePath()); tester.assertRenderedPage(editPage(listPage).getClass()); assertTrue(checkEditForm(search)); } protected Component getFromList(String columnPath, Object columnValue, Property<T> property) { MarkupContainer listView = (MarkupContainer) tester.getLastRenderedPage().get(getItemsPath()); @SuppressWarnings("unchecked") Iterator<Component> it = (Iterator<Component>) listView.iterator(); while (it.hasNext()) { MarkupContainer m = (MarkupContainer) it.next(); Component c = m.get(columnPath); @SuppressWarnings("unchecked") T modelObject = (T) c.getDefaultModelObject(); if (columnValue.equals(property.getPropertyValue(modelObject))) return c; } return null; } @Test public void testNew() throws Exception { listPage(getServiceName()); tester.clickLink(getTabbedPanelPath()+":panel:header:addNew"); Page newPage = tester.getLastRenderedPage(); tester.assertRenderedPage(newPage.getClass()); } @Test public void testRemove() throws Exception { addAdditonalData(); doRemove(getTabbedPanelPath()+":panel:header:removeSelected"); } protected void doRemove(String pathForLink) throws Exception { Page testPage = listPage(getServiceName()); String selectAllPath = getTabbedPanelPath()+":panel:table:listContainer:selectAllContainer:selectAll"; tester.assertComponent(selectAllPath, CheckBox.class); CheckBox selectAllComponent = (CheckBox) tester.getComponentFromLastRenderedPage(selectAllPath); // simulate setting a form value, without an actual form around it setFormComponentValue(selectAllComponent, "true"); tester.executeAjaxEvent(selectAllPath, "click"); String windowPath=getTabbedPanelPath()+ ":panel:dialog:dialog"; ModalWindow w = (ModalWindow) testPage.get(windowPath); assertNull(w.getTitle()); // window was not opened tester.executeAjaxEvent(pathForLink, "click"); assertNotNull(w.getTitle()); // window was opened simulateDeleteSubmit(); executeModalWindowCloseButtonCallback(w); } protected abstract void simulateDeleteSubmit() throws Exception; protected Component getRemoveLink() { Component result =tester.getLastRenderedPage().get(getTabbedPanelPath()+":panel:header:removeSelected"); assertNotNull(result); return result; } protected Component getRemoveLinkWithRoles() { Component result =tester.getLastRenderedPage().get(getTabbedPanelPath()+":panel:header:removeSelectedWithRoles"); assertNotNull(result); return result; } protected Component getAddLink() { Component result =tester.getLastRenderedPage().get(getTabbedPanelPath()+":panel:header:addNew"); assertNotNull(result); return result; } }