/* (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.demo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.config.GeoServerInfo;
import org.geoserver.platform.resource.Files;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geotools.test.TestData;
import org.junit.Before;
import org.junit.Test;
import org.springframework.util.SerializationUtils;
/**
*
* @author Gabriel Roldan
* @verion $Id$
*/
public class DemoRequestsPageTest extends GeoServerWicketTestSupport {
private File demoDir;
@Before
public void setUp() throws Exception {
demoDir = TestData.file(this, "demo-requests");
tester.startPage(new DemoRequestsPage(Files.asResource(demoDir)));
}
/**
* Kind of smoke test to make sure the page structure was correctly set up once loaded
*/
@Test
public void testStructure() {
// print(tester.getLastRenderedPage(), true, true);
assertTrue(tester.getLastRenderedPage() instanceof DemoRequestsPage);
tester.assertComponent("demoRequestsForm", Form.class);
tester.assertComponent("demoRequestsForm:demoRequestsList", DropDownChoice.class);
tester.assertComponent("demoRequestsForm:url", TextField.class);
tester.assertComponent("demoRequestsForm:body:editorContainer:editorParent:editor",
TextArea.class);
tester.assertComponent("demoRequestsForm:username", TextField.class);
tester.assertComponent("demoRequestsForm:password", PasswordTextField.class);
tester.assertComponent("demoRequestsForm:submit", AjaxSubmitLink.class);
tester.assertComponent("responseWindow", ModalWindow.class);
}
@SuppressWarnings("unchecked")
@Test
public void testDemoListLoaded() {
// print(tester.getLastRenderedPage(), true, true);
/*
* Expected choices are the file names in the demo requests dir
* (/src/test/resources/test-data/demo-requests in this case)
*/
final List<String> expectedList = Arrays.asList(new String[] { "WFS_getFeature-1.1.xml",
"WMS_describeLayer.url" });
DropDownChoice dropDown = (DropDownChoice) tester
.getComponentFromLastRenderedPage("demoRequestsForm:demoRequestsList");
List choices = dropDown.getChoices();
assertEquals(expectedList, choices);
}
@Test
public void testUrlLinkUnmodified() {
// print(tester.getLastRenderedPage(), true, true);
final FormTester requestFormTester = tester.newFormTester("demoRequestsForm");
final String requestName = "WMS_describeLayer.url";
requestFormTester.select("demoRequestsList", 1);
/*
* There's an AjaxFormSubmitBehavior attached to onchange so force it
*/
tester.executeAjaxEvent("demoRequestsForm:demoRequestsList", "change");
tester.assertModelValue("demoRequestsForm:demoRequestsList", requestName);
final boolean isAjax = true;
tester.clickLink("demoRequestsForm:submit", isAjax);
tester.assertVisible("responseWindow");
IModel model = tester.getLastRenderedPage().getDefaultModel();
assertTrue(model.getObject() instanceof DemoRequest);
DemoRequest req = (DemoRequest) model.getObject();
assertEquals(Files.asResource(demoDir).path(), req.getDemoDir());
String requestFileName = req.getRequestFileName();
String requestUrl = req.getRequestUrl();
String requestBody = req.getRequestBody();
assertEquals(requestName, requestFileName);
assertNotNull(requestUrl);
assertNull(requestBody);
}
@Test
public void testUrlLinkSelected() {
// print(tester.getLastRenderedPage(), true, true);
final FormTester requestFormTester = tester.newFormTester("demoRequestsForm");
final String requestName = "WMS_describeLayer.url";
requestFormTester.select("demoRequestsList", 1);
/*
* There's an AjaxFormSubmitBehavior attached to onchange so force it
*/
tester.executeAjaxEvent("demoRequestsForm:demoRequestsList", "change");
tester.assertModelValue("demoRequestsForm:demoRequestsList", requestName);
final boolean isAjax = true;
tester.clickLink("demoRequestsForm:submit", isAjax);
tester.assertVisible("responseWindow");
IModel model = tester.getLastRenderedPage().getDefaultModel();
assertTrue(model.getObject() instanceof DemoRequest);
DemoRequest req = (DemoRequest) model.getObject();
assertEquals(Files.asResource(demoDir).path(), req.getDemoDir());
String requestFileName = req.getRequestFileName();
String requestUrl = req.getRequestUrl();
String requestBody = req.getRequestBody();
assertEquals(requestName, requestFileName);
assertNotNull(requestUrl);
assertNull(requestBody);
}
@Test
public void testUrlLinkModified() {
// print(tester.getLastRenderedPage(), true, true);
final FormTester requestFormTester = tester.newFormTester("demoRequestsForm");
final String requestName = "WMS_describeLayer.url";
requestFormTester.select("demoRequestsList", 1);
/*
* There's an AjaxFormSubmitBehavior attached to onchange so force it
*/
tester.executeAjaxEvent("demoRequestsForm:demoRequestsList", "change");
tester.assertModelValue("demoRequestsForm:demoRequestsList", requestName);
final String modifiedUrl = "http://modified/url";
TextField url = (TextField) tester.getComponentFromLastRenderedPage("demoRequestsForm:url");
url.setModelValue(new String[] { modifiedUrl });
assertEquals(modifiedUrl, url.getValue());
final boolean isAjax = true;
tester.clickLink("demoRequestsForm:submit", isAjax);
tester.assertVisible("responseWindow");
IModel model = tester.getLastRenderedPage().getDefaultModel();
assertTrue(model.getObject() instanceof DemoRequest);
DemoRequest req = (DemoRequest) model.getObject();
String requestUrl = req.getRequestUrl();
assertEquals(modifiedUrl, requestUrl);
}
@Test
public void testProxyBaseUrl() {
// setup the proxy base url
GeoServerInfo global = getGeoServer().getGlobal();
String proxyBaseUrl = "http://www.geoserver.org/test_gs";
global.getSettings().setProxyBaseUrl(proxyBaseUrl);
try {
getGeoServer().save(global);
final FormTester requestFormTester = tester.newFormTester("demoRequestsForm");
final String requestName = "WMS_describeLayer.url";
requestFormTester.select("demoRequestsList", 1);
/*
* There's an AjaxFormSubmitBehavior attached to onchange so force it
*/
tester.executeAjaxEvent("demoRequestsForm:demoRequestsList", "change");
tester.assertModelValue("demoRequestsForm:demoRequestsList", requestName);
final boolean isAjax = true;
tester.clickLink("demoRequestsForm:submit", isAjax);
tester.assertVisible("responseWindow");
IModel model = tester.getLastRenderedPage().getDefaultModel();
assertTrue(model.getObject() instanceof DemoRequest);
DemoRequest req = (DemoRequest) model.getObject();
assertEquals(Files.asResource(demoDir).path(), req.getDemoDir());
String requestFileName = req.getRequestFileName();
String requestUrl = req.getRequestUrl();
assertEquals(requestName, requestFileName);
assertTrue(requestUrl.startsWith(proxyBaseUrl+"/wms"));
} finally {
global.getSettings().setProxyBaseUrl(null);
getGeoServer().save(global);
}
}
@Test
public void testSerializable() {
DemoRequestsPage page = new DemoRequestsPage();
DemoRequestsPage page2 = (DemoRequestsPage) SerializationUtils.deserialize( SerializationUtils.serialize(page));
assertEquals(page.demoDir, page2.demoDir);
}
}