/* (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.store;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.List;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogBuilder;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.data.test.MockData;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.junit.Before;
import org.junit.Test;
public class CoverageStoreEditPageTest extends GeoServerWicketTestSupport {
CoverageStoreInfo coverageStore;
@Override
protected void setUpTestData(SystemTestData testData) throws Exception {
super.setUpTestData(testData);
testData.setUpDefaultRasterLayers();
}
@Before
public void init() throws IOException {
login();
coverageStore = getCatalog().getStoreByName(MockData.TASMANIA_BM.getLocalPart(),
CoverageStoreInfo.class);
if(coverageStore == null) {
// revert the bluemable modified change
Catalog cat = getCatalog();
CoverageStoreInfo c = cat.getCoverageStoreByName("BlueMarbleModified");
if (c != null) {
c.setName("BlueMarble");
cat.save(c);
}
coverageStore = getCatalog().getStoreByName(MockData.TASMANIA_BM.getLocalPart(),
CoverageStoreInfo.class);
}
tester.startPage(new CoverageStoreEditPage(coverageStore.getId()));
}
@Test
public void testLoad() {
tester.assertRenderedPage(CoverageStoreEditPage.class);
tester.assertNoErrorMessage();
tester.assertLabel("rasterStoreForm:storeType", "GeoTIFF");
tester.assertModelValue("rasterStoreForm:namePanel:border:border_body:paramValue", "BlueMarble");
}
@Test
public void testChangeName() {
FormTester form = tester.newFormTester("rasterStoreForm");
form.setValue("namePanel:border:border_body:paramValue", "BlueMarbleModified");
form.submit();
tester.clickLink("rasterStoreForm:save");
tester.assertNoErrorMessage();
tester.assertRenderedPage(StorePage.class);
assertNotNull(getCatalog().getStoreByName("BlueMarbleModified", CoverageStoreInfo.class));
}
@Test
public void testNameRequired() {
FormTester form = tester.newFormTester("rasterStoreForm");
form.setValue("namePanel:border:border_body:paramValue", null);
form.submit();
tester.clickLink("rasterStoreForm:save");
tester.assertRenderedPage(CoverageStoreEditPage.class);
tester.assertErrorMessages(new String[] { "Field 'Data Source Name' is required." });
}
/**
* Test that changing a datastore's workspace updates the datastore's "namespace" parameter as
* well as the namespace of its previously configured resources
*/
@Test
public void testWorkspaceSyncsUpWithNamespace() {
final Catalog catalog = getCatalog();
final FormTester formTester = tester.newFormTester("rasterStoreForm");
final String wsDropdownPath = "rasterStoreForm:workspacePanel:border:border_body:paramValue";
tester.assertModelValue(wsDropdownPath, catalog.getWorkspaceByName(MockData.WCS_PREFIX));
// select the fifth item in the drop down, which is the cdf workspace
formTester.select("workspacePanel:border:border_body:paramValue", 2);
// weird on this test I need to both call form.submit() and also simulate clicking on the
// ajax "save" link for the model to be updated. On a running geoserver instance it works ok
// though
formTester.submit();
final boolean isAjax = true;
tester.clickLink("rasterStoreForm:save", isAjax);
// did the save finish normally?
tester.assertRenderedPage(StorePage.class);
CoverageStoreInfo store = catalog.getCoverageStore(coverageStore.getId());
WorkspaceInfo workspace = store.getWorkspace();
assertFalse(MockData.WCS_PREFIX.equals(workspace.getName()));
// was the namespace for the datastore resources updated?
List<CoverageInfo> resourcesByStore;
resourcesByStore = catalog.getResourcesByStore(store, CoverageInfo.class);
assertTrue(resourcesByStore.size() > 0);
for (CoverageInfo cv : resourcesByStore) {
assertEquals("Namespace for " + cv.getName() + " was not updated", workspace.getName(),
cv.getNamespace().getPrefix());
}
}
@Test
public void testEditDetached() throws Exception {
final Catalog catalog = getCatalog();
CoverageStoreInfo store = catalog.getFactory().createCoverageStore();
new CatalogBuilder(catalog).updateCoverageStore(store, coverageStore);
assertNull(store.getId());
try {
tester.startPage(new CoverageStoreEditPage(store));
tester.assertNoErrorMessage();
FormTester form = tester.newFormTester("rasterStoreForm");
form.setValue("namePanel:border:border_body:paramValue", "foo");
form.submit();
tester.clickLink("rasterStoreForm:save");
tester.assertNoErrorMessage();
assertNotNull(store.getId());
assertEquals("foo", store.getName());
assertNotNull(catalog.getStoreByName(coverageStore.getName(), CoverageStoreInfo.class));
assertNotNull(catalog.getStoreByName("foo", CoverageStoreInfo.class));
} finally {
catalog.remove(store);
}
}
@Test
public void testCoverageStoreEdit() throws Exception {
final Catalog catalog = getCatalog();
CoverageStoreInfo store = catalog.getFactory().createCoverageStore();
new CatalogBuilder(catalog).updateCoverageStore(store, coverageStore);
assertNull(store.getId());
try {
tester.startPage(new CoverageStoreEditPage(store));
tester.assertNoErrorMessage();
FormTester form = tester.newFormTester("rasterStoreForm");
form.setValue("namePanel:border:border_body:paramValue", "foo");
form.submit();
tester.clickLink("rasterStoreForm:save");
tester.assertNoErrorMessage();
assertNotNull(store.getId());
CoverageStoreInfo expandedStore = catalog.getResourcePool().clone(store, true);
assertNotNull(expandedStore.getId());
assertNotNull(expandedStore.getCatalog());
catalog.validate(expandedStore, false).throwIfInvalid();
} finally {
catalog.remove(store);
}
}
}