/* (c) 2014 - 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.inspire.web;
import java.io.Serializable;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.ValidationErrorFeedback;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.inspire.UniqueResourceIdentifiers;
import org.geoserver.web.ComponentBuilder;
import org.geoserver.web.FormTestPage;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geoserver.web.wicket.ParamResourceModel;
import org.geotools.util.Converters;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
public class UniqueResourceIdentifiersEditorTest extends GeoServerWicketTestSupport {
private UniqueResourceIdentifiers identifiers;
@Before
public void setupPanel() {
identifiers = Converters.convert(
"one,http://www.geoserver.org/one;two,http://www.geoserver.org/two,http://metadata.geoserver.org/id?two",
UniqueResourceIdentifiers.class);
tester.startPage(new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
return new UniqueResourceIdentifiersEditor(id, new Model(identifiers));
}
}));
}
@Test
public void testContents() {
// print(tester.getLastRenderedPage(), true, true);
tester.assertComponent("form", Form.class);
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:1:itemProperties:0:component:border:border_body:txt", "one");
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:1:itemProperties:1:component:border:border_body:txt", "http://www.geoserver.org/one");
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:1:itemProperties:2:component:border:border_body:txt", null);
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:2:itemProperties:0:component:border:border_body:txt", "two");
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:2:itemProperties:1:component:border:border_body:txt", "http://www.geoserver.org/two");
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:2:itemProperties:2:component:border:border_body:txt", "http://metadata.geoserver.org/id?two");
}
@Test
public void testRemoveLinks() {
// print(tester.getLastRenderedPage(), true, true);
tester.assertComponent("form", Form.class);
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:1:itemProperties:0:component:border:border_body:txt", "one");
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:2:itemProperties:0:component:border:border_body:txt", "two");
// remove the first identifier
tester.executeAjaxEvent("form:panel:container:identifiers:listContainer:items:1:itemProperties:3:component:remove", "click");
assertNull(tester.getLastRenderedPage().get("form:panel:container:identifiers:listContainer:items:1:itemProperties:0:component:border:border_body:txt"));
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:2:itemProperties:0:component:border:border_body:txt", "two");
// remove the second as well
tester.executeAjaxEvent("form:panel:container:identifiers:listContainer:items:2:itemProperties:3:component:remove", "click");
assertNull(tester.getLastRenderedPage().get("form:panel:container:identifiers:listContainer:items:1:itemProperties:0:component:border:border_body:txt"));
assertNull(tester.getLastRenderedPage().get("form:panel:container:identifiers:listContainer:items:2:itemProperties:0:component:border:border_body:txt"));
// print(tester.getLastRenderedPage(), true, true);
// now trigger the validation, we cannot be without spatial data identifiers
tester.submitForm("form");
String error = new ParamResourceModel("UniqueResourceIdentifiersEditor.noSpatialDatasetIdentifiers", null).getString();
tester.assertErrorMessages(new String[] {error});
}
@Test
public void testAddIdentifiers() {
tester.executeAjaxEvent("form:panel:addIdentifier", "click");
// new empty line
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:3:itemProperties:0:component:border:border_body:txt", null);
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:3:itemProperties:1:component:border:border_body:txt", null);
// try to submit, should complain about invalid code
FormTester ft = tester.newFormTester("form");
ft.submit();
List<Serializable> messages = tester.getMessages(FeedbackMessage.ERROR);
assertEquals(1, messages.size());
String message = (String) ((ValidationErrorFeedback) messages.get(0)).getMessage();
assertTrue(message.contains("Code"));
// print(tester.getLastRenderedPage(), true, true);
// submit with just code, that is fine
ft = tester.newFormTester("form");
ft.setValue("panel:container:identifiers:listContainer:items:3:itemProperties:0:component:border:border_body:txt", "code");
ft.submit();
tester.assertNoErrorMessage();
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:3:itemProperties:0:component:border:border_body:txt", "code");
// now provide an invalid namespace (not a valid URI)
ft = tester.newFormTester("form");
ft.setValue("panel:container:identifiers:listContainer:items:3:itemProperties:1:component:border:border_body:txt", "invalid uri");
ft.submit();
messages = tester.getMessages(FeedbackMessage.ERROR);
assertEquals(1, messages.size());
// finally, set a valid namespace
ft = tester.newFormTester("form");
ft.setValue("panel:container:identifiers:listContainer:items:3:itemProperties:1:component:border:border_body:txt", "http://www.geoserver.org/meta");
ft.submit();
tester.assertNoErrorMessage();
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:3:itemProperties:1:component:border:border_body:txt", "http://www.geoserver.org/meta");
// now provide an invalid metadataURL (not a valid URI)
ft = tester.newFormTester("form");
ft.setValue("panel:container:identifiers:listContainer:items:3:itemProperties:2:component:border:border_body:txt", "invalid uri");
ft.submit();
messages = tester.getMessages(FeedbackMessage.ERROR);
assertEquals(1, messages.size());
// finally, set a valid metadataURL
ft = tester.newFormTester("form");
ft.setValue("panel:container:identifiers:listContainer:items:3:itemProperties:2:component:border:border_body:txt", "http://www.geoserver.org/meta");
ft.submit();
tester.assertNoErrorMessage();
tester.assertModelValue("form:panel:container:identifiers:listContainer:items:3:itemProperties:2:component:border:border_body:txt", "http://www.geoserver.org/meta");
}
}