/* (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 junit.framework.AssertionFailedError; import org.apache.wicket.Component; import org.apache.wicket.feedback.FeedbackMessage; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.form.ValidationErrorFeedback; import org.apache.wicket.model.Model; import org.apache.wicket.util.tester.FormTester; import org.geoserver.catalog.MetadataMap; import org.geoserver.config.ServiceInfo; import static org.geoserver.inspire.InspireMetadata.CREATE_EXTENDED_CAPABILITIES; import static org.geoserver.inspire.InspireMetadata.LANGUAGE; import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_TYPE; import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_URL; import static org.geoserver.inspire.InspireMetadata.SPATIAL_DATASET_IDENTIFIER_TYPE; import static org.geoserver.inspire.InspireTestSupport.clearInspireMetadata; import org.geoserver.inspire.UniqueResourceIdentifiers; import org.geoserver.web.ComponentBuilder; import org.geoserver.web.FormTestPage; import org.geoserver.web.GeoServerWicketTestSupport; import static org.geoserver.web.GeoServerWicketTestSupport.tester; import org.geoserver.wcs.WCSInfo; import org.geoserver.wfs.WFSInfo; import org.geoserver.wms.WMSInfo; import org.geotools.util.Converters; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.Test; public class InspirePanelTest extends GeoServerWicketTestSupport { private void startPage(final ServiceInfo serviceInfo) { tester.startPage(new FormTestPage(new ComponentBuilder() { @Override public Component buildComponent(String id) { return new InspireAdminPanel(id, new Model(serviceInfo)); } })); } @Test public void testNoInspireSettingsWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities off tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", false); try { tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); fail("Shouldn't have found section for INSPIRE extension configuration"); } catch (AssertionError e) { } } @Test public void testCreateExtCapsOffWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, false); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities off tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", false); tester.assertInvisible("form:panel:container:configs"); } @Test public void testCreateExtCapsOffWFS() { final ServiceInfo serviceInfo = getGeoServer().getService(WFSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, false); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities off tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", false); tester.assertInvisible("form:panel:container:configs"); } @Test public void testCreateExtCapsOffWCS() { final ServiceInfo serviceInfo = getGeoServer().getService(WCSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, false); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities off tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", false); tester.assertInvisible("form:panel:container:configs"); } @Test public void testWithFullSettingsWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, true); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities on tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", true); // check language tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); tester.assertModelValue("form:panel:container:configs:language", "fre"); print( tester.getLastRenderedPage(), true, true ); // check metadata url tester.assertComponent("form:panel:container:configs:border:border_body:metadataURL", TextField.class); tester.assertModelValue("form:panel:container:configs:border:border_body:metadataURL", "http://foo.com?bar=baz"); // check metadata url type tester.assertComponent("form:panel:container:configs:metadataURLType", DropDownChoice.class); tester.assertModelValue("form:panel:container:configs:metadataURLType", "application/vnd.iso.19139+xml"); try { // the spatial identifiers editor tester.assertComponent("form:panel:container:configs:datasetIdentifiersContainer:spatialDatasetIdentifiers", UniqueResourceIdentifiersEditor.class); fail("Shouldn't have found a Spatial Dataset Identifers section"); } catch (AssertionError e) { } } @Test public void testWithFullSettingsWFS() { final ServiceInfo serviceInfo = getGeoServer().getService(WFSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, true); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one;two,http://www.geoserver.org/two,http://metadata.geoserver.org/id?two"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities on tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", true); // check language tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); tester.assertModelValue("form:panel:container:configs:language", "fre"); // check metadata url tester.assertComponent("form:panel:container:configs:border:border_body:metadataURL", TextField.class); tester.assertModelValue("form:panel:container:configs:border:border_body:metadataURL", "http://foo.com?bar=baz"); // check metadata url type tester.assertComponent("form:panel:container:configs:metadataURLType", DropDownChoice.class); tester.assertModelValue("form:panel:container:configs:metadataURLType", "application/vnd.iso.19139+xml"); // the spatial identifiers editor tester.assertComponent("form:panel:container:configs:datasetIdentifiersContainer:spatialDatasetIdentifiers", UniqueResourceIdentifiersEditor.class); UniqueResourceIdentifiers expected = Converters.convert("one,http://www.geoserver.org/one;two,http://www.geoserver.org/two,http://metadata.geoserver.org/id?two", UniqueResourceIdentifiers.class); tester.assertModelValue("form:panel:container:configs:datasetIdentifiersContainer:spatialDatasetIdentifiers", expected); } @Test public void testWithFullSettingsWCS() { final ServiceInfo serviceInfo = getGeoServer().getService(WCSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, true); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one;two,http://www.geoserver.org/two,http://metadata.geoserver.org/id?two"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities on tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", true); // check language tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); tester.assertModelValue("form:panel:container:configs:language", "fre"); // check metadata url tester.assertComponent("form:panel:container:configs:border:border_body:metadataURL", TextField.class); tester.assertModelValue("form:panel:container:configs:border:border_body:metadataURL", "http://foo.com?bar=baz"); // check metadata url type tester.assertComponent("form:panel:container:configs:metadataURLType", DropDownChoice.class); tester.assertModelValue("form:panel:container:configs:metadataURLType", "application/vnd.iso.19139+xml"); // the spatial identifiers editor tester.assertComponent("form:panel:container:configs:datasetIdentifiersContainer:spatialDatasetIdentifiers", UniqueResourceIdentifiersEditor.class); UniqueResourceIdentifiers expected = Converters.convert("one,http://www.geoserver.org/one;two,http://www.geoserver.org/two,http://metadata.geoserver.org/id?two", UniqueResourceIdentifiers.class); tester.assertModelValue("form:panel:container:configs:datasetIdentifiersContainer:spatialDatasetIdentifiers", expected); } @Test public void testNoLanguageWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, true); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); getGeoServer().save(serviceInfo); startPage(serviceInfo); // check language defaults to "eng" tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); tester.assertModelValue("form:panel:container:configs:language", "eng"); } @Test public void testNoMediaTypeWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, true); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); // check no metadata url type selected tester.assertComponent("form:panel:container:configs:metadataURLType", DropDownChoice.class); tester.assertModelValue("form:panel:container:configs:metadataURLType", null); } @Test public void testCreateExtCapMissingWithRequiredSettingsWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities on tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", true); // Just check there is some configuration won't repeat all checks as for when check box explcitly set. tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); tester.assertModelValue("form:panel:container:configs:language", "fre"); } @Test public void testCreateExtCapMissingWithoutRequiredSettingsWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities off tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", false); tester.assertInvisible("form:panel:container:configs"); } @Test public void testCreateExtCapMissingWithRequiredSettingsWFS() { final ServiceInfo serviceInfo = getGeoServer().getService(WFSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities on tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", true); // Just check there is some configuration won't repeat all checks as for when check box explcitly set. tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); tester.assertModelValue("form:panel:container:configs:language", "fre"); } @Test public void testCreateExtCapMissingWithoutRequiredSettingsWFS() { final ServiceInfo serviceInfo = getGeoServer().getService(WFSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities off tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", false); tester.assertInvisible("form:panel:container:configs"); } @Test public void testCreateExtCapMissingWithRequiredSettingsWCS() { final ServiceInfo serviceInfo = getGeoServer().getService(WCSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities on tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", true); // Just check there is some configuration won't repeat all checks as for when check box explcitly set. tester.assertComponent("form:panel:container:configs:language", LanguageDropDownChoice.class); tester.assertModelValue("form:panel:container:configs:language", "fre"); } @Test public void testCreateExtCapMissingWithoutRequiredSettingsWCS() { final ServiceInfo serviceInfo = getGeoServer().getService(WCSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); tester.assertComponent("form", Form.class); // check ExtendedCapabilities off tester.assertComponent("form:panel:createExtendedCapabilities", CheckBox.class); tester.assertModelValue("form:panel:createExtendedCapabilities", false); tester.assertInvisible("form:panel:container:configs"); } @Test public void testEditBasicWFS() { final ServiceInfo serviceInfo = getGeoServer().getService(WFSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, true); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one;two,http://www.geoserver.org/two,http://metadata.geoserver.org/id?two"); getGeoServer().save(serviceInfo); startPage(serviceInfo); FormTester ft = tester.newFormTester("form"); ft.select("panel:container:configs:language", 0); ft.setValue("panel:container:configs:border:border_body:metadataURL", "http://www.geoserver.org/test"); ft.select("panel:container:configs:metadataURLType", 0); ft.submit(); tester.assertModelValue("form:panel:container:configs:language", "bul"); tester.assertModelValue("form:panel:container:configs:border:border_body:metadataURL", "http://www.geoserver.org/test"); tester.assertModelValue("form:panel:container:configs:metadataURLType", "application/vnd.ogc.csw.GetRecordByIdResponse_xml"); } @Test public void testEditBasicWCS() { final ServiceInfo serviceInfo = getGeoServer().getService(WCSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(CREATE_EXTENDED_CAPABILITIES.key, true); metadata.put(SERVICE_METADATA_URL.key, "http://foo.com?bar=baz"); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); metadata.put(SPATIAL_DATASET_IDENTIFIER_TYPE.key, "one,http://www.geoserver.org/one;two,http://www.geoserver.org/two,http://metadata.geoserver.org/id?two"); getGeoServer().save(serviceInfo); startPage(serviceInfo); FormTester ft = tester.newFormTester("form"); ft.select("panel:container:configs:language", 0); ft.setValue("panel:container:configs:border:border_body:metadataURL", "http://www.geoserver.org/test"); ft.select("panel:container:configs:metadataURLType", 0); ft.submit(); tester.assertModelValue("form:panel:container:configs:language", "bul"); tester.assertModelValue("form:panel:container:configs:border:border_body:metadataURL", "http://www.geoserver.org/test"); tester.assertModelValue("form:panel:container:configs:metadataURLType", "application/vnd.ogc.csw.GetRecordByIdResponse_xml"); } @Test public void testSubmitWithoutRequiredWMS() { final ServiceInfo serviceInfo = getGeoServer().getService(WMSInfo.class); final MetadataMap metadata = serviceInfo.getMetadata(); clearInspireMetadata(metadata); metadata.put(SERVICE_METADATA_TYPE.key, "application/vnd.iso.19139+xml"); metadata.put(LANGUAGE.key, "fre"); getGeoServer().save(serviceInfo); startPage(serviceInfo); FormTester ft = tester.newFormTester("form"); ft.setValue("panel:createExtendedCapabilities", true); tester.executeAjaxEvent("form:panel:createExtendedCapabilities", "change"); tester.submitForm("form"); List<Serializable> messages = tester.getMessages(FeedbackMessage.ERROR); assertEquals(1, messages.size()); String message = (String) ((ValidationErrorFeedback) messages.get(0)).getMessage(); assertTrue(message.contains("Service Metadata URL")); } }