From a135a72aca74425361538504fe98efa909083902 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Fri, 30 May 2025 14:33:58 +0100 Subject: [PATCH 01/12] allowing sorting Contract Definitions by creation date. --- .../schema/postgres/ContractDefinitionMapping.java | 1 + 1 file changed, 1 insertion(+) diff --git a/extensions/control-plane/store/sql/contract-definition-store-sql/src/main/java/org/eclipse/edc/connector/controlplane/store/sql/contractdefinition/schema/postgres/ContractDefinitionMapping.java b/extensions/control-plane/store/sql/contract-definition-store-sql/src/main/java/org/eclipse/edc/connector/controlplane/store/sql/contractdefinition/schema/postgres/ContractDefinitionMapping.java index 0e1ad6bce4b..f79e64350ae 100644 --- a/extensions/control-plane/store/sql/contract-definition-store-sql/src/main/java/org/eclipse/edc/connector/controlplane/store/sql/contractdefinition/schema/postgres/ContractDefinitionMapping.java +++ b/extensions/control-plane/store/sql/contract-definition-store-sql/src/main/java/org/eclipse/edc/connector/controlplane/store/sql/contractdefinition/schema/postgres/ContractDefinitionMapping.java @@ -26,6 +26,7 @@ public class ContractDefinitionMapping extends TranslationMapping { public ContractDefinitionMapping(ContractDefinitionStatements statements) { add("id", statements.getIdColumn()); + add("createdAt", statements.getCreatedAtColumn()); add("accessPolicyId", statements.getAccessPolicyIdColumn()); add("accessPolicy", statements.getAccessPolicyIdColumn()); add("contractPolicyId", statements.getContractPolicyIdColumn()); From bf44068780af872dc2a73a63b6c76b32010e9ca1 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Tue, 3 Jun 2025 13:15:55 +0100 Subject: [PATCH 02/12] Added ContractDefiniton createdAt tests in multiple flows. --- ...ObjectFromContractDefinitionTransformer.java | 2 ++ ...BaseContractDefinitionApiControllerTest.java | 17 +++++++++++++++++ ...ctFromContractDefinitionTransformerTest.java | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java b/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java index 2c8d5d8fe44..107065103f8 100644 --- a/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java +++ b/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java @@ -31,6 +31,7 @@ import static org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition.CONTRACT_DEFINITION_TYPE; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; +import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.EDC_CREATED_AT; public class JsonObjectFromContractDefinitionTransformer extends AbstractJsonLdTransformer { private final TypeManager typeManager; @@ -53,6 +54,7 @@ public JsonObjectFromContractDefinitionTransformer(JsonBuilderFactory jsonFactor var builder = jsonFactory.createObjectBuilder() .add(ID, contractDefinition.getId()) .add(TYPE, CONTRACT_DEFINITION_TYPE) + .add(EDC_CREATED_AT, contractDefinition.getCreatedAt()) .add(CONTRACT_DEFINITION_ACCESSPOLICY_ID, contractDefinition.getAccessPolicyId()) .add(CONTRACT_DEFINITION_CONTRACTPOLICY_ID, contractDefinition.getContractPolicyId()) .add(CONTRACT_DEFINITION_ASSETS_SELECTOR, criteria); diff --git a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java index 55624b40100..574affcc5f2 100644 --- a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java +++ b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java @@ -51,6 +51,7 @@ import static org.eclipse.edc.spi.query.QuerySpec.EDC_QUERY_SPEC_TYPE; import static org.eclipse.edc.validator.spi.Violation.violation; import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -158,6 +159,20 @@ void getContractDefById_exists() { verify(service).findById(eq(entity.getId())); } + @Test + void getContractDefById_createdAt_in_body_exists() { + var entity = createContractDefinition().id("test-id").createdAt(1234).build(); + when(service.findById(any())).thenReturn(entity); + when(transformerRegistry.transform(any(ContractDefinition.class), eq(JsonObject.class))).thenReturn(Result.success(createExpandedJsonObject())); + + baseRequest() + .get("/test-id") + .then() + .statusCode(200) + .contentType(JSON) + .body("createdAt", is(1234)); + } + @Test void getContractDefById_notExists() { when(service.findById(any())).thenReturn(null); @@ -379,12 +394,14 @@ private JsonObject createExpandedJsonObject() { .add(CONTRACT_DEFINITION_ACCESSPOLICY_ID, "ap1") .add(CONTRACT_DEFINITION_CONTRACTPOLICY_ID, "cp1") .add(CONTRACT_DEFINITION_ASSETS_SELECTOR, createCriterionBuilder().build()) + .add("createdAt", 1234) .build(); } private ContractDefinition.Builder createContractDefinition() { return ContractDefinition.Builder.newInstance() .id("1") + .createdAt(1234) .accessPolicyId("ap-id") .contractPolicyId("cp-id"); } diff --git a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java index 56818cf3379..a54a3f08cd0 100644 --- a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java +++ b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java @@ -37,6 +37,7 @@ import static org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition.CONTRACT_DEFINITION_TYPE; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; +import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.EDC_CREATED_AT; import static org.eclipse.edc.spi.query.Criterion.criterion; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -67,6 +68,7 @@ void transform() { .id("id") .accessPolicyId("accessPolicyId") .contractPolicyId("contractPolicyId") + .createdAt(1234) .assetsSelector(List.of(criterion)) .build(); @@ -78,6 +80,7 @@ void transform() { assertThat(result.getString(CONTRACT_DEFINITION_ACCESSPOLICY_ID)).isEqualTo("accessPolicyId"); assertThat(result.getString(CONTRACT_DEFINITION_CONTRACTPOLICY_ID)).isEqualTo("contractPolicyId"); assertThat(result.getJsonArray(CONTRACT_DEFINITION_ASSETS_SELECTOR)).containsExactly(criterionJson); + assertThat(result.getJsonNumber(EDC_CREATED_AT).longValue()).isEqualTo(1234); verify(context).transform(criterion, JsonObject.class); verify(context, never()).reportProblem(anyString()); } @@ -92,6 +95,7 @@ void transform_withPrivateProperties_simpleTypes() { .id("id") .accessPolicyId("accessPolicyId") .contractPolicyId("contractPolicyId") + .createdAt(1234) .assetsSelector(List.of(criterion)) .privateProperty("some-key", "some-value") .build(); From af5b9bd3bc6f974946cccbe0581fcc5c93b1de72 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Tue, 3 Jun 2025 15:44:40 +0100 Subject: [PATCH 03/12] Changes from PR. --- .../contractdefinition/ContractDefinitionServiceImplTest.java | 3 +++ .../JsonObjectFromContractDefinitionTransformer.java | 2 -- .../JsonObjectFromContractDefinitionTransformerTest.java | 4 ---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java b/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java index ee33876172b..85572904ddd 100644 --- a/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java +++ b/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java @@ -52,6 +52,7 @@ class ContractDefinitionServiceImplTest { + private static final long CREATED_AT = 1234; private final ContractDefinitionStore store = mock(); private final TransactionContext transactionContext = new NoopTransactionContext(); private final ContractDefinitionObservable observable = new ContractDefinitionObservableImpl(); @@ -73,6 +74,7 @@ void findById_filtersById() { var result = service.findById(definition.getId()); assertThat(result).matches(hasId(definition.getId())); + assertThat(result.getCreatedAt()).isEqualTo(CREATED_AT); } @Test @@ -202,6 +204,7 @@ private Predicate hasId(String id) { private ContractDefinition createContractDefinition() { return ContractDefinition.Builder.newInstance() .id(UUID.randomUUID().toString()) + .createdAt(CREATED_AT) .accessPolicyId(UUID.randomUUID().toString()) .contractPolicyId(UUID.randomUUID().toString()) .build(); diff --git a/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java b/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java index 107065103f8..2c8d5d8fe44 100644 --- a/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java +++ b/extensions/control-plane/api/management-api/contract-definition-api/src/main/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformer.java @@ -31,7 +31,6 @@ import static org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition.CONTRACT_DEFINITION_TYPE; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; -import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.EDC_CREATED_AT; public class JsonObjectFromContractDefinitionTransformer extends AbstractJsonLdTransformer { private final TypeManager typeManager; @@ -54,7 +53,6 @@ public JsonObjectFromContractDefinitionTransformer(JsonBuilderFactory jsonFactor var builder = jsonFactory.createObjectBuilder() .add(ID, contractDefinition.getId()) .add(TYPE, CONTRACT_DEFINITION_TYPE) - .add(EDC_CREATED_AT, contractDefinition.getCreatedAt()) .add(CONTRACT_DEFINITION_ACCESSPOLICY_ID, contractDefinition.getAccessPolicyId()) .add(CONTRACT_DEFINITION_CONTRACTPOLICY_ID, contractDefinition.getContractPolicyId()) .add(CONTRACT_DEFINITION_ASSETS_SELECTOR, criteria); diff --git a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java index a54a3f08cd0..56818cf3379 100644 --- a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java +++ b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/transform/JsonObjectFromContractDefinitionTransformerTest.java @@ -37,7 +37,6 @@ import static org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition.CONTRACT_DEFINITION_TYPE; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; -import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.EDC_CREATED_AT; import static org.eclipse.edc.spi.query.Criterion.criterion; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -68,7 +67,6 @@ void transform() { .id("id") .accessPolicyId("accessPolicyId") .contractPolicyId("contractPolicyId") - .createdAt(1234) .assetsSelector(List.of(criterion)) .build(); @@ -80,7 +78,6 @@ void transform() { assertThat(result.getString(CONTRACT_DEFINITION_ACCESSPOLICY_ID)).isEqualTo("accessPolicyId"); assertThat(result.getString(CONTRACT_DEFINITION_CONTRACTPOLICY_ID)).isEqualTo("contractPolicyId"); assertThat(result.getJsonArray(CONTRACT_DEFINITION_ASSETS_SELECTOR)).containsExactly(criterionJson); - assertThat(result.getJsonNumber(EDC_CREATED_AT).longValue()).isEqualTo(1234); verify(context).transform(criterion, JsonObject.class); verify(context, never()).reportProblem(anyString()); } @@ -95,7 +92,6 @@ void transform_withPrivateProperties_simpleTypes() { .id("id") .accessPolicyId("accessPolicyId") .contractPolicyId("contractPolicyId") - .createdAt(1234) .assetsSelector(List.of(criterion)) .privateProperty("some-key", "some-value") .build(); From 7172a21d864b317f30e4ea96d9000df27afb7f48 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Fri, 6 Jun 2025 16:03:12 +0100 Subject: [PATCH 04/12] Update sorting tests. --- .../ContractDefinitionServiceImplTest.java | 3 -- ...seContractDefinitionApiControllerTest.java | 17 ------- .../ContractDefinitionStoreTestBase.java | 8 ++++ .../ContractDefinitionApiEndToEndTest.java | 47 +++++++++++++++++++ 4 files changed, 55 insertions(+), 20 deletions(-) diff --git a/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java b/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java index 85572904ddd..ee33876172b 100644 --- a/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java +++ b/core/control-plane/control-plane-aggregate-services/src/test/java/org/eclipse/edc/connector/controlplane/services/contractdefinition/ContractDefinitionServiceImplTest.java @@ -52,7 +52,6 @@ class ContractDefinitionServiceImplTest { - private static final long CREATED_AT = 1234; private final ContractDefinitionStore store = mock(); private final TransactionContext transactionContext = new NoopTransactionContext(); private final ContractDefinitionObservable observable = new ContractDefinitionObservableImpl(); @@ -74,7 +73,6 @@ void findById_filtersById() { var result = service.findById(definition.getId()); assertThat(result).matches(hasId(definition.getId())); - assertThat(result.getCreatedAt()).isEqualTo(CREATED_AT); } @Test @@ -204,7 +202,6 @@ private Predicate hasId(String id) { private ContractDefinition createContractDefinition() { return ContractDefinition.Builder.newInstance() .id(UUID.randomUUID().toString()) - .createdAt(CREATED_AT) .accessPolicyId(UUID.randomUUID().toString()) .contractPolicyId(UUID.randomUUID().toString()) .build(); diff --git a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java index 574affcc5f2..55624b40100 100644 --- a/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java +++ b/extensions/control-plane/api/management-api/contract-definition-api/src/test/java/org/eclipse/edc/connector/controlplane/api/management/contractdefinition/BaseContractDefinitionApiControllerTest.java @@ -51,7 +51,6 @@ import static org.eclipse.edc.spi.query.QuerySpec.EDC_QUERY_SPEC_TYPE; import static org.eclipse.edc.validator.spi.Violation.violation; import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.Matchers.is; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -159,20 +158,6 @@ void getContractDefById_exists() { verify(service).findById(eq(entity.getId())); } - @Test - void getContractDefById_createdAt_in_body_exists() { - var entity = createContractDefinition().id("test-id").createdAt(1234).build(); - when(service.findById(any())).thenReturn(entity); - when(transformerRegistry.transform(any(ContractDefinition.class), eq(JsonObject.class))).thenReturn(Result.success(createExpandedJsonObject())); - - baseRequest() - .get("/test-id") - .then() - .statusCode(200) - .contentType(JSON) - .body("createdAt", is(1234)); - } - @Test void getContractDefById_notExists() { when(service.findById(any())).thenReturn(null); @@ -394,14 +379,12 @@ private JsonObject createExpandedJsonObject() { .add(CONTRACT_DEFINITION_ACCESSPOLICY_ID, "ap1") .add(CONTRACT_DEFINITION_CONTRACTPOLICY_ID, "cp1") .add(CONTRACT_DEFINITION_ASSETS_SELECTOR, createCriterionBuilder().build()) - .add("createdAt", 1234) .build(); } private ContractDefinition.Builder createContractDefinition() { return ContractDefinition.Builder.newInstance() .id("1") - .createdAt(1234) .accessPolicyId("ap-id") .contractPolicyId("cp-id"); } diff --git a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java index c08ee311b33..4e95c918534 100644 --- a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java +++ b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java @@ -393,6 +393,14 @@ void verifySorting() { assertThat(getContractDefinitionStore().findAll(QuerySpec.Builder.newInstance().sortField("id").sortOrder(SortOrder.DESC).build())).hasSize(10).isSortedAccordingTo((c1, c2) -> c2.getId().compareTo(c1.getId())); } + @Test + void verifySortingCreatedAt() { + IntStream.range(0, 10).mapToObj(i -> createContractDefinition("id" + i)).forEach(getContractDefinitionStore()::save); + + assertThat(getContractDefinitionStore().findAll(QuerySpec.Builder.newInstance().sortField("createdAt").sortOrder(SortOrder.ASC).build())).hasSize(10).isSortedAccordingTo(Comparator.comparing(ContractDefinition::getCreatedAt)); + assertThat(getContractDefinitionStore().findAll(QuerySpec.Builder.newInstance().sortField("createdAt").sortOrder(SortOrder.DESC).build())).hasSize(10).isSortedAccordingTo((c1, c2) -> Long.compare(c2.getCreatedAt(), c1.getCreatedAt())); + } + @Test void verifySorting_invalidProperty() { IntStream.range(0, 10).mapToObj(i -> createContractDefinition("id" + i)).forEach(getContractDefinitionStore()::save); diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index 72b93e2549b..77b12d3f5b5 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -14,11 +14,14 @@ package org.eclipse.edc.test.e2e.managementapi; +import com.fasterxml.jackson.core.JsonProcessingException; import jakarta.json.JsonArray; +import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonValue; import org.eclipse.edc.connector.controlplane.contract.spi.offer.store.ContractDefinitionStore; import org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition; +import org.eclipse.edc.jsonld.util.JacksonJsonLd; import org.eclipse.edc.junit.annotations.EndToEndTest; import org.eclipse.edc.junit.annotations.PostgresqlIntegrationTest; import org.eclipse.edc.sql.testfixtures.PostgresqlEndToEndExtension; @@ -39,6 +42,7 @@ import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.VOCAB; +import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.EDC_CREATED_AT; import static org.eclipse.edc.spi.constants.CoreConstants.EDC_NAMESPACE; import static org.eclipse.edc.spi.query.Criterion.criterion; import static org.hamcrest.Matchers.equalTo; @@ -117,6 +121,45 @@ void queryPolicyDefinitionWithSimplePrivateProperties(ManagementEndToEndTestCont .body("size()", is(0)); } + @Test + void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext context, ContractDefinitionStore store) throws JsonProcessingException { + var id1 = UUID.randomUUID().toString(); + store.save(createContractDefinition(id1).build()); + var id2 = UUID.randomUUID().toString(); + store.save(createContractDefinition(id2).build()); + + var content = """ + { + "@context": { + "@vocab": "https://w3id.org/edc/v0.0.1/ns/" + }, + "@type": "QuerySpec", + "sortField": "createdAt", + "sortOrder": "DESC", + "limit": 100, + "offset": 0 + } + """; + var query = JacksonJsonLd.createObjectMapper() + .readValue(content, JsonObject.class); + + var result = context.baseRequest() + .contentType(JSON) + .body(query) + .post("/v3/contractdefinitions/request") + .then() + .log().ifError() + .statusCode(200) + .extract().body().as(JsonArray.class); + + assertThat(result).isNotEmpty().hasSizeGreaterThanOrEqualTo(2); + assertThat(result).isSortedAccordingTo((o1, o2) -> { + var l1 = o1.asJsonObject().getJsonNumber("createdAt").longValue(); + var l2 = o2.asJsonObject().getJsonNumber("createdAt").longValue(); + return Long.compare(l1, l2); + }); + } + @Test void shouldCreateAndRetrieve(ManagementEndToEndTestContext context, ContractDefinitionStore store) { var id = UUID.randomUUID().toString(); @@ -134,6 +177,7 @@ void shouldCreateAndRetrieve(ManagementEndToEndTestContext context, ContractDefi var actual = store.findById(id); assertThat(actual.getId()).matches(id); + assertThat(actual.getCreatedAt()).isEqualTo(1234); } @Test @@ -193,8 +237,10 @@ private JsonObjectBuilder createDefinitionBuilder(String id) { .add(CONTEXT, createObjectBuilder().add(VOCAB, EDC_NAMESPACE)) .add(TYPE, EDC_NAMESPACE + "ContractDefinition") .add(ID, id) + .add(EDC_CREATED_AT, 1234) .add("accessPolicyId", UUID.randomUUID().toString()) .add("contractPolicyId", UUID.randomUUID().toString()) + .add("createdAt", 1234) .add("assetsSelector", createArrayBuilder() .add(createCriterionBuilder("foo", "=", "bar")) .add(createCriterionBuilder("bar", "=", "baz")).build()); @@ -213,6 +259,7 @@ private ContractDefinition.Builder createContractDefinition(String id) { .id(id) .accessPolicyId(UUID.randomUUID().toString()) .contractPolicyId(UUID.randomUUID().toString()) + .createdAt(1234) .assetsSelectorCriterion(criterion("foo", "=", "bar")) .assetsSelectorCriterion(criterion("bar", "=", "baz")); } From 8b49c1e007b203dc68ced179dbfcf9e1e5061907 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Sun, 8 Jun 2025 09:57:17 +0100 Subject: [PATCH 05/12] Update sorting tests. --- .../offer/store/TestFunctions.java | 1 + .../ContractDefinitionApiEndToEndTest.java | 47 ------------------- 2 files changed, 1 insertion(+), 47 deletions(-) diff --git a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/TestFunctions.java b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/TestFunctions.java index f9b8b75630c..2cd35aa479e 100644 --- a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/TestFunctions.java +++ b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/TestFunctions.java @@ -36,6 +36,7 @@ public static ContractDefinition createContractDefinition(String id, String acce .id(id) .accessPolicyId(accessPolicyId) .contractPolicyId(contractPolicyId) + .createdAt(1234) .build(); } diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index 77b12d3f5b5..72b93e2549b 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -14,14 +14,11 @@ package org.eclipse.edc.test.e2e.managementapi; -import com.fasterxml.jackson.core.JsonProcessingException; import jakarta.json.JsonArray; -import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonValue; import org.eclipse.edc.connector.controlplane.contract.spi.offer.store.ContractDefinitionStore; import org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition; -import org.eclipse.edc.jsonld.util.JacksonJsonLd; import org.eclipse.edc.junit.annotations.EndToEndTest; import org.eclipse.edc.junit.annotations.PostgresqlIntegrationTest; import org.eclipse.edc.sql.testfixtures.PostgresqlEndToEndExtension; @@ -42,7 +39,6 @@ import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.VOCAB; -import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.EDC_CREATED_AT; import static org.eclipse.edc.spi.constants.CoreConstants.EDC_NAMESPACE; import static org.eclipse.edc.spi.query.Criterion.criterion; import static org.hamcrest.Matchers.equalTo; @@ -121,45 +117,6 @@ void queryPolicyDefinitionWithSimplePrivateProperties(ManagementEndToEndTestCont .body("size()", is(0)); } - @Test - void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext context, ContractDefinitionStore store) throws JsonProcessingException { - var id1 = UUID.randomUUID().toString(); - store.save(createContractDefinition(id1).build()); - var id2 = UUID.randomUUID().toString(); - store.save(createContractDefinition(id2).build()); - - var content = """ - { - "@context": { - "@vocab": "https://w3id.org/edc/v0.0.1/ns/" - }, - "@type": "QuerySpec", - "sortField": "createdAt", - "sortOrder": "DESC", - "limit": 100, - "offset": 0 - } - """; - var query = JacksonJsonLd.createObjectMapper() - .readValue(content, JsonObject.class); - - var result = context.baseRequest() - .contentType(JSON) - .body(query) - .post("/v3/contractdefinitions/request") - .then() - .log().ifError() - .statusCode(200) - .extract().body().as(JsonArray.class); - - assertThat(result).isNotEmpty().hasSizeGreaterThanOrEqualTo(2); - assertThat(result).isSortedAccordingTo((o1, o2) -> { - var l1 = o1.asJsonObject().getJsonNumber("createdAt").longValue(); - var l2 = o2.asJsonObject().getJsonNumber("createdAt").longValue(); - return Long.compare(l1, l2); - }); - } - @Test void shouldCreateAndRetrieve(ManagementEndToEndTestContext context, ContractDefinitionStore store) { var id = UUID.randomUUID().toString(); @@ -177,7 +134,6 @@ void shouldCreateAndRetrieve(ManagementEndToEndTestContext context, ContractDefi var actual = store.findById(id); assertThat(actual.getId()).matches(id); - assertThat(actual.getCreatedAt()).isEqualTo(1234); } @Test @@ -237,10 +193,8 @@ private JsonObjectBuilder createDefinitionBuilder(String id) { .add(CONTEXT, createObjectBuilder().add(VOCAB, EDC_NAMESPACE)) .add(TYPE, EDC_NAMESPACE + "ContractDefinition") .add(ID, id) - .add(EDC_CREATED_AT, 1234) .add("accessPolicyId", UUID.randomUUID().toString()) .add("contractPolicyId", UUID.randomUUID().toString()) - .add("createdAt", 1234) .add("assetsSelector", createArrayBuilder() .add(createCriterionBuilder("foo", "=", "bar")) .add(createCriterionBuilder("bar", "=", "baz")).build()); @@ -259,7 +213,6 @@ private ContractDefinition.Builder createContractDefinition(String id) { .id(id) .accessPolicyId(UUID.randomUUID().toString()) .contractPolicyId(UUID.randomUUID().toString()) - .createdAt(1234) .assetsSelectorCriterion(criterion("foo", "=", "bar")) .assetsSelectorCriterion(criterion("bar", "=", "baz")); } From c5cee4eba7facf68f9d5eab77d7cd6868a96a425 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Mon, 9 Jun 2025 11:41:58 +0100 Subject: [PATCH 06/12] Add api Contract Definition sort by create date. --- .../ContractDefinitionApiEndToEndTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index 72b93e2549b..542bc1512bf 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -14,11 +14,14 @@ package org.eclipse.edc.test.e2e.managementapi; +import com.fasterxml.jackson.core.JsonProcessingException; import jakarta.json.JsonArray; +import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonValue; import org.eclipse.edc.connector.controlplane.contract.spi.offer.store.ContractDefinitionStore; import org.eclipse.edc.connector.controlplane.contract.spi.types.offer.ContractDefinition; +import org.eclipse.edc.jsonld.util.JacksonJsonLd; import org.eclipse.edc.junit.annotations.EndToEndTest; import org.eclipse.edc.junit.annotations.PostgresqlIntegrationTest; import org.eclipse.edc.sql.testfixtures.PostgresqlEndToEndExtension; @@ -28,6 +31,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; +import java.util.LinkedHashMap; +import java.util.List; import java.util.UUID; import static io.restassured.http.ContentType.JSON; @@ -117,6 +122,52 @@ void queryPolicyDefinitionWithSimplePrivateProperties(ManagementEndToEndTestCont .body("size()", is(0)); } + @Test + void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext context, ContractDefinitionStore store) throws JsonProcessingException { + var id1 = UUID.randomUUID().toString(); + var cd1 = createContractDefinition(id1); + store.save(cd1.build()); + var id2 = UUID.randomUUID().toString(); + var cd2 = createContractDefinition(id2); + store.save(cd2.build()); + var id3 = UUID.randomUUID().toString(); + var cd3 = createContractDefinition(id3); + store.save(cd3.build()); + + var content = """ + { + "@context": { + "@vocab": "https://w3id.org/edc/v0.0.1/ns/" + }, + "@type": "QuerySpec", + "sortField": "createdAt", + "sortOrder": "DESC", + "limit": 100, + "offset": 0 + } + """; + var query = JacksonJsonLd.createObjectMapper() + .readValue(content, JsonObject.class); + + var result = context.baseRequest() + .contentType(JSON) + .body(query) + .post("/v3/contractdefinitions/request") + .then() + .log().ifError() + .statusCode(200) + .body("size()", is(3)) + .extract() + .as(List.class); + assertThat(result).isNotNull(); + var resultCd1 = (LinkedHashMap) result.get(0); + var resultCd2 = (LinkedHashMap) result.get(1); + var resultCd3 = (LinkedHashMap) result.get(2); + assertThat(resultCd1.get(ID)).isEqualTo(id1); + assertThat(resultCd2.get(ID)).isEqualTo(id2); + assertThat(resultCd3.get(ID)).isEqualTo(id3); + } + @Test void shouldCreateAndRetrieve(ManagementEndToEndTestContext context, ContractDefinitionStore store) { var id = UUID.randomUUID().toString(); @@ -213,6 +264,7 @@ private ContractDefinition.Builder createContractDefinition(String id) { .id(id) .accessPolicyId(UUID.randomUUID().toString()) .contractPolicyId(UUID.randomUUID().toString()) + .createdAt(1234) .assetsSelectorCriterion(criterion("foo", "=", "bar")) .assetsSelectorCriterion(criterion("bar", "=", "baz")); } From 54d5d0a9147f2742d98ff91dd3a1fa02f0de7300 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Mon, 9 Jun 2025 12:02:11 +0100 Subject: [PATCH 07/12] Improve E2E test. --- .../ContractDefinitionApiEndToEndTest.java | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index 542bc1512bf..5f24b00449a 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -125,14 +125,12 @@ void queryPolicyDefinitionWithSimplePrivateProperties(ManagementEndToEndTestCont @Test void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext context, ContractDefinitionStore store) throws JsonProcessingException { var id1 = UUID.randomUUID().toString(); - var cd1 = createContractDefinition(id1); - store.save(cd1.build()); var id2 = UUID.randomUUID().toString(); - var cd2 = createContractDefinition(id2); - store.save(cd2.build()); var id3 = UUID.randomUUID().toString(); - var cd3 = createContractDefinition(id3); - store.save(cd3.build()); + var ids = List.of(id1, id2, id3); + for (String id : ids) { + store.save(createContractDefinition(id).build()); + } var content = """ { @@ -159,13 +157,10 @@ void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext co .body("size()", is(3)) .extract() .as(List.class); - assertThat(result).isNotNull(); - var resultCd1 = (LinkedHashMap) result.get(0); - var resultCd2 = (LinkedHashMap) result.get(1); - var resultCd3 = (LinkedHashMap) result.get(2); - assertThat(resultCd1.get(ID)).isEqualTo(id1); - assertThat(resultCd2.get(ID)).isEqualTo(id2); - assertThat(resultCd3.get(ID)).isEqualTo(id3); + + assertThat(result) + .extracting(cd -> ((LinkedHashMap) cd).get(ID)) + .contains(id1, id2, id3); } @Test From 4f5ec4d255dc291357fd879af1011eaf6e894c79 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Mon, 9 Jun 2025 14:22:35 +0100 Subject: [PATCH 08/12] Fix some tests. --- .../offer/store/ContractDefinitionStoreTestBase.java | 6 ++++-- .../managementapi/ContractDefinitionApiEndToEndTest.java | 5 ++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java index 4e95c918534..7a4f8021147 100644 --- a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java +++ b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java @@ -397,8 +397,10 @@ void verifySorting() { void verifySortingCreatedAt() { IntStream.range(0, 10).mapToObj(i -> createContractDefinition("id" + i)).forEach(getContractDefinitionStore()::save); - assertThat(getContractDefinitionStore().findAll(QuerySpec.Builder.newInstance().sortField("createdAt").sortOrder(SortOrder.ASC).build())).hasSize(10).isSortedAccordingTo(Comparator.comparing(ContractDefinition::getCreatedAt)); - assertThat(getContractDefinitionStore().findAll(QuerySpec.Builder.newInstance().sortField("createdAt").sortOrder(SortOrder.DESC).build())).hasSize(10).isSortedAccordingTo((c1, c2) -> Long.compare(c2.getCreatedAt(), c1.getCreatedAt())); + var querySpec = QuerySpec.Builder.newInstance().sortField("createdAt"); + + assertThat(getContractDefinitionStore().findAll(querySpec.sortOrder(SortOrder.ASC).build())).isSortedAccordingTo(Comparator.comparing(ContractDefinition::getCreatedAt)); + assertThat(getContractDefinitionStore().findAll(querySpec.sortOrder(SortOrder.DESC).build())).isSortedAccordingTo((c1, c2) -> Long.compare(c2.getCreatedAt(), c1.getCreatedAt())); } @Test diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index 5f24b00449a..aae80f058f1 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -129,7 +129,7 @@ void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext co var id3 = UUID.randomUUID().toString(); var ids = List.of(id1, id2, id3); for (String id : ids) { - store.save(createContractDefinition(id).build()); + store.save(createContractDefinition(id).createdAt(System.currentTimeMillis()).build()); } var content = """ @@ -160,7 +160,7 @@ void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext co assertThat(result) .extracting(cd -> ((LinkedHashMap) cd).get(ID)) - .contains(id1, id2, id3); + .containsExactlyElementsOf(List.of(id3, id2, id1)); } @Test @@ -259,7 +259,6 @@ private ContractDefinition.Builder createContractDefinition(String id) { .id(id) .accessPolicyId(UUID.randomUUID().toString()) .contractPolicyId(UUID.randomUUID().toString()) - .createdAt(1234) .assetsSelectorCriterion(criterion("foo", "=", "bar")) .assetsSelectorCriterion(criterion("bar", "=", "baz")); } From c957151641957e582f4062b08a6bc982c9c2f68d Mon Sep 17 00:00:00 2001 From: bmg13 Date: Mon, 9 Jun 2025 15:28:05 +0100 Subject: [PATCH 09/12] Changes from PR. --- .../managementapi/ContractDefinitionApiEndToEndTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index aae80f058f1..df9987474a9 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -34,6 +34,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.UUID; +import java.util.stream.Stream; import static io.restassured.http.ContentType.JSON; import static jakarta.json.Json.createArrayBuilder; @@ -127,10 +128,7 @@ void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext co var id1 = UUID.randomUUID().toString(); var id2 = UUID.randomUUID().toString(); var id3 = UUID.randomUUID().toString(); - var ids = List.of(id1, id2, id3); - for (String id : ids) { - store.save(createContractDefinition(id).createdAt(System.currentTimeMillis()).build()); - } + Stream.of(id1, id2, id3).forEach(id -> store.save(createContractDefinition(id).createdAt(System.nanoTime()).build())); var content = """ { From c3f9e1c1af293a64c0baf500468a85894078da20 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Mon, 9 Jun 2025 16:43:05 +0100 Subject: [PATCH 10/12] Changes from PR. --- .../e2e/managementapi/ContractDefinitionApiEndToEndTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index df9987474a9..f20f655b6b4 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -34,6 +34,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; import static io.restassured.http.ContentType.JSON; @@ -128,7 +129,9 @@ void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext co var id1 = UUID.randomUUID().toString(); var id2 = UUID.randomUUID().toString(); var id3 = UUID.randomUUID().toString(); - Stream.of(id1, id2, id3).forEach(id -> store.save(createContractDefinition(id).createdAt(System.nanoTime()).build())); + var createdAtTime = 1000L; + var increment = new AtomicInteger(0); + Stream.of(id1, id2, id3).forEach(id -> store.save(createContractDefinition(id).createdAt(createdAtTime + increment.getAndIncrement()).build())); var content = """ { From 6456ff3bb6f83601510048370d2714072ec27f8c Mon Sep 17 00:00:00 2001 From: bmg13 Date: Mon, 9 Jun 2025 16:57:46 +0100 Subject: [PATCH 11/12] Small test update. --- .../managementapi/ContractDefinitionApiEndToEndTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java index f20f655b6b4..9339ad3d6f5 100644 --- a/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java +++ b/system-tests/management-api/management-api-test-runner/src/test/java/org/eclipse/edc/test/e2e/managementapi/ContractDefinitionApiEndToEndTest.java @@ -34,7 +34,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.UUID; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Stream; import static io.restassured.http.ContentType.JSON; @@ -129,9 +129,8 @@ void queryContractDefinitions_sortByCreatedDate(ManagementEndToEndTestContext co var id1 = UUID.randomUUID().toString(); var id2 = UUID.randomUUID().toString(); var id3 = UUID.randomUUID().toString(); - var createdAtTime = 1000L; - var increment = new AtomicInteger(0); - Stream.of(id1, id2, id3).forEach(id -> store.save(createContractDefinition(id).createdAt(createdAtTime + increment.getAndIncrement()).build())); + var createdAtTime = new AtomicLong(1000L); + Stream.of(id1, id2, id3).forEach(id -> store.save(createContractDefinition(id).createdAt(createdAtTime.getAndIncrement()).build())); var content = """ { From 52d6903a82f7618356110f8ba22bfc942b03bc25 Mon Sep 17 00:00:00 2001 From: bmg13 Date: Fri, 13 Jun 2025 10:53:33 +0100 Subject: [PATCH 12/12] Improve Test Format. --- .../offer/store/ContractDefinitionStoreTestBase.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java index 7a4f8021147..fac67d85b5b 100644 --- a/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java +++ b/spi/control-plane/contract-spi/src/testFixtures/java/org/eclipse/edc/connector/controlplane/contract/spi/testfixtures/offer/store/ContractDefinitionStoreTestBase.java @@ -399,8 +399,12 @@ void verifySortingCreatedAt() { var querySpec = QuerySpec.Builder.newInstance().sortField("createdAt"); - assertThat(getContractDefinitionStore().findAll(querySpec.sortOrder(SortOrder.ASC).build())).isSortedAccordingTo(Comparator.comparing(ContractDefinition::getCreatedAt)); - assertThat(getContractDefinitionStore().findAll(querySpec.sortOrder(SortOrder.DESC).build())).isSortedAccordingTo((c1, c2) -> Long.compare(c2.getCreatedAt(), c1.getCreatedAt())); + assertThat(getContractDefinitionStore() + .findAll(querySpec.sortOrder(SortOrder.ASC).build())) + .isSortedAccordingTo(Comparator.comparing(ContractDefinition::getCreatedAt)); + assertThat(getContractDefinitionStore() + .findAll(querySpec.sortOrder(SortOrder.DESC).build())) + .isSortedAccordingTo((c1, c2) -> Long.compare(c2.getCreatedAt(), c1.getCreatedAt())); } @Test