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.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -75,7 +76,6 @@ class AnthropicClaudeAdapterIntegrationTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("claudeProviderIdentifierLandsInAttemptHistory: ai_provider=claude in attempt history after successful run")
|
@DisplayName("claudeProviderIdentifierLandsInAttemptHistory: ai_provider=claude in attempt history after successful run")
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
void claudeProviderIdentifierLandsInAttemptHistory(@TempDir Path tempDir) throws Exception {
|
void claudeProviderIdentifierLandsInAttemptHistory(@TempDir Path tempDir) throws Exception {
|
||||||
// --- Infrastructure setup ---
|
// --- Infrastructure setup ---
|
||||||
Path sourceFolder = Files.createDirectories(tempDir.resolve("source"));
|
Path sourceFolder = Files.createDirectories(tempDir.resolve("source"));
|
||||||
@@ -118,8 +118,7 @@ class AnthropicClaudeAdapterIntegrationTest {
|
|||||||
HttpResponse<String> mockHttpResponse = mock(HttpResponse.class);
|
HttpResponse<String> mockHttpResponse = mock(HttpResponse.class);
|
||||||
when(mockHttpResponse.statusCode()).thenReturn(200);
|
when(mockHttpResponse.statusCode()).thenReturn(200);
|
||||||
when(mockHttpResponse.body()).thenReturn(anthropicResponseBody);
|
when(mockHttpResponse.body()).thenReturn(anthropicResponseBody);
|
||||||
when(mockHttpClient.send(any(HttpRequest.class), any()))
|
doReturn(mockHttpResponse).when(mockHttpClient).send(any(HttpRequest.class), any());
|
||||||
.thenReturn((HttpResponse) mockHttpResponse);
|
|
||||||
|
|
||||||
// --- Create the Claude adapter with the mocked HTTP client ---
|
// --- Create the Claude adapter with the mocked HTTP client ---
|
||||||
ProviderConfiguration claudeConfig = new ProviderConfiguration(
|
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.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -93,7 +94,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
void claudeAdapterBuildsCorrectRequest() throws Exception {
|
void claudeAdapterBuildsCorrectRequest() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse(
|
HttpResponse<String> httpResponse = mockHttpResponse(200, buildAnthropicSuccessResponse(
|
||||||
"{\"date\":\"2024-01-15\",\"title\":\"Testititel\",\"reasoning\":\"Test\"}"));
|
"{\"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");
|
AiRequestRepresentation request = createTestRequest("System-Prompt", "Dokumenttext");
|
||||||
adapter.invoke(request);
|
adapter.invoke(request);
|
||||||
@@ -165,7 +166,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
||||||
buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}"));
|
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"));
|
adapterWithEnvKey.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -195,7 +196,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
||||||
buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}"));
|
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"));
|
adapterWithPropertiesKey.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -249,7 +250,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
String blockText = "{\"date\":\"2024-01-15\",\"title\":\"Rechnung\",\"reasoning\":\"Test\"}";
|
String blockText = "{\"date\":\"2024-01-15\",\"title\":\"Rechnung\",\"reasoning\":\"Test\"}";
|
||||||
String responseBody = buildAnthropicSuccessResponse(blockText);
|
String responseBody = buildAnthropicSuccessResponse(blockText);
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, responseBody);
|
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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -288,7 +289,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
responseJson.put("stop_reason", "end_turn");
|
responseJson.put("stop_reason", "end_turn");
|
||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, responseJson.toString());
|
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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -334,7 +335,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
responseJson.put("stop_reason", "end_turn");
|
responseJson.put("stop_reason", "end_turn");
|
||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, responseJson.toString());
|
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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -366,7 +367,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
+ "}";
|
+ "}";
|
||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, noTextBlockResponse);
|
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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -386,7 +387,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
@DisplayName("claudeAdapterMapsHttp401AsTechnical: HTTP 401 yields technical failure")
|
@DisplayName("claudeAdapterMapsHttp401AsTechnical: HTTP 401 yields technical failure")
|
||||||
void claudeAdapterMapsHttp401AsTechnical() throws Exception {
|
void claudeAdapterMapsHttp401AsTechnical() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(401, null);
|
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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -405,7 +406,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
@DisplayName("claudeAdapterMapsHttp429AsTechnical: HTTP 429 yields technical failure")
|
@DisplayName("claudeAdapterMapsHttp429AsTechnical: HTTP 429 yields technical failure")
|
||||||
void claudeAdapterMapsHttp429AsTechnical() throws Exception {
|
void claudeAdapterMapsHttp429AsTechnical() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(429, null);
|
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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -424,7 +425,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
@DisplayName("claudeAdapterMapsHttp500AsTechnical: HTTP 500 yields technical failure")
|
@DisplayName("claudeAdapterMapsHttp500AsTechnical: HTTP 500 yields technical failure")
|
||||||
void claudeAdapterMapsHttp500AsTechnical() throws Exception {
|
void claudeAdapterMapsHttp500AsTechnical() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(500, null);
|
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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -465,7 +466,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
void claudeAdapterMapsUnparseableJsonAsTechnical() throws Exception {
|
void claudeAdapterMapsUnparseableJsonAsTechnical() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
||||||
"<html><body>Service unavailable</body></html>");
|
"<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"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -482,7 +483,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
void testConfiguredModelIsUsedInRequestBody() throws Exception {
|
void testConfiguredModelIsUsedInRequestBody() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
||||||
buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}"));
|
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"));
|
adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -495,7 +496,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
void testConfiguredTimeoutIsUsedInRequest() throws Exception {
|
void testConfiguredTimeoutIsUsedInRequest() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
||||||
buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}"));
|
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"));
|
adapter.invoke(createTestRequest("prompt", "doc"));
|
||||||
|
|
||||||
@@ -512,7 +513,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
void testPromptContentGoesToSystemFieldDocumentTextToUserMessage() throws Exception {
|
void testPromptContentGoesToSystemFieldDocumentTextToUserMessage() throws Exception {
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
||||||
buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}"));
|
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 promptContent = "Du bist ein Assistent zur Dokumentenbenennung.";
|
||||||
String documentText = "Rechnungstext des Dokuments.";
|
String documentText = "Rechnungstext des Dokuments.";
|
||||||
@@ -590,7 +591,7 @@ class AnthropicClaudeHttpAdapterTest {
|
|||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
HttpResponse<String> httpResponse = mockHttpResponse(200,
|
||||||
buildAnthropicSuccessResponse("{\"title\":\"T\",\"reasoning\":\"R\"}"));
|
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"));
|
adapterWithDefault.invoke(createTestRequest("p", "d"));
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
// Arrange
|
// Arrange
|
||||||
String responseBody = "{\"choices\":[{\"message\":{\"content\":\"test response\"}}]}";
|
String responseBody = "{\"choices\":[{\"message\":{\"content\":\"test response\"}}]}";
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, responseBody);
|
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");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
void testNon200HttpStatusReturnsTechnicalFailure() throws Exception {
|
void testNon200HttpStatusReturnsTechnicalFailure() throws Exception {
|
||||||
// Arrange
|
// Arrange
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(500, null);
|
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");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
void testConfiguredTimeoutIsUsedInRequest() throws Exception {
|
void testConfiguredTimeoutIsUsedInRequest() throws Exception {
|
||||||
// Arrange
|
// Arrange
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{}");
|
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");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
|
|
||||||
@@ -238,7 +238,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
void testConfiguredBaseUrlIsUsedInEndpoint() throws Exception {
|
void testConfiguredBaseUrlIsUsedInEndpoint() throws Exception {
|
||||||
// Arrange
|
// Arrange
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{}");
|
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");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
|
|
||||||
@@ -261,7 +261,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
// Arrange
|
// Arrange
|
||||||
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{}");
|
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
|
// Act - invoke to trigger actual request building
|
||||||
adapter.invoke(request);
|
adapter.invoke(request);
|
||||||
@@ -287,7 +287,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
void testEffectiveApiKeyIsUsedInAuthorizationHeader() throws Exception {
|
void testEffectiveApiKeyIsUsedInAuthorizationHeader() throws Exception {
|
||||||
// Arrange
|
// Arrange
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{}");
|
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");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
|
|
||||||
@@ -324,7 +324,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
);
|
);
|
||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{}");
|
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
|
// Act - invoke to trigger actual request building
|
||||||
adapter.invoke(request);
|
adapter.invoke(request);
|
||||||
@@ -362,7 +362,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
void testSuccessPreservesRequest() throws Exception {
|
void testSuccessPreservesRequest() throws Exception {
|
||||||
// Arrange
|
// Arrange
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{\"result\":\"ok\"}");
|
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");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
|
|
||||||
@@ -459,7 +459,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
httpClient);
|
httpClient);
|
||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{}");
|
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");
|
AiRequestRepresentation request = createTestRequest("Test prompt", "Test document");
|
||||||
|
|
||||||
@@ -487,7 +487,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
OpenAiHttpAdapter nsAdapter = new OpenAiHttpAdapter(nsConfig, httpClient);
|
OpenAiHttpAdapter nsAdapter = new OpenAiHttpAdapter(nsConfig, httpClient);
|
||||||
|
|
||||||
HttpResponse<String> httpResponse = mockHttpResponse(200, "{}");
|
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");
|
AiRequestRepresentation request = createTestRequest("prompt", "document");
|
||||||
nsAdapter.invoke(request);
|
nsAdapter.invoke(request);
|
||||||
@@ -531,8 +531,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
// Success case: HTTP 200 must produce AiInvocationSuccess with raw body
|
// Success case: HTTP 200 must produce AiInvocationSuccess with raw body
|
||||||
String successBody = "{\"choices\":[{\"message\":{\"content\":\"result\"}}]}";
|
String successBody = "{\"choices\":[{\"message\":{\"content\":\"result\"}}]}";
|
||||||
HttpResponse<String> successResponse = mockHttpResponse(200, successBody);
|
HttpResponse<String> successResponse = mockHttpResponse(200, successBody);
|
||||||
when(httpClient.send(any(HttpRequest.class), any()))
|
doReturn(successResponse).when(httpClient).send(any(HttpRequest.class), any());
|
||||||
.thenReturn((HttpResponse) successResponse);
|
|
||||||
|
|
||||||
AiInvocationResult result = adapter.invoke(createTestRequest("p", "d"));
|
AiInvocationResult result = adapter.invoke(createTestRequest("p", "d"));
|
||||||
assertThat(result).isInstanceOf(AiInvocationSuccess.class);
|
assertThat(result).isInstanceOf(AiInvocationSuccess.class);
|
||||||
@@ -540,8 +539,7 @@ class OpenAiHttpAdapterTest {
|
|||||||
|
|
||||||
// Non-200 case: HTTP 429 must produce AiInvocationTechnicalFailure with HTTP_429 reason
|
// Non-200 case: HTTP 429 must produce AiInvocationTechnicalFailure with HTTP_429 reason
|
||||||
HttpResponse<String> rateLimitedResponse = mockHttpResponse(429, null);
|
HttpResponse<String> rateLimitedResponse = mockHttpResponse(429, null);
|
||||||
when(httpClient.send(any(HttpRequest.class), any()))
|
doReturn(rateLimitedResponse).when(httpClient).send(any(HttpRequest.class), any());
|
||||||
.thenReturn((HttpResponse) rateLimitedResponse);
|
|
||||||
result = adapter.invoke(createTestRequest("p", "d"));
|
result = adapter.invoke(createTestRequest("p", "d"));
|
||||||
assertThat(result).isInstanceOf(AiInvocationTechnicalFailure.class);
|
assertThat(result).isInstanceOf(AiInvocationTechnicalFailure.class);
|
||||||
assertThat(((AiInvocationTechnicalFailure) result).failureReason()).isEqualTo("HTTP_429");
|
assertThat(((AiInvocationTechnicalFailure) result).failureReason()).isEqualTo("HTTP_429");
|
||||||
|
|||||||
Reference in New Issue
Block a user