Skip to content

Commit 9c4610f

Browse files
authored
fix: add missing JsonObjectToCriterionTransformer (#267)
* fix: add missing JsonObjectToCriterionTransformer * test(e2e): verify catalog with QuerySpec.filterExpression
1 parent b815d90 commit 9c4610f

File tree

4 files changed

+39
-15
lines changed

4 files changed

+39
-15
lines changed

core/federated-catalog-core/src/main/java/org/eclipse/edc/catalog/cache/FederatedCatalogCacheExtension.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.eclipse.edc.spi.system.health.HealthCheckService;
5151
import org.eclipse.edc.spi.types.TypeManager;
5252
import org.eclipse.edc.transform.spi.TypeTransformerRegistry;
53+
import org.eclipse.edc.transform.transformer.edc.to.JsonObjectToCriterionTransformer;
5354
import org.eclipse.edc.transform.transformer.edc.to.JsonObjectToQuerySpecTransformer;
5455
import org.eclipse.edc.transform.transformer.edc.to.JsonValueToGenericTypeTransformer;
5556

@@ -156,6 +157,7 @@ private void registerTransformers(ServiceExtensionContext context) {
156157
transformerRegistry.register(new JsonObjectToDataServiceTransformer());
157158
transformerRegistry.register(new JsonObjectToDistributionTransformer());
158159
transformerRegistry.register(new JsonObjectToQuerySpecTransformer());
160+
transformerRegistry.register(new JsonObjectToCriterionTransformer());
159161

160162
var jsonFactory = Json.createBuilderFactory(Map.of());
161163
var mapper = context.getService(TypeManager.class).getMapper(JSON_LD);

system-tests/end2end-test/e2e-junit-runner/src/test/java/org/eclipse/edc/end2end/CatalogApiClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ Result<String> postContractDefinition(JsonObject definition) {
6767
return postObjectWithId(createPostRequest(definition, managementBaseUrl + "/v3/contractdefinitions"));
6868
}
6969

70-
List<Catalog> getContractOffers() {
71-
var rq = createPostRequest(TestFunctions.createEmptyQuery(), catalog("/v1alpha/catalog/query"));
70+
List<Catalog> getCatalogs(JsonObject querySpec) {
71+
var rq = createPostRequest(querySpec, catalog("/v1alpha/catalog/query"));
7272

7373
try (var response = getClient().newCall(rq).execute()) {
7474
if (response.isSuccessful()) {

system-tests/end2end-test/e2e-junit-runner/src/test/java/org/eclipse/edc/end2end/FederatedCatalogTest.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.edc.catalog.transform.JsonObjectToDataServiceTransformer;
2424
import org.eclipse.edc.catalog.transform.JsonObjectToDatasetTransformer;
2525
import org.eclipse.edc.catalog.transform.JsonObjectToDistributionTransformer;
26+
import org.eclipse.edc.connector.controlplane.catalog.spi.Catalog;
2627
import org.eclipse.edc.connector.controlplane.transform.odrl.from.JsonObjectFromPolicyTransformer;
2728
import org.eclipse.edc.connector.core.agent.NoOpParticipantIdMapper;
2829
import org.eclipse.edc.crawler.spi.TargetNode;
@@ -182,19 +183,31 @@ void crawl_whenOfferAvailable_shouldContainOffer(TestInfo testInfo) {
182183
.pollInterval(ofSeconds(1))
183184
.atMost(TIMEOUT)
184185
.untilAsserted(() -> {
185-
var catalogs = apiClient.getContractOffers();
186186

187-
assertThat(catalogs).hasSizeGreaterThanOrEqualTo(1);
188-
assertThat(catalogs).anySatisfy(catalog -> assertThat(catalog.getDatasets())
189-
.anySatisfy(dataset -> {
190-
assertThat(dataset.getOffers()).hasSizeGreaterThanOrEqualTo(1);
191-
assertThat(dataset.getOffers().keySet()).anyMatch(key -> key.contains(assetIdBase64));
192-
}));
187+
// With empty query
188+
var emptyQuery = TestFunctions.createEmptyQuery();
189+
var catalogs = apiClient.getCatalogs(emptyQuery);
193190

191+
assertCatalogContainsOffer(assetIdBase64, catalogs);
192+
193+
// With query containing a filter expression for existing asset.
194+
var queryWithExistingAssetId = TestFunctions.createQuerySpecWithFilterExpressionForAssetId(id);
195+
catalogs = apiClient.getCatalogs(queryWithExistingAssetId);
196+
197+
assertCatalogContainsOffer(assetIdBase64, catalogs);
194198
});
195199
}
196200

197201
private String getError(Result<String> r) {
198202
return ofNullable(r.getFailureDetail()).orElse("No error");
199203
}
204+
205+
private void assertCatalogContainsOffer(String assetIdBase64, List<Catalog> catalogs) {
206+
assertThat(catalogs).hasSizeGreaterThanOrEqualTo(1);
207+
assertThat(catalogs).anySatisfy(catalog -> assertThat(catalog.getDatasets())
208+
.anySatisfy(dataset -> {
209+
assertThat(dataset.getOffers()).hasSizeGreaterThanOrEqualTo(1);
210+
assertThat(dataset.getOffers().keySet()).anyMatch(key -> key.contains(assetIdBase64));
211+
}));
212+
}
200213
}

system-tests/end2end-test/e2e-junit-runner/src/test/java/org/eclipse/edc/end2end/TestFunctions.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import static org.eclipse.edc.junit.testfixtures.TestUtils.getResourceFileContentAsString;
3636
import static org.eclipse.edc.spi.constants.CoreConstants.EDC_NAMESPACE;
3737
import static org.eclipse.edc.spi.constants.CoreConstants.EDC_PREFIX;
38+
import static org.eclipse.edc.spi.query.QuerySpec.EDC_QUERY_SPEC_FILTER_EXPRESSION;
3839

3940
public class TestFunctions {
4041

@@ -60,7 +61,7 @@ public static JsonObject createContractDef(String id, String accessPolicyId, Str
6061
.add(ID, id)
6162
.add(CONTRACT_DEFINITION_ACCESSPOLICY_ID, accessPolicyId)
6263
.add(CONTRACT_DEFINITION_CONTRACTPOLICY_ID, contractPolicyId)
63-
.add(CONTRACT_DEFINITION_ASSETS_SELECTOR, createCriterionBuilder(assetId).build())
64+
.add(CONTRACT_DEFINITION_ASSETS_SELECTOR, createCriterionBuilder(Asset.PROPERTY_ID, "=", assetId).build())
6465
.build();
6566
}
6667

@@ -70,13 +71,21 @@ public static JsonObject createEmptyQuery() {
7071
.build();
7172
}
7273

73-
private static JsonArrayBuilder createCriterionBuilder(String assetId) {
74+
public static JsonObject createQuerySpecWithFilterExpressionForAssetId(String id) {
75+
return Json.createObjectBuilder()
76+
.add(TYPE, QuerySpec.EDC_QUERY_SPEC_TYPE)
77+
.add(EDC_QUERY_SPEC_FILTER_EXPRESSION, createCriterionBuilder("datasets.id", "=", id))
78+
.build();
79+
}
80+
81+
82+
private static JsonArrayBuilder createCriterionBuilder(String operandLeft, String operator, String operandRight) {
7483
return Json.createArrayBuilder()
7584
.add(Json.createObjectBuilder()
76-
.add(TYPE, EDC_NAMESPACE + "CriterionDto")
77-
.add(EDC_NAMESPACE + "operandLeft", Asset.PROPERTY_ID)
78-
.add(EDC_NAMESPACE + "operator", "=")
79-
.add(EDC_NAMESPACE + "operandRight", assetId)
85+
.add(TYPE, EDC_NAMESPACE + "Criterion")
86+
.add(EDC_NAMESPACE + "operandLeft", operandLeft)
87+
.add(EDC_NAMESPACE + "operator", operator)
88+
.add(EDC_NAMESPACE + "operandRight", operandRight)
8089
);
8190
}
8291

0 commit comments

Comments
 (0)