package org.geoserver.web.data.workspace; import java.util.List; import org.apache.wicket.feedback.FeedbackMessage; import org.apache.wicket.markup.html.form.ValidationErrorFeedback; import org.apache.wicket.util.tester.FormTester; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.NamespaceInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.data.test.MockData; import org.geoserver.web.GeoServerWicketTestSupport; public class WorkspaceEditPageTest extends GeoServerWicketTestSupport { private WorkspaceInfo citeWorkspace; @Override protected void setUpInternal() throws Exception { super.setUpInternal(); login(); citeWorkspace = getCatalog().getWorkspaceByName(MockData.CITE_PREFIX); tester.startPage(new WorkspaceEditPage(citeWorkspace)); // print(tester.getLastRenderedPage(), true, true); } public void testURIRequired() { FormTester form = tester.newFormTester("form"); form.setValue("uri", ""); form.submit(); tester.assertRenderedPage(WorkspaceEditPage.class); tester.assertErrorMessages(new String[] {"Field 'uri' is required."}); } public void testLoad() { tester.assertRenderedPage(WorkspaceEditPage.class); tester.assertNoErrorMessage(); tester.assertModelValue("form:name", MockData.CITE_PREFIX); tester.assertModelValue("form:uri", MockData.CITE_URI); } public void testValidURI() { FormTester form = tester.newFormTester("form"); form.setValue("uri", "http://www.geoserver.org"); form.submit(); tester.assertRenderedPage(WorkspacePage.class); tester.assertNoErrorMessage(); } public void testInvalidURI() { FormTester form = tester.newFormTester("form"); form.setValue("uri", "not a valid uri"); form.submit(); tester.assertRenderedPage(WorkspaceEditPage.class); List messages = tester.getMessages(FeedbackMessage.ERROR); assertEquals(1, messages.size()); assertEquals("Invalid URI syntax: not a valid uri", ((ValidationErrorFeedback)messages.get(0)).getMessage()); } /** * See GEOS-3322, upon a namespace URI change the datastores connection parameter shall be * changed accordingly */ public void testUpdatesDataStoresNamespace() { final Catalog catalog = getCatalog(); final List<DataStoreInfo> storesInitial = catalog.getStoresByWorkspace(citeWorkspace, DataStoreInfo.class); final NamespaceInfo citeNamespace = catalog.getNamespaceByPrefix(citeWorkspace.getName()); for (DataStoreInfo store : storesInitial) { assertEquals(citeNamespace.getURI(), store.getConnectionParameters().get("namespace")); } FormTester form = tester.newFormTester("form"); final String newNsURI = "http://www.geoserver.org/changed"; form.setValue("uri", newNsURI); form.submit(); tester.assertNoErrorMessage(); List<DataStoreInfo> storesChanged = catalog.getStoresByWorkspace(citeWorkspace, DataStoreInfo.class); for (DataStoreInfo store : storesChanged) { assertEquals(newNsURI, store.getConnectionParameters().get("namespace")); } } public void testDefaultCheckbox() { assertFalse(getCatalog().getDefaultWorkspace().getName().equals(MockData.CITE_PREFIX)); FormTester form = tester.newFormTester("form"); form.setValue("default", "true"); form.submit(); tester.assertNoErrorMessage(); assertEquals(MockData.CITE_PREFIX, getCatalog().getDefaultWorkspace().getName()); } }