/* (c) 2014 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.workspace; import static org.junit.Assert.*; 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.config.GeoServer; import org.geoserver.config.SettingsInfo; import org.geoserver.data.test.MockData; import org.geoserver.web.GeoServerWicketTestSupport; import org.junit.Before; import org.junit.Test; public class WorkspaceEditPageTest extends GeoServerWicketTestSupport { private WorkspaceInfo citeWorkspace; @Before public void init() { login(); citeWorkspace = getCatalog().getWorkspaceByName(MockData.CITE_PREFIX); GeoServer gs = getGeoServer(); SettingsInfo s = gs.getSettings(citeWorkspace); if (s != null) { gs.remove(s); } NamespaceInfo citeNS = getCatalog().getNamespaceByPrefix(MockData.CITE_PREFIX); citeNS.setURI(MockData.CITE_URI); getCatalog().save(citeNS); tester.startPage(new WorkspaceEditPage(citeWorkspace)); } @Test 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."}); } @Test public void testLoad() { tester.assertRenderedPage(WorkspaceEditPage.class); tester.assertNoErrorMessage(); tester.assertModelValue("form:name", MockData.CITE_PREFIX); tester.assertModelValue("form:uri", MockData.CITE_URI); } @Test public void testValidURI() { FormTester form = tester.newFormTester("form"); form.setValue("uri", "http://www.geoserver.org"); form.submit(); tester.assertRenderedPage(WorkspacePage.class); tester.assertNoErrorMessage(); } @Test 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 */ @Test 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")); } } @Test 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()); } @Test public void testEnableSettings() throws Exception { GeoServer gs = getGeoServer(); assertNull(gs.getSettings(citeWorkspace)); FormTester form = tester.newFormTester("form"); form.setValue("settings:enabled", true); form.submit(); tester.assertNoErrorMessage(); assertNotNull(gs.getSettings(citeWorkspace)); } @Test public void testLocalworkspaceRemovePrefix() throws Exception { GeoServer gs = getGeoServer(); SettingsInfo settings = gs.getFactory().createSettings(); settings.setLocalWorkspaceIncludesPrefix(true); settings.setWorkspace(citeWorkspace); gs.add(settings); assertNotNull(gs.getSettings(citeWorkspace)); tester.startPage(new WorkspaceEditPage(citeWorkspace)); tester.assertRenderedPage(WorkspaceEditPage.class); FormTester form = tester.newFormTester("form"); form.setValue("settings:settingsContainer:otherSettings:localWorkspaceIncludesPrefix", false); form.submit(); assertEquals(false, settings.isLocalWorkspaceIncludesPrefix()); } @Test public void testDisableSettings() throws Exception { GeoServer gs = getGeoServer(); SettingsInfo settings = gs.getFactory().createSettings(); settings.setProxyBaseUrl("http://foo.org"); settings.setWorkspace(citeWorkspace); gs.add(settings); assertNotNull(gs.getSettings(citeWorkspace)); tester.startPage(new WorkspaceEditPage(citeWorkspace)); tester.assertRenderedPage(WorkspaceEditPage.class); FormTester form = tester.newFormTester("form"); assertEquals("http://foo.org", form.getTextComponentValue("settings:settingsContainer:otherSettings:proxyBaseUrl")); form.setValue("settings:enabled", false); form.submit(); assertNull(gs.getSettings(citeWorkspace)); } }