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