Add tests for APIVersionFilter [AI assisted]
Change-Id: I0bc646db64d8fccca2f6b7a3baa2c95a71d2f173
diff --git a/Changes b/Changes
index 29893dc..c0a55ff 100644
--- a/Changes
+++ b/Changes
@@ -7,6 +7,7 @@
- Add tests for large context group config [AI-assisted]
- Make rate-limit optional and enabled by default [AI-assisted]
- Improve APIVersionFilter to avoid IndexOutOfBoundsException on empty path segments [AI assisted]
+- Add tests for APIVersionFilter [AI assisted]
# version 1.2-SNAPSHOT
diff --git a/src/test/java/de/ids_mannheim/korap/web/filter/APIVersionFilterTest.java b/src/test/java/de/ids_mannheim/korap/web/filter/APIVersionFilterTest.java
new file mode 100644
index 0000000..103b352
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/web/filter/APIVersionFilterTest.java
@@ -0,0 +1,90 @@
+package de.ids_mannheim.korap.web.filter;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.lang.reflect.Proxy;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import de.ids_mannheim.korap.config.KustvaktConfiguration;
+import jakarta.ws.rs.NotFoundException;
+import jakarta.ws.rs.container.ContainerRequestContext;
+import jakarta.ws.rs.core.PathSegment;
+import jakarta.ws.rs.core.UriInfo;
+
+public class APIVersionFilterTest {
+
+ @Test
+ public void testEmptyPathSegmentsThrowNotFound () {
+ APIVersionFilter filter = createFilter(Set.of("v1.0", "v2.0"));
+ ContainerRequestContext request = createRequest(Collections.emptyList());
+
+ assertThrows(NotFoundException.class, () -> filter.filter(request));
+ }
+
+ @Test
+ public void testUnsupportedVersionThrowNotFound () {
+ APIVersionFilter filter = createFilter(Set.of("v1.0", "v2.0"));
+ ContainerRequestContext request = createRequest(List.of(segment("v9.9")));
+
+ assertThrows(NotFoundException.class, () -> filter.filter(request));
+ }
+
+ @Test
+ public void testSupportedVersionPasses () {
+ APIVersionFilter filter = createFilter(Set.of("v1.0", "v2.0"));
+ ContainerRequestContext request = createRequest(List.of(segment("v1.0")));
+
+ assertDoesNotThrow(() -> filter.filter(request));
+ }
+
+ private APIVersionFilter createFilter (Set<String> supportedVersions) {
+ APIVersionFilter filter = new APIVersionFilter();
+ KustvaktConfiguration filterConfig = new KustvaktConfiguration();
+ filterConfig.setSupportedVersions(supportedVersions);
+ ReflectionTestUtils.setField(filter, "config", filterConfig);
+ return filter;
+ }
+
+ private ContainerRequestContext createRequest (List<PathSegment> pathSegments) {
+ UriInfo uriInfo = (UriInfo) Proxy.newProxyInstance(getClass().getClassLoader(),
+ new Class[] { UriInfo.class },
+ (proxy, method, args) -> {
+ if ("getPathSegments".equals(method.getName())) {
+ return pathSegments;
+ }
+ throw new UnsupportedOperationException(
+ "Unexpected UriInfo method: " + method.getName());
+ });
+
+ return (ContainerRequestContext) Proxy.newProxyInstance(
+ getClass().getClassLoader(),
+ new Class[] { ContainerRequestContext.class },
+ (proxy, method, args) -> {
+ if ("getUriInfo".equals(method.getName())) {
+ return uriInfo;
+ }
+ throw new UnsupportedOperationException(
+ "Unexpected request method: " + method.getName());
+ });
+ }
+
+ private PathSegment segment (String path) {
+ return new PathSegment() {
+ @Override
+ public String getPath () {
+ return path;
+ }
+
+ @Override
+ public jakarta.ws.rs.core.MultivaluedMap<String, String> getMatrixParameters () {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+}