From 5019ebf55d5eb6853cdca0037a6836f1acfc1dba Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Mon, 24 Jun 2024 13:14:56 +0200 Subject: [PATCH] update dataset resolver + test --- .../catalog/DatasetResolverImpl.java | 3 +- .../catalog/DatasetResolverImplTest.java | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/core/control-plane/control-plane-catalog/src/main/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImpl.java b/core/control-plane/control-plane-catalog/src/main/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImpl.java index b4496d9bfb0..60d17e4afd5 100644 --- a/core/control-plane/control-plane-catalog/src/main/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImpl.java +++ b/core/control-plane/control-plane-catalog/src/main/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImpl.java @@ -79,7 +79,8 @@ public Dataset getById(ParticipantAgent agent, String id) { private Dataset toDataset(List contractDefinitions, Asset asset) { var distributions = distributionResolver.getDistributions(asset); - var datasetBuilder = asset.isCatalog() ? Catalog.Builder.newInstance() : Dataset.Builder.newInstance() + var datasetBuilder = asset.isCatalog() ? Catalog.Builder.newInstance() : Dataset.Builder.newInstance(); + datasetBuilder .id(asset.getId()) .distributions(distributions) .properties(asset.getProperties()); diff --git a/core/control-plane/control-plane-catalog/src/test/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImplTest.java b/core/control-plane/control-plane-catalog/src/test/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImplTest.java index e7eacd26199..ec6807e0627 100644 --- a/core/control-plane/control-plane-catalog/src/test/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImplTest.java +++ b/core/control-plane/control-plane-catalog/src/test/java/org/eclipse/edc/connector/controlplane/catalog/DatasetResolverImplTest.java @@ -18,6 +18,7 @@ import org.assertj.core.api.iterable.ThrowingExtractor; import org.eclipse.edc.connector.controlplane.asset.spi.domain.Asset; import org.eclipse.edc.connector.controlplane.asset.spi.index.AssetIndex; +import org.eclipse.edc.connector.controlplane.catalog.spi.Catalog; import org.eclipse.edc.connector.controlplane.catalog.spi.DataService; import org.eclipse.edc.connector.controlplane.catalog.spi.Dataset; import org.eclipse.edc.connector.controlplane.catalog.spi.DatasetResolver; @@ -28,6 +29,7 @@ import org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition; import org.eclipse.edc.connector.controlplane.policy.spi.PolicyDefinition; import org.eclipse.edc.connector.controlplane.policy.spi.store.PolicyDefinitionStore; +import org.eclipse.edc.dataaddress.httpdata.spi.HttpDataAddressSchema; import org.eclipse.edc.policy.model.Policy; import org.eclipse.edc.query.CriterionOperatorRegistryImpl; import org.eclipse.edc.spi.agent.ParticipantAgent; @@ -219,6 +221,34 @@ void query_shouldLimitDataset_whenMultipleDefinitionsWithSameAssets() { .map(getId()).containsExactly("6", "7"); } + @Test + void query_shouldReturnCatalogWithinCatalog_whenAssetIsCatalogAsset() { + var contractDefinition = contractDefinitionBuilder("definitionId").contractPolicyId("contractPolicyId").build(); + var contractPolicy = Policy.Builder.newInstance().build(); + var distribution = Distribution.Builder.newInstance().dataService(DataService.Builder.newInstance() + .endpointDescription("test-asset-desc") + .endpointUrl("https://foo.bar/baz") + .build()) + .format(HttpDataAddressSchema.HTTP_DATA_TYPE).build(); + + when(contractDefinitionResolver.definitionsFor(any())).thenReturn(Stream.of(contractDefinition)); + when(assetIndex.queryAssets(isA(QuerySpec.class))).thenReturn(Stream.of(createAsset("assetId").property(Asset.PROPERTY_IS_CATALOG, true).build())); + when(policyStore.findById("contractPolicyId")).thenReturn(PolicyDefinition.Builder.newInstance().policy(contractPolicy).build()); + when(distributionResolver.getDistributions(isA(Asset.class))).thenReturn(List.of(distribution)); + + var datasets = datasetResolver.query(createParticipantAgent(), QuerySpec.none()); + + assertThat(datasets).isNotNull().hasSize(1).first().satisfies(dataset -> { + assertThat(dataset).isInstanceOf(Catalog.class); + assertThat(dataset.getId()).isEqualTo("assetId"); + assertThat(dataset.getOffers()).hasSize(1).allSatisfy((id, policy) -> { + assertThat(ContractOfferId.parseId(id)).isSucceeded().extracting(ContractOfferId::definitionPart).asString().isEqualTo("definitionId"); + assertThat(policy.getType()).isEqualTo(OFFER); + assertThat(policy.getTarget()).isEqualTo(null); + }); + }); + } + @Test void getById_shouldReturnDataset() { var policy1 = Policy.Builder.newInstance().inheritsFrom("inherits1").build();