From e33e98652f0d4e7bc29bb8e850281ea035ff5efa Mon Sep 17 00:00:00 2001 From: "Krzysztof Massalski (Extern)" Date: Sun, 10 Mar 2024 15:30:23 +0100 Subject: [PATCH] feat(impl):[#439] add unit test, update changelog --- CHANGELOG.md | 5 +- ...ssetAdministrationShellDescriptorTest.java | 28 ++++---- .../SubmodelDescriptorTest.java | 72 +++++++++++++++++++ .../SubmodelDescriptor.java | 2 + 4 files changed, 89 insertions(+), 18 deletions(-) rename irs-api/src/test/java/org/eclipse/tractusx/irs/{dto => component}/assetadministrationshell/AssetAdministrationShellDescriptorTest.java (82%) create mode 100644 irs-api/src/test/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptorTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a1e9be3bf..72cd4413a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,9 @@ _**For better traceability add the corresponding GitHub issue number in each cha ## [Unreleased] ### Changed -- EdcPolicyDefinitionService, EdcContractDefinitionService and EdcAssetService return existing resource if it exists in - EDC +- EdcPolicyDefinitionService, EdcContractDefinitionService and EdcAssetService return existing resource if it exists in EDC - Added AssetAdministrationShellDescriptor specificAssetIds support for externalSubjectId required for data provisioning -- Registering a job - aspects array is now accepting full urn of aspect model instead of name only, eg. 'urn:bamm:io.catenax.single_level_bom_as_built:2.0.0#SingleLevelBomAsBuilt' instead 'SingleLevelBomAsBuilt' +- Registering a job - aspects array is now accepting full urn of aspect model instead of name only, eg. 'urn:bamm:io.catenax.single_level_bom_as_built:2.0.0#SingleLevelBomAsBuilt' instead 'SingleLevelBomAsBuilt' - #439 ## [4.7.0] - 2024-03-04 ### Added diff --git a/irs-api/src/test/java/org/eclipse/tractusx/irs/dto/assetadministrationshell/AssetAdministrationShellDescriptorTest.java b/irs-api/src/test/java/org/eclipse/tractusx/irs/component/assetadministrationshell/AssetAdministrationShellDescriptorTest.java similarity index 82% rename from irs-api/src/test/java/org/eclipse/tractusx/irs/dto/assetadministrationshell/AssetAdministrationShellDescriptorTest.java rename to irs-api/src/test/java/org/eclipse/tractusx/irs/component/assetadministrationshell/AssetAdministrationShellDescriptorTest.java index 6a2b0ecb62..668cce01e4 100644 --- a/irs-api/src/test/java/org/eclipse/tractusx/irs/dto/assetadministrationshell/AssetAdministrationShellDescriptorTest.java +++ b/irs-api/src/test/java/org/eclipse/tractusx/irs/component/assetadministrationshell/AssetAdministrationShellDescriptorTest.java @@ -21,30 +21,28 @@ * * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -package org.eclipse.tractusx.irs.dto.assetadministrationshell; +package org.eclipse.tractusx.irs.component.assetadministrationshell; import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.tractusx.irs.util.TestMother.serialPartAspectName; import static org.eclipse.tractusx.irs.util.TestMother.shellDescriptor; +import static org.eclipse.tractusx.irs.util.TestMother.singleLevelBomAsBuiltAspectName; import static org.eclipse.tractusx.irs.util.TestMother.submodelDescriptorWithoutHref; import java.util.List; -import org.eclipse.tractusx.irs.component.assetadministrationshell.AssetAdministrationShellDescriptor; -import org.eclipse.tractusx.irs.component.assetadministrationshell.SubmodelDescriptor; import org.junit.jupiter.api.Test; class AssetAdministrationShellDescriptorTest { final String singleLevelBomAsBuiltId = "urn:bamm:com.catenax.single_level_bom_as_built:1.0.0"; - final String singleLevelBomAsBuiltIdWithAspectName = "urn:bamm:com.catenax.single_level_bom_as_built:1.0.0#SingleLevelBomAsBuilt"; final String serialPartId = "urn:bamm:com.catenax.serial_part:1.0.0"; - final String serialPartIdWithAspectName = "urn:bamm:com.catenax.serial_part:1.0.0#SerialPart"; @Test void shouldFilterByAspectTypeWhenEndingWithAspectName() { // Arrange final AssetAdministrationShellDescriptor shellDescriptor = shellDescriptor( - List.of(submodelDescriptorWithoutHref(singleLevelBomAsBuiltIdWithAspectName))); + List.of(submodelDescriptorWithoutHref(singleLevelBomAsBuiltAspectName))); final List aspectTypeFilter = List.of("SingleLevelBomAsBuilt"); // Act @@ -52,7 +50,7 @@ void shouldFilterByAspectTypeWhenEndingWithAspectName() { // Assert assertThat(result).hasSize(1); - assertThat(result.get(0).getSemanticId().getKeys().get(0).getValue()).isEqualTo(singleLevelBomAsBuiltIdWithAspectName); + assertThat(result.get(0).getSemanticId().getKeys().get(0).getValue()).isEqualTo(singleLevelBomAsBuiltAspectName); } @Test @@ -74,7 +72,7 @@ void shouldFilterByAspectTypeWhenNotEndingWithAspectName() { void shouldFilterByAspectTypeWhenWithDifferentAspects() { // Arrange final AssetAdministrationShellDescriptor shellDescriptor = shellDescriptor( - List.of(submodelDescriptorWithoutHref(serialPartIdWithAspectName), + List.of(submodelDescriptorWithoutHref(serialPartAspectName), submodelDescriptorWithoutHref(singleLevelBomAsBuiltId))); final List aspectTypeFilter = List.of("SerialPart"); @@ -84,26 +82,26 @@ void shouldFilterByAspectTypeWhenWithDifferentAspects() { // Assert assertThat(result).hasSize(1); - assertThat(result.get(0).getSemanticId().getKeys().get(0).getValue()).isEqualTo(serialPartIdWithAspectName); + assertThat(result.get(0).getSemanticId().getKeys().get(0).getValue()).isEqualTo(serialPartAspectName); } @Test void shouldFilterByAspectTypeForUrnFormat() { // Arrange final AssetAdministrationShellDescriptor shellDescriptor = shellDescriptor( - List.of(submodelDescriptorWithoutHref(serialPartIdWithAspectName), - submodelDescriptorWithoutHref(singleLevelBomAsBuiltIdWithAspectName))); + List.of(submodelDescriptorWithoutHref(serialPartAspectName), + submodelDescriptorWithoutHref(singleLevelBomAsBuiltAspectName))); - final List aspectTypeFilter = List.of(serialPartIdWithAspectName, - singleLevelBomAsBuiltIdWithAspectName); + final List aspectTypeFilter = List.of(serialPartAspectName, + singleLevelBomAsBuiltAspectName); // Act final List result = shellDescriptor.filterDescriptorsByAspectTypes(aspectTypeFilter); // Assert assertThat(result).hasSize(2); - assertThat(result.get(0).getSemanticId().getKeys().get(0).getValue()).isEqualTo(serialPartIdWithAspectName); - assertThat(result.get(1).getSemanticId().getKeys().get(0).getValue()).isEqualTo(singleLevelBomAsBuiltIdWithAspectName); + assertThat(result.get(0).getSemanticId().getKeys().get(0).getValue()).isEqualTo(serialPartAspectName); + assertThat(result.get(1).getSemanticId().getKeys().get(0).getValue()).isEqualTo(singleLevelBomAsBuiltAspectName); } } \ No newline at end of file diff --git a/irs-api/src/test/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptorTest.java b/irs-api/src/test/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptorTest.java new file mode 100644 index 0000000000..5da1488f80 --- /dev/null +++ b/irs-api/src/test/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptorTest.java @@ -0,0 +1,72 @@ +/******************************************************************************** + * Copyright (c) 2022,2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * Copyright (c) 2021,2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +package org.eclipse.tractusx.irs.component.assetadministrationshell; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.tractusx.irs.util.TestMother.submodelDescriptorWithoutHref; + +import java.util.stream.Stream; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class SubmodelDescriptorTest { + + @ParameterizedTest + @MethodSource + void shouldValidateByFilterAspect(final String aspectFilter, final boolean expected) { + // Arrange + final String singleLevelBomTwoZeroVersion = "urn:bamm:io.catenax.single_level_bom_as_built:2.0.0#SingleLevelBomAsBuilt"; + final SubmodelDescriptor submodelDescriptor = submodelDescriptorWithoutHref(singleLevelBomTwoZeroVersion); + + // Act + final boolean result = submodelDescriptor.isAspect(aspectFilter); + + // Assert + assertThat(result).isEqualTo(expected); + } + + private static Stream shouldValidateByFilterAspect() { + return Stream.of( + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:2.0.0#SingleLevelBomAsBuilt", true), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:2.0.1#SingleLevelBomAsBuilt", true), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:2.0.22#SingleLevelBomAsBuilt", true), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:2.1.0#SingleLevelBomAsBuilt", true), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:2.17.1#SingleLevelBomAsBuilt", true), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:2.22.0#SingleLevelBomAsBuilt", true), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:2.0.0", true), + Arguments.of("SingleLevelBomAsBuilt", true), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:1.9.0#SingleLevelBomAsBuilt", false), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:1.9.9#SingleLevelBomAsBuilt", false), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:3.0.0#SingleLevelBomAsBuilt", false), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:3.4.1#SingleLevelBomAsBuilt", false), + Arguments.of("urn:bamm:io.catenax.single_level_bom_as_built:17.0.1#SingleLevelBomAsBuilt", false), + Arguments.of("urn:samm:io.catenax.single_level_bom_as_built:2.0.0#SingleLevelBomAsBuilt", false), + Arguments.of("urn:bamm:com.catenax.single_level_bom_as_built:2.0.0#SingleLevelBomAsBuilt", false), + Arguments.of("urn:bamm:com.catenax.single_level_bom_as_built", false), + Arguments.of("urn:bamm:io.catenax.serial_part:1.0.1#SerialPart", false), + Arguments.of("SerialPart", false), + Arguments.of("", false), + Arguments.of(null, false) + ); + } + +} diff --git a/irs-models/src/main/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptor.java b/irs-models/src/main/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptor.java index 1e8528751d..5afe1061bf 100644 --- a/irs-models/src/main/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptor.java +++ b/irs-models/src/main/java/org/eclipse/tractusx/irs/component/assetadministrationshell/SubmodelDescriptor.java @@ -33,6 +33,7 @@ import lombok.Builder; import lombok.Data; import lombok.extern.jackson.Jacksonized; +import org.springframework.util.StringUtils; /** * SubmodelDescriptor @@ -80,6 +81,7 @@ public String getAspectType() { /* package */ boolean isAspect(final String filterSemanticId) { return Optional.ofNullable(getAspectType()) + .filter(aspect -> StringUtils.hasLength(filterSemanticId)) .map(semanticId -> semanticId.contains(lowerCaseNameWithUnderscores(filterSemanticId)) || semanticModelNamesMatchAndVersionIsInRange(semanticId, filterSemanticId)) .orElse(false);