package org.geoserver.web.data.store;
import java.io.Serializable;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.util.file.File;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.NamespaceInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.data.test.MockData;
import org.geoserver.web.GeoServerWicketTestSupport;
public class DataAccessEditPageTest extends GeoServerWicketTestSupport {
private DataStoreInfo store;
@Override
protected void setUpInternal() throws Exception {
store = getCatalog().getStoreByName(MockData.CITE_PREFIX, DataStoreInfo.class);
tester.startPage(new DataAccessEditPage(store.getId()));
// print(tester.getLastRenderedPage(), true, true);
}
public void testLoad() {
tester.assertRenderedPage(DataAccessEditPage.class);
tester.assertNoErrorMessage();
tester.assertLabel("dataStoreForm:storeType", "Properties");
tester.assertModelValue("dataStoreForm:dataStoreNamePanel:border:paramValue", "cite");
String expectedPath = new File(getTestData().getDataDirectoryRoot(), "cite").getPath();
tester.assertModelValue(
"dataStoreForm:parametersPanel:parameters:0:parameterPanel:border:paramValue",
expectedPath);
}
// This is disabled due to bad interactions between the submit link and the form submit
// I need to reproduce ina stand alone test case and report to the Wicket devs
// public void testEditName() {
//
// FormTester form = tester.newFormTester("dataStoreForm");
// prefillForm(form);
// form.setValue("dataStoreNamePanel:border:paramValue", "citeModified");
// form.submit();
// tester.assertNoErrorMessage();
// tester.clickLink("dataStoreForm:save");
// tester.assertNoErrorMessage();
//
// tester.assertRenderedPage(StorePage.class);
// }
public void testNameRequired() {
FormTester form = tester.newFormTester("dataStoreForm");
form.setValue("dataStoreNamePanel:border:paramValue", null);
form.submit();
// missing click link , the validation triggers before it
tester.assertRenderedPage(DataAccessEditPage.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
*
* @REVISIT: this test fails on maven but is ok on eclipse...
*/
public void _testWorkspaceSyncsUpWithNamespace() {
final FormTester formTester = tester.newFormTester("dataStoreForm");
print(tester.getLastRenderedPage(), true, true);
final String wsDropdownPath = "dataStoreForm:workspacePanel:border:paramValue";
final String namespaceParamPath = "dataStoreForm:parametersPanel:parameters:1:parameterPanel:paramValue";
final String directoryParamPath = "dataStoreForm:parametersPanel:parameters:0:parameterPanel:border:paramValue";
final Catalog catalog = getCatalog();
tester.assertModelValue(wsDropdownPath, catalog.getWorkspaceByName(MockData.CITE_PREFIX));
// tester.assertModelValue(namespaceParamPath, getCatalog().getNamespaceByPrefix(
// MockData.CITE_PREFIX));
tester.assertModelValue(namespaceParamPath, catalog.getNamespaceByPrefix(
MockData.CITE_PREFIX).getURI());
Serializable directory = store.getConnectionParameters().get("directory");
tester.assertModelValue(directoryParamPath, directory);
WorkspaceInfo expectedWorkspace = catalog.getWorkspaceByName(MockData.CDF_PREFIX);
NamespaceInfo expectedNamespace = catalog.getNamespaceByPrefix(MockData.CDF_PREFIX);
// select the fifth item in the drop down, which is the cdf workspace
formTester.select("workspacePanel:border:paramValue", 4);
Component wsDropDown = tester.getComponentFromLastRenderedPage(wsDropdownPath);
tester.executeAjaxEvent(wsDropDown, "onchange");
// final String namespaceParamPath =
// "dataStoreForm:parameters:1:parameterPanel:border:paramValue";
// did the workspace change?
tester.assertModelValue(wsDropdownPath, expectedWorkspace);
// did the namespace change accordingly?
// tester.assertModelValue(namespaceParamPath, expectedNamespace);
tester.assertModelValue(namespaceParamPath, expectedNamespace.getURI());
tester.assertModelValue(directoryParamPath, directory);
// use clickLink to simulate hitting the save button instead of calling
// formTester.submit(). Otherwise the save action is not called at all
// print(tester.getLastRenderedPage(), true, true);
final boolean isAjax = true;
tester.clickLink("dataStoreForm:save", isAjax);
// did the save finish normally?
tester.assertRenderedPage(StorePage.class);
// was the namespace datastore parameter updated?
DataStoreInfo dataStore = catalog.getDataStore(store.getId());
Serializable namespace = dataStore.getConnectionParameters().get("namespace");
assertEquals(expectedNamespace.getURI(), namespace);
// was the namespace for the datastore resources updated?
List<FeatureTypeInfo> resourcesByStore = catalog.getResourcesByStore(dataStore,
FeatureTypeInfo.class);
for (FeatureTypeInfo ft : resourcesByStore) {
assertEquals("Namespace for " + ft.getName() + " was not updated", expectedNamespace,
ft.getNamespace());
}
}
}