From e313a467b12e2556bd5d06945e4f0ece087c2843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= Date: Tue, 26 May 2026 12:54:16 +0200 Subject: [PATCH 1/3] Initial --- .../ai/sdk/grounding/GroundingClientTest.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java index 0b07655a4..4ecfb63dd 100644 --- a/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java +++ b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java @@ -2,9 +2,13 @@ import static com.github.tomakehurst.wiremock.client.WireMock.anyUrl; import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.okJson; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import static org.assertj.core.api.Assertions.assertThat; @@ -21,10 +25,15 @@ import com.sap.ai.sdk.grounding.model.FilterMatchModeEnum; import com.sap.ai.sdk.grounding.model.GetPipelines; import com.sap.ai.sdk.grounding.model.RetrievalKeyValueListPair; +import com.sap.ai.sdk.grounding.model.TextSearchRequest; import com.sap.ai.sdk.grounding.model.VectorDocumentKeyValueListPair; import com.sap.ai.sdk.grounding.model.VectorKeyValueListPair; +import com.sap.ai.sdk.grounding.model.VectorSearchConfiguration; +import com.sap.ai.sdk.grounding.model.VectorSearchFilter; +import com.sap.ai.sdk.grounding.model.VectorSearchResults; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.HttpDestination; +import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -144,6 +153,62 @@ void testRetrieval() { }); } + @Test + void testVectorSearch() { + final String responseBody = + """ + {"results":[{"results":[{"documents":[{"chunks":[{"content":"Joule is the AI copilot."}]}]}]}]} + """; + + WM.stubFor( + post(urlPathEqualTo("/v2/lm/document-grounding/vector/search")) + .willReturn(okJson(responseBody))); + + final VectorApi api = new GroundingClient(SERVICE).vector(); + + final VectorSearchConfiguration configuration = + VectorSearchConfiguration.create().maxChunkCount(5); + + final VectorSearchFilter filter = + VectorSearchFilter.create() + .id("filter-1") + .collectionIds("001766c1-05c7-41fe-a3d7-c1fb02fc1473") + ._configuration(configuration); + + final TextSearchRequest request = + TextSearchRequest.create().query("What is Joule?").filters(List.of(filter)); + + final VectorSearchResults result = api.search("resourceGroup", request); + + assertThat(result).isNotNull(); + assertThat(result.getResults()).isNotNull().hasSize(1); + + WM.verify( + postRequestedFor(urlPathEqualTo("/v2/lm/document-grounding/vector/search")) + .withHeader("AI-Resource-Group", equalTo("resourceGroup")) + .withHeader("Content-Type", equalTo("application/json; charset=UTF-8")) + .withHeader("Accept", equalTo("application/json")) + .withRequestBody( + equalToJson( + """ + { + "query" : "What is Joule?", + "filters" : [ { + "id" : "filter-1", + "collectionIds" : [ "001766c1-05c7-41fe-a3d7-c1fb02fc1473" ], + "configuration" : { + "maxChunkCount" : 5, + "maxDocumentCount" : null + }, + "collectionMetadata" : [ ], + "documentMetadata" : [ ], + "chunkMetadata" : [ ], + "filter" : null + } ] + } + """))); + } + @Test void testCustomHeaders() { WM.stubFor( From fd878d07b5cfe9e259a6c7ba066c38febc2a0bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= Date: Tue, 26 May 2026 12:56:30 +0200 Subject: [PATCH 2/3] Formatting --- .../ai/sdk/grounding/GroundingClientTest.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java index 4ecfb63dd..e3960f5ee 100644 --- a/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java +++ b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java @@ -33,7 +33,6 @@ import com.sap.ai.sdk.grounding.model.VectorSearchResults; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.HttpDestination; -import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -160,31 +159,26 @@ void testVectorSearch() { {"results":[{"results":[{"documents":[{"chunks":[{"content":"Joule is the AI copilot."}]}]}]}]} """; - WM.stubFor( - post(urlPathEqualTo("/v2/lm/document-grounding/vector/search")) - .willReturn(okJson(responseBody))); - - final VectorApi api = new GroundingClient(SERVICE).vector(); - - final VectorSearchConfiguration configuration = - VectorSearchConfiguration.create().maxChunkCount(5); + final String requestUri = "/v2/lm/document-grounding/vector/search"; + WM.stubFor(post(urlPathEqualTo(requestUri)).willReturn(okJson(responseBody))); final VectorSearchFilter filter = VectorSearchFilter.create() .id("filter-1") .collectionIds("001766c1-05c7-41fe-a3d7-c1fb02fc1473") - ._configuration(configuration); + ._configuration(VectorSearchConfiguration.create().maxChunkCount(5)); final TextSearchRequest request = - TextSearchRequest.create().query("What is Joule?").filters(List.of(filter)); + TextSearchRequest.create().query("What is Joule?").filters(filter); + final VectorApi api = new GroundingClient(SERVICE).vector(); final VectorSearchResults result = api.search("resourceGroup", request); assertThat(result).isNotNull(); assertThat(result.getResults()).isNotNull().hasSize(1); WM.verify( - postRequestedFor(urlPathEqualTo("/v2/lm/document-grounding/vector/search")) + postRequestedFor(urlPathEqualTo(requestUri)) .withHeader("AI-Resource-Group", equalTo("resourceGroup")) .withHeader("Content-Type", equalTo("application/json; charset=UTF-8")) .withHeader("Accept", equalTo("application/json")) From 3d8238e8c294fbdbbf907a5572b43ce52b69dabc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= Date: Fri, 29 May 2026 11:52:28 +0200 Subject: [PATCH 3/3] Strengthen test assertion --- .../java/com/sap/ai/sdk/grounding/GroundingClientTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java index e3960f5ee..496978b7f 100644 --- a/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java +++ b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/GroundingClientTest.java @@ -200,7 +200,9 @@ void testVectorSearch() { "filter" : null } ] } - """))); + """, + true /* ignore order */, + false /* ignore extra fields */))); } @Test