Typwarnungen und Raw Types bereinigt
This commit is contained in:
@@ -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<String> 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(
|
||||
|
||||
@@ -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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> httpResponse = mockHttpResponse(200,
|
||||
"<html><body>Service unavailable</body></html>");
|
||||
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<String> 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<String> 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<String> 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<String> 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"));
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ class OpenAiHttpAdapterTest {
|
||||
// Arrange
|
||||
String responseBody = "{\"choices\":[{\"message\":{\"content\":\"test response\"}}]}";
|
||||
HttpResponse<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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");
|
||||
|
||||
Reference in New Issue
Block a user