/* (c) 2016 Open Source Geospatial Foundation - all rights reserved
* 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.assertNotNull;
import static org.junit.Assert.assertNull;
import java.net.URL;
import org.apache.wicket.Component;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.ResourcePool;
import org.geoserver.catalog.WMSStoreInfo;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geoserver.web.data.store.panel.WorkspacePanel;
import org.junit.Before;
import org.junit.Test;
public class WMSStoreNewPageTest extends GeoServerWicketTestSupport {
/**
* print page structure?
*/
private static final boolean debugMode = false;
@Before
public void init() {
}
private WMSStoreNewPage startPage() {
final WMSStoreNewPage page = new WMSStoreNewPage();
login();
tester.startPage(page);
if (debugMode) {
print(page, true, true);
}
return page;
}
/**
* A kind of smoke test that only asserts the page is rendered when first loaded
*/
@Test
public void testPageRendersOnLoad() {
startPage();
tester.assertComponent("form:workspacePanel", WorkspacePanel.class);
}
@Test
public void testInitialModelState() {
WMSStoreNewPage page = startPage();
// print(page, true, true);
assertNull(page.getDefaultModelObject());
tester.assertModelValue("form:enabledPanel:paramValue", Boolean.TRUE);
tester.assertModelValue("form:workspacePanel:border:border_body:paramValue",
getCatalog().getDefaultWorkspace());
}
@Test
public void testSaveNewStore() {
WMSStoreNewPage page = startPage();
// print(page, true, true);
assertNull(page.getDefaultModelObject());
final Catalog catalog = getCatalog();
WMSStoreInfo info = catalog.getFactory().createWebMapServer();
info.setName("foo");
tester.assertNoErrorMessage();
FormTester form = tester.newFormTester("form");
form.select("workspacePanel:border:border_body:paramValue", 4);
Component wsDropDown = tester.getComponentFromLastRenderedPage(
"form:workspacePanel:border:border_body:paramValue");
tester.executeAjaxEvent(wsDropDown, "change");
form.setValue("namePanel:border:border_body:paramValue", "foo");
form.setValue("capabilitiesURL:border:border_body:paramValue", "http://foo");
tester.clickLink("form:save", true);
tester.assertErrorMessages("Connection test failed: foo");
catalog.save(info);
assertNotNull(info.getId());
WMSStoreInfo expandedStore = catalog.getResourcePool().clone(info, true);
assertNotNull(expandedStore.getId());
assertNotNull(expandedStore.getCatalog());
catalog.validate(expandedStore, false).throwIfInvalid();
}
@Test
public void testSaveNewStoreEntityExpansion() throws Exception {
WMSStoreNewPage page = startPage();
assertNull(page.getDefaultModelObject());
final Catalog catalog = getCatalog();
WMSStoreInfo info = getCatalog().getFactory().createWebMapServer();
URL url = getClass().getResource("1.3.0Capabilities-xxe.xml");
info.setName("bar");
tester.assertNoErrorMessage();
FormTester form = tester.newFormTester("form");
form.select("workspacePanel:border:border_body:paramValue", 4);
Component wsDropDown = tester.getComponentFromLastRenderedPage(
"form:workspacePanel:border:border_body:paramValue");
tester.executeAjaxEvent(wsDropDown, "change");
form.setValue("namePanel:border:border_body:paramValue", "bar");
form.setValue("capabilitiesURL:border:border_body:paramValue", url.toExternalForm());
tester.clickLink("form:save", true);
tester.assertErrorMessages("Connection test failed: Error while parsing XML.");
//make sure clearing the catalog does not clear the EntityResolver
getGeoServer().reload();
tester.clickLink("form:save", true);
tester.assertErrorMessages("Connection test failed: Error while parsing XML.");
catalog.save(info);
assertNotNull(info.getId());
WMSStoreInfo expandedStore = catalog.getResourcePool().clone(info, true);
assertNotNull(expandedStore.getId());
assertNotNull(expandedStore.getCatalog());
catalog.validate(expandedStore, false).throwIfInvalid();
}
}