From 4a21b23312e539d16385d21675ba1a65f7d59888 Mon Sep 17 00:00:00 2001 From: Marcus van Elst Date: Thu, 9 Apr 2026 08:03:28 +0200 Subject: [PATCH] Typwarnungen und Raw Types bereinigt --- ...AnthropicClaudeAdapterIntegrationTest.java | 5 ++- .../ai/AnthropicClaudeHttpAdapterTest.java | 31 ++++++++++--------- .../adapter/out/ai/OpenAiHttpAdapterTest.java | 26 +++++++--------- 3 files changed, 30 insertions(+), 32 deletions(-) diff --git a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeAdapterIntegrationTest.java b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeAdapterIntegrationTest.java index d9695d8..d122881 100644 --- a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeAdapterIntegrationTest.java +++ b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeAdapterIntegrationTest.java @@ -2,6 +2,7 @@ package de.gecheckt.pdf.umbenenner.adapter.out.ai; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -75,7 +76,6 @@ class AnthropicClaudeAdapterIntegrationTest { */ @Test @DisplayName("claudeProviderIdentifierLandsInAttemptHistory: ai_provider=claude in attempt history after successful run") - @SuppressWarnings("unchecked") void claudeProviderIdentifierLandsInAttemptHistory(@TempDir Path tempDir) throws Exception { // --- Infrastructure setup --- Path sourceFolder = Files.createDirectories(tempDir.resolve("source")); @@ -118,8 +118,7 @@ class AnthropicClaudeAdapterIntegrationTest { HttpResponse mockHttpResponse = mock(HttpResponse.class); when(mockHttpResponse.statusCode()).thenReturn(200); when(mockHttpResponse.body()).thenReturn(anthropicResponseBody); - when(mockHttpClient.send(any(HttpRequest.class), any())) - .thenReturn((HttpResponse) mockHttpResponse); + doReturn(mockHttpResponse).when(mockHttpClient).send(any(HttpRequest.class), any()); // --- Create the Claude adapter with the mocked HTTP client --- ProviderConfiguration claudeConfig = new ProviderConfiguration( diff --git a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeHttpAdapterTest.java b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeHttpAdapterTest.java index 308638b..88ea982 100644 --- a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeHttpAdapterTest.java +++ b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/AnthropicClaudeHttpAdapterTest.java @@ -3,6 +3,7 @@ package de.gecheckt.pdf.umbenenner.adapter.out.ai; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -93,7 +94,7 @@ class AnthropicClaudeHttpAdapterTest { void claudeAdapterBuildsCorrectRequest() throws Exception { HttpResponse httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse( "{\"date\":\"2024-01-15\",\"title\":\"Testititel\",\"reasoning\":\"Test\"}")); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("System-Prompt", "Dokumenttext"); adapter.invoke(request); @@ -165,7 +166,7 @@ class AnthropicClaudeHttpAdapterTest { HttpResponse httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}")); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); adapterWithEnvKey.invoke(createTestRequest("prompt", "doc")); @@ -195,7 +196,7 @@ class AnthropicClaudeHttpAdapterTest { HttpResponse httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}")); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); adapterWithPropertiesKey.invoke(createTestRequest("prompt", "doc")); @@ -249,7 +250,7 @@ class AnthropicClaudeHttpAdapterTest { String blockText = "{\"date\":\"2024-01-15\",\"title\":\"Rechnung\",\"reasoning\":\"Test\"}"; String responseBody = buildAnthropicSuccessResponse(blockText); HttpResponse httpResponse = mockHttpResponse(200, responseBody); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -288,7 +289,7 @@ class AnthropicClaudeHttpAdapterTest { responseJson.put("stop_reason", "end_turn"); HttpResponse httpResponse = mockHttpResponse(200, responseJson.toString()); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -334,7 +335,7 @@ class AnthropicClaudeHttpAdapterTest { responseJson.put("stop_reason", "end_turn"); HttpResponse httpResponse = mockHttpResponse(200, responseJson.toString()); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -366,7 +367,7 @@ class AnthropicClaudeHttpAdapterTest { + "}"; HttpResponse httpResponse = mockHttpResponse(200, noTextBlockResponse); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -386,7 +387,7 @@ class AnthropicClaudeHttpAdapterTest { @DisplayName("claudeAdapterMapsHttp401AsTechnical: HTTP 401 yields technical failure") void claudeAdapterMapsHttp401AsTechnical() throws Exception { HttpResponse httpResponse = mockHttpResponse(401, null); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -405,7 +406,7 @@ class AnthropicClaudeHttpAdapterTest { @DisplayName("claudeAdapterMapsHttp429AsTechnical: HTTP 429 yields technical failure") void claudeAdapterMapsHttp429AsTechnical() throws Exception { HttpResponse httpResponse = mockHttpResponse(429, null); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -424,7 +425,7 @@ class AnthropicClaudeHttpAdapterTest { @DisplayName("claudeAdapterMapsHttp500AsTechnical: HTTP 500 yields technical failure") void claudeAdapterMapsHttp500AsTechnical() throws Exception { HttpResponse httpResponse = mockHttpResponse(500, null); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -465,7 +466,7 @@ class AnthropicClaudeHttpAdapterTest { void claudeAdapterMapsUnparseableJsonAsTechnical() throws Exception { HttpResponse httpResponse = mockHttpResponse(200, "Service unavailable"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc")); @@ -482,7 +483,7 @@ class AnthropicClaudeHttpAdapterTest { void testConfiguredModelIsUsedInRequestBody() throws Exception { HttpResponse httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}")); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); adapter.invoke(createTestRequest("prompt", "doc")); @@ -495,7 +496,7 @@ class AnthropicClaudeHttpAdapterTest { void testConfiguredTimeoutIsUsedInRequest() throws Exception { HttpResponse httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}")); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); adapter.invoke(createTestRequest("prompt", "doc")); @@ -512,7 +513,7 @@ class AnthropicClaudeHttpAdapterTest { void testPromptContentGoesToSystemFieldDocumentTextToUserMessage() throws Exception { HttpResponse httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}")); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); String promptContent = "Du bist ein Assistent zur Dokumentenbenennung."; String documentText = "Rechnungstext des Dokuments."; @@ -590,7 +591,7 @@ class AnthropicClaudeHttpAdapterTest { HttpResponse httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}")); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); adapterWithDefault.invoke(createTestRequest("p", "d")); diff --git a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/OpenAiHttpAdapterTest.java b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/OpenAiHttpAdapterTest.java index 47f5b1c..9ec71b2 100644 --- a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/OpenAiHttpAdapterTest.java +++ b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/ai/OpenAiHttpAdapterTest.java @@ -86,7 +86,7 @@ class OpenAiHttpAdapterTest { // Arrange String responseBody = "{\"choices\":[{\"message\":{\"content\":\"test response\"}}]}"; HttpResponse httpResponse = mockHttpResponse(200, responseBody); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); @@ -105,7 +105,7 @@ class OpenAiHttpAdapterTest { void testNon200HttpStatusReturnsTechnicalFailure() throws Exception { // Arrange HttpResponse httpResponse = mockHttpResponse(500, null); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); @@ -214,7 +214,7 @@ class OpenAiHttpAdapterTest { void testConfiguredTimeoutIsUsedInRequest() throws Exception { // Arrange HttpResponse httpResponse = mockHttpResponse(200, "{}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); @@ -238,7 +238,7 @@ class OpenAiHttpAdapterTest { void testConfiguredBaseUrlIsUsedInEndpoint() throws Exception { // Arrange HttpResponse httpResponse = mockHttpResponse(200, "{}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); @@ -261,7 +261,7 @@ class OpenAiHttpAdapterTest { // Arrange AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); HttpResponse httpResponse = mockHttpResponse(200, "{}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); // Act - invoke to trigger actual request building adapter.invoke(request); @@ -287,7 +287,7 @@ class OpenAiHttpAdapterTest { void testEffectiveApiKeyIsUsedInAuthorizationHeader() throws Exception { // Arrange HttpResponse httpResponse = mockHttpResponse(200, "{}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); @@ -324,7 +324,7 @@ class OpenAiHttpAdapterTest { ); HttpResponse httpResponse = mockHttpResponse(200, "{}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); // Act - invoke to trigger actual request building adapter.invoke(request); @@ -362,7 +362,7 @@ class OpenAiHttpAdapterTest { void testSuccessPreservesRequest() throws Exception { // Arrange HttpResponse httpResponse = mockHttpResponse(200, "{\"result\":\"ok\"}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); @@ -459,7 +459,7 @@ class OpenAiHttpAdapterTest { httpClient); HttpResponse httpResponse = mockHttpResponse(200, "{}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("Test prompt", "Test document"); @@ -487,7 +487,7 @@ class OpenAiHttpAdapterTest { OpenAiHttpAdapter nsAdapter = new OpenAiHttpAdapter(nsConfig, httpClient); HttpResponse httpResponse = mockHttpResponse(200, "{}"); - when(httpClient.send(any(HttpRequest.class), any())).thenReturn((HttpResponse) httpResponse); + doReturn(httpResponse).when(httpClient).send(any(HttpRequest.class), any()); AiRequestRepresentation request = createTestRequest("prompt", "document"); nsAdapter.invoke(request); @@ -531,8 +531,7 @@ class OpenAiHttpAdapterTest { // Success case: HTTP 200 must produce AiInvocationSuccess with raw body String successBody = "{\"choices\":[{\"message\":{\"content\":\"result\"}}]}"; HttpResponse successResponse = mockHttpResponse(200, successBody); - when(httpClient.send(any(HttpRequest.class), any())) - .thenReturn((HttpResponse) successResponse); + doReturn(successResponse).when(httpClient).send(any(HttpRequest.class), any()); AiInvocationResult result = adapter.invoke(createTestRequest("p", "d")); assertThat(result).isInstanceOf(AiInvocationSuccess.class); @@ -540,8 +539,7 @@ class OpenAiHttpAdapterTest { // Non-200 case: HTTP 429 must produce AiInvocationTechnicalFailure with HTTP_429 reason HttpResponse rateLimitedResponse = mockHttpResponse(429, null); - when(httpClient.send(any(HttpRequest.class), any())) - .thenReturn((HttpResponse) rateLimitedResponse); + doReturn(rateLimitedResponse).when(httpClient).send(any(HttpRequest.class), any()); result = adapter.invoke(createTestRequest("p", "d")); assertThat(result).isInstanceOf(AiInvocationTechnicalFailure.class); assertThat(((AiInvocationTechnicalFailure) result).failureReason()).isEqualTo("HTTP_429");