package org.geoserver.web.data.store;
import java.util.List;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.data.test.MockData;
import org.geoserver.web.GeoServerWicketTestSupport;
public class CoverageStoreEditPageTest extends GeoServerWicketTestSupport {
CoverageStoreInfo coverageStore;
@Override
protected void populateDataDirectory(MockData dataDirectory) throws Exception {
super.populateDataDirectory(dataDirectory);
dataDirectory.addWellKnownCoverageTypes();
}
@Override
protected void setUpInternal() throws Exception {
login();
coverageStore = getCatalog().getStoreByName(MockData.TASMANIA_BM.getLocalPart(),
CoverageStoreInfo.class);
tester.startPage(new CoverageStoreEditPage(coverageStore.getId()));
// print(tester.getLastRenderedPage(), true, true);
}
public void testLoad() {
tester.assertRenderedPage(CoverageStoreEditPage.class);
tester.assertNoErrorMessage();
tester.assertLabel("rasterStoreForm:storeType", "GeoTIFF");
tester.assertModelValue("rasterStoreForm:namePanel:border:paramValue", "BlueMarble");
}
public void testChangeName() {
FormTester form = tester.newFormTester("rasterStoreForm");
form.setValue("namePanel:border:paramValue", "BlueMarbleModified");
form.submit();
tester.clickLink("rasterStoreForm:save");
tester.assertNoErrorMessage();
tester.assertRenderedPage(StorePage.class);
assertNotNull(getCatalog().getStoreByName("BlueMarbleModified", CoverageStoreInfo.class));
}
public void testNameRequired() {
FormTester form = tester.newFormTester("rasterStoreForm");
form.setValue("namePanel:border: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
*/
public void testWorkspaceSyncsUpWithNamespace() {
final Catalog catalog = getCatalog();
final FormTester formTester = tester.newFormTester("rasterStoreForm");
final String wsDropdownPath = "rasterStoreForm:workspacePanel:border: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: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());
}
}
}