From b4c1a0192729f6f7d5a84c0069ac3a1b9e6a9dc6 Mon Sep 17 00:00:00 2001 From: Francisco J Lopez-Pellicer Date: Thu, 8 Oct 2026 16:49:46 +0200 Subject: [PATCH] test(http): assert proxy body and case rejection A lowercase post with a stored body now fails if accept becomes case-insensitive. One XML test checks the stored body. The two header-only XML copies and both disabled JDBC filter methods are gone. --- .../http/HttpRequestDecoratorAddBodyTest.java | 78 +++---------------- .../ExecutionRequestExecutorServiceTest.java | 15 ---- .../ExecutionRequestExecutorServiceTest.java | 15 ---- 3 files changed, 12 insertions(+), 96 deletions(-) diff --git a/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestDecoratorAddBodyTest.java b/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestDecoratorAddBodyTest.java index 46efacd..4a725ba 100644 --- a/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestDecoratorAddBodyTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestDecoratorAddBodyTest.java @@ -1,6 +1,7 @@ package org.sitmun.proxy.middleware.protocols.http; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; import org.junit.jupiter.api.BeforeEach; @@ -27,63 +28,50 @@ void setUp() { @Test @DisplayName("Should accept when context is payload with POST method and non-null body") - void shouldAcceptWhenContextIsWmsPayloadDtoWithPostMethodAndNonNullBody() { - // Given + void shouldAcceptWhenContextIsHttpContextWithPostMethodAndNonNullBody() { when(httpContext.getMethod()).thenReturn("POST"); when(httpContext.getBody()).thenReturn("data"); - // When boolean result = decorator.accept(requestExecutor, httpContext); - // Then assertThat(result).isTrue(); } @Test @DisplayName("Should not accept when context is payload with GET method") - void shouldNotAcceptWhenContextIsWmsPayloadDtoWithGetMethod() { - // Given + void shouldNotAcceptWhenContextIsHttpContextWithGetMethod() { when(httpContext.getMethod()).thenReturn("GET"); - // When boolean result = decorator.accept(requestExecutor, httpContext); - // Then assertThat(result).isFalse(); } @Test @DisplayName("Should not accept when context is payload with POST method but null body") - void shouldNotAcceptWhenContextIsWmsPayloadDtoWithPostMethodButNullBody() { - // Given + void shouldNotAcceptWhenContextIsHttpContextWithPostMethodButNullBody() { when(httpContext.getMethod()).thenReturn("POST"); when(httpContext.getBody()).thenReturn(null); - // When boolean result = decorator.accept(requestExecutor, httpContext); - // Then assertThat(result).isFalse(); } @Test @DisplayName("Should accept when context is payload with POST method and empty body") - void shouldAcceptWhenContextIsWmsPayloadDtoWithPostMethodAndEmptyBody() { - // Given + void shouldAcceptWhenContextIsHttpContextWithPostMethodAndEmptyBody() { when(httpContext.getMethod()).thenReturn("POST"); when(httpContext.getBody()).thenReturn(""); - // When boolean result = decorator.accept(requestExecutor, httpContext); - // Then - assertThat(result).isTrue(); // Implementation only checks for != null, not empty + assertThat(result).isTrue(); } @Test @DisplayName("Should handle XML body with complex structure") void shouldHandleXmlBodyWithComplexStructure() { - // Given String body = """ @@ -109,62 +97,20 @@ void shouldHandleXmlBodyWithComplexStructure() { when(httpContext.getBody()).thenReturn(body); - // When decorator.addBehavior(requestExecutor, httpContext); - // Then assertThat(requestExecutor.getHeader("Content-Type")).isEqualTo("application/xml"); + assertThat(requestExecutor).extracting("body").isEqualTo(body); } @Test - @DisplayName("Should handle XML body with CDATA sections") - void shouldHandleXmlBodyWithCdataSections() { - // Given - String body = - "This is HTML content]]>"; - when(httpContext.getBody()).thenReturn(body); + @DisplayName("Should reject a lowercase post method") + void shouldRejectLowercasePostMethod() { + when(httpContext.getMethod()).thenReturn("post"); + lenient().when(httpContext.getBody()).thenReturn("data"); - // When - decorator.addBehavior(requestExecutor, httpContext); - - // Then - assertThat(requestExecutor.getHeader("Content-Type")).isEqualTo("application/xml"); - } - - @Test - @DisplayName("Should handle XML body with namespaces") - void shouldHandleXmlBodyWithNamespaces() { - // Given - String body = - """ - - test-layer - - - status - active - - - """; - when(httpContext.getBody()).thenReturn(body); - - // When - decorator.addBehavior(requestExecutor, httpContext); - - // Then - assertThat(requestExecutor.getHeader("Content-Type")).isEqualTo("application/xml"); - } - - @Test - @DisplayName("Should handle case-insensitive method comparison") - void shouldHandleCaseInsensitiveMethodComparison() { - // Given - when(httpContext.getMethod()).thenReturn("post"); // lowercase - - // When boolean result = decorator.accept(requestExecutor, httpContext); - // Then - assertThat(result).isFalse(); // Should be false because it's case-sensitive + assertThat(result).isFalse(); } } diff --git a/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java b/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java index f653dd2..1e153dd 100644 --- a/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java @@ -41,19 +41,4 @@ void jdbcAccess() { Object body = response.getBody(); assertThat(body).isNotNull().asInstanceOf(InstanceOfAssertFactories.LIST).hasSize(35); } - - /** Public user access to a relational service filtered. */ - @Test - @DisplayName("Request to a JDBC service with filters") - @Disabled( - "Redundant test: the test is identical to jdbcAccess because the SQL query is built on the Configuration and Authorization API") - void jdbcAccessWithFilters() { - ResponseEntity response = - requestExecutorService.executeRequest("", inMemoryH2Database(false)); - assertThat(response.getStatusCode().value()).isEqualTo(200); - assertThat(Objects.requireNonNull(response.getHeaders().get("Content-Type")).get(0)) - .isEqualTo("application/json"); - Object body = response.getBody(); - assertThat(body).isNotNull().asInstanceOf(InstanceOfAssertFactories.LIST).hasSize(35); - } } diff --git a/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java b/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java index 043bdd0..ffa3827 100644 --- a/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java @@ -128,19 +128,4 @@ void jdbcAccess() { Object body = response.getBody(); assertThat(body).isNotNull().asInstanceOf(InstanceOfAssertFactories.LIST).hasSize(35); } - - /** Public user access to a relational service filtered. */ - @Test - @DisplayName("Request to a JDBC service with filters") - @Disabled( - "Redundant test: the test is identical to jdbcAccess because the SQL query is built on the Configuration and Authorization API") - void jdbcAccessWithFilters() { - ResponseEntity response = - requestExecutorService.executeRequest("", inMemoryH2Database(false)); - assertThat(response.getStatusCode().value()).isEqualTo(200); - assertThat(Objects.requireNonNull(response.getHeaders().get("Content-Type")).get(0)) - .isEqualTo("application/json"); - Object body = response.getBody(); - assertThat(body).isNotNull().asInstanceOf(InstanceOfAssertFactories.LIST).hasSize(35); - } }