diff --git a/deegree-ogcapi-features/pom.xml b/deegree-ogcapi-features/pom.xml index e6cb19b1..e3acbac5 100644 --- a/deegree-ogcapi-features/pom.xml +++ b/deegree-ogcapi-features/pom.xml @@ -284,6 +284,11 @@ joda-time test + + com.github.stefanbirkner + system-rules + test + diff --git a/deegree-ogcapi-features/src/test/java/org/deegree/services/oaf/resource/OpenApiTest.java b/deegree-ogcapi-features/src/test/java/org/deegree/services/oaf/resource/OpenApiTest.java index 6c97b4d6..a7ae695d 100644 --- a/deegree-ogcapi-features/src/test/java/org/deegree/services/oaf/resource/OpenApiTest.java +++ b/deegree-ogcapi-features/src/test/java/org/deegree/services/oaf/resource/OpenApiTest.java @@ -22,7 +22,9 @@ package org.deegree.services.oaf.resource; import org.apache.commons.io.IOUtils; +import org.deegree.commons.utils.TunableParameter; import org.deegree.services.oaf.OgcApiFeaturesMediaType; +import org.deegree.services.oaf.filter.ApiVersionPathFilter; import org.deegree.services.oaf.openapi.OpenApiCreator; import org.deegree.services.oaf.workspace.DeegreeWorkspaceInitializer; import org.glassfish.hk2.utilities.binding.AbstractBinder; @@ -49,8 +51,10 @@ import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasJsonPath; import static com.jayway.jsonpath.matchers.JsonPathMatchers.isJson; import static org.deegree.services.oaf.TestData.mockWorkspaceInitializer; +import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -74,6 +78,8 @@ public static void copyToTmpFolder() @Override protected Application configure() { + TunableParameter.resetCache(); + enable(TestProperties.LOG_TRAFFIC); ServletContext servletContext = mock(ServletContext.class); when(servletContext.getContextPath()).thenReturn(""); @@ -82,6 +88,7 @@ protected Application configure() { when(servletConfig.getServletContext()).thenReturn(servletContext); ResourceConfig resourceConfig = new ResourceConfig(); resourceConfig.packages("org.deegree.services.oaf.resource"); + resourceConfig.register(ApiVersionPathFilter.class); resourceConfig.register(new AbstractBinder() { @Override protected void configure() { @@ -133,5 +140,17 @@ public void test_OpenApiContent() { assertThat(json, hasJsonPath("$.paths./collections/strassenbaumkataster/items/{featureId}")); assertThat(json, hasJsonPath("$.paths./api")); } + + /** + * Test that the version segment is not contained in server URL. + */ + @Test + public void test_OpenApi_serverUrl() { + String json = target("/datasets/oaf/api").request(OgcApiFeaturesMediaType.APPLICATION_OPENAPI).get( + String.class); + + assertThat(json, isJson()); + assertThat(json, hasJsonPath("$.servers[0].url", not(endsWith("/v1")))); + } } diff --git a/deegree-ogcapi-features/src/test/java/org/deegree/services/oaf/resource/OpenApiVersionSegmentTest.java b/deegree-ogcapi-features/src/test/java/org/deegree/services/oaf/resource/OpenApiVersionSegmentTest.java new file mode 100644 index 00000000..25ef3ed7 --- /dev/null +++ b/deegree-ogcapi-features/src/test/java/org/deegree/services/oaf/resource/OpenApiVersionSegmentTest.java @@ -0,0 +1,66 @@ +/*- + * #%L + * deegree-ogcapi-features - OGC API Features (OAF) implementation - Querying and modifying of geospatial data objects + * %% + * Copyright (C) 2019 - 2020 lat/lon GmbH, info@lat-lon.de, www.lat-lon.de + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ +package org.deegree.services.oaf.resource; + +import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasJsonPath; +import static com.jayway.jsonpath.matchers.JsonPathMatchers.isJson; +import static org.hamcrest.CoreMatchers.endsWith; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.deegree.services.oaf.OgcApiFeaturesMediaType; +import org.deegree.services.oaf.filter.ApiVersionPathFilter; +import org.junit.Rule; +import org.junit.Test; +import org.junit.contrib.java.lang.system.ProvideSystemProperty; + +/** + * Test OpenAPI resource with optional version segment enabled for path. + */ +public class OpenApiVersionSegmentTest extends OpenApiTest { + + @Rule + public final ProvideSystemProperty providesSystemPropertyRule = new ProvideSystemProperty(ApiVersionPathFilter.PARAMETER_ENABLE_VERSION_SEGMENT, "true"); + + /** + * Test if API definition is also available on path with version segment. + */ + @Test + public void test_OpenApiDeclarationShouldBeAvailableWithVersionSegment() { + int status = target("/datasets/oaf/v1/api").request( + OgcApiFeaturesMediaType.APPLICATION_OPENAPI).get().getStatus(); + assertThat(status, is(200)); + } + + /** + * Test that version segment is contained in server URL. + */ + @Test + public void test_OpenApi_serverUrl() { + String json = target("/datasets/oaf/api").request(OgcApiFeaturesMediaType.APPLICATION_OPENAPI).get( + String.class); + + assertThat(json, isJson()); + assertThat(json, hasJsonPath("$.servers[0].url", endsWith("/v1"))); + } + +} diff --git a/pom.xml b/pom.xml index 317eb3ea..9f6e61d6 100644 --- a/pom.xml +++ b/pom.xml @@ -844,6 +844,12 @@ ${jersey-version} test + + com.github.stefanbirkner + system-rules + 1.19.0 + test + io.swagger.parser.v3 swagger-parser-v3