Skip to content

Commit

Permalink
feat(impl):[#439] add unit test, update changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
ds-ext-kmassalski committed Mar 10, 2024
1 parent 5fba410 commit e33e986
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 18 deletions.
5 changes: 2 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,38 +21,36 @@
*
* 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<String> aspectTypeFilter = List.of("SingleLevelBomAsBuilt");

// Act
final List<SubmodelDescriptor> result = shellDescriptor.filterDescriptorsByAspectTypes(aspectTypeFilter);

// 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
Expand All @@ -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<String> aspectTypeFilter = List.of("SerialPart");
Expand All @@ -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<String> aspectTypeFilter = List.of(serialPartIdWithAspectName,
singleLevelBomAsBuiltIdWithAspectName);
final List<String> aspectTypeFilter = List.of(serialPartAspectName,
singleLevelBomAsBuiltAspectName);

// Act
final List<SubmodelDescriptor> 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);
}

}
Original file line number Diff line number Diff line change
@@ -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<Arguments> 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)
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import lombok.Builder;
import lombok.Data;
import lombok.extern.jackson.Jacksonized;
import org.springframework.util.StringUtils;

/**
* SubmodelDescriptor
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit e33e986

Please sign in to comment.