From 4125ea90b7b6d212a90a84cf4f2b219ca83a7524 Mon Sep 17 00:00:00 2001 From: Jaro Hartmann Date: Tue, 23 Jan 2024 17:47:10 +0100 Subject: [PATCH] feat(edc-client):[#344] Add IrsWireMock integration test --- .../irs/configuration/RestTemplateConfig.java | 2 + .../eclipse/tractusx/irs/IrsWireMockIT.java | 150 +++++ .../tractusx/irs/WireMockTestConfig.java | 83 +++ .../resources/__files/all-models-page-IT.json | 554 ++++++++++++++++++ 4 files changed, 789 insertions(+) create mode 100644 irs-api/src/test/java/org/eclipse/tractusx/irs/IrsWireMockIT.java create mode 100644 irs-api/src/test/java/org/eclipse/tractusx/irs/WireMockTestConfig.java create mode 100644 irs-api/src/test/resources/__files/all-models-page-IT.json diff --git a/irs-api/src/main/java/org/eclipse/tractusx/irs/configuration/RestTemplateConfig.java b/irs-api/src/main/java/org/eclipse/tractusx/irs/configuration/RestTemplateConfig.java index faf99e94ea..991d81498e 100644 --- a/irs-api/src/main/java/org/eclipse/tractusx/irs/configuration/RestTemplateConfig.java +++ b/irs-api/src/main/java/org/eclipse/tractusx/irs/configuration/RestTemplateConfig.java @@ -41,6 +41,7 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; @@ -66,6 +67,7 @@ @Configuration @RequiredArgsConstructor @SuppressWarnings("PMD.ExcessiveImports") +@Profile("!integrationtest") public class RestTemplateConfig { public static final String DTR_REST_TEMPLATE = "dtrRestTemplate"; diff --git a/irs-api/src/test/java/org/eclipse/tractusx/irs/IrsWireMockIT.java b/irs-api/src/test/java/org/eclipse/tractusx/irs/IrsWireMockIT.java new file mode 100644 index 0000000000..d7970bdee4 --- /dev/null +++ b/irs-api/src/test/java/org/eclipse/tractusx/irs/IrsWireMockIT.java @@ -0,0 +1,150 @@ +/******************************************************************************** + * Copyright (c) 2021,2022,2023 + * 2022: ZF Friedrichshafen AG + * 2022: ISTOS GmbH + * 2022,2023: Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * 2022,2023: BOSCH 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; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.givenThat; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import com.github.tomakehurst.wiremock.junit5.WireMockTest; +import org.eclipse.tractusx.irs.component.JobHandle; +import org.eclipse.tractusx.irs.component.PartChainIdentificationKey; +import org.eclipse.tractusx.irs.component.RegisterJob; +import org.eclipse.tractusx.irs.component.enums.Direction; +import org.eclipse.tractusx.irs.semanticshub.AspectModels; +import org.eclipse.tractusx.irs.services.IrsItemGraphQueryService; +import org.eclipse.tractusx.irs.services.SemanticHubService; +import org.eclipse.tractusx.irs.services.validation.SchemaNotFoundException; +import org.eclipse.tractusx.irs.testing.containers.MinioContainer; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.test.context.support.TestPropertySourceUtils; +import org.testcontainers.junit.jupiter.Testcontainers; + +@WireMockTest(httpPort = 8085) +@Testcontainers +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = WireMockTestConfig.class + /*, properties = "spring.main.allow-bean-definition-overriding=true"*/) +@ContextConfiguration(initializers = IrsWireMockIT.MinioConfigInitializer.class) +//@Import({ WireMockTestConfig.class }) +@ActiveProfiles("integrationtest") +class IrsWireMockIT { + public static final String BPDM_TEST = "http://bpdm.test/legal-entities/{partnerId}?idType={idType}"; + public static final String DISCOVERY_TEST = "http://discovery.test"; + public static final String SEMANTIC_HUB_URL = "http://semantic.hub/models"; + public static final String SEMANTIC_HUB_SCHEMA_URL = "http://semantic.hub/models/{urn}/json-schema"; + private static final String ACCESS_KEY = "accessKey"; + private static final String SECRET_KEY = "secretKey"; + private static final MinioContainer minioContainer = new MinioContainer( + new MinioContainer.CredentialsProvider(ACCESS_KEY, SECRET_KEY)).withReuse(true); + public static final String EDC_URL = "http://edc.test:8081/management"; + @Autowired + private IrsItemGraphQueryService irsService; + + @Autowired + private SemanticHubService semanticHubService; + + @BeforeAll + static void startContainer() { + minioContainer.start(); + givenThat(get(urlPathEqualTo("/models")).willReturn(aResponse().withStatus(200) + .withHeader("Content-Type", + "application/json;charset=UTF-8") + .withBodyFile("all-models-page-IT.json"))); + } + + @AfterAll + static void stopContainer() { + minioContainer.stop(); + } + + @DynamicPropertySource + static void configureProperties(DynamicPropertyRegistry registry) { + registry.add("bpdm.bpnEndpoint", () -> BPDM_TEST); + registry.add("digitalTwinRegistry.discoveryFinderUrl", () -> DISCOVERY_TEST); + registry.add("semanticshub.url", () -> SEMANTIC_HUB_URL); + registry.add("semanticshub.modelJsonSchemaEndpoint", () -> SEMANTIC_HUB_SCHEMA_URL); + registry.add("irs-edc-client.controlplane.endpoint.data", () -> EDC_URL); + } + + @Test + void shouldStartApplicationAndCollectSemanticModels() throws SchemaNotFoundException { + // Act + final AspectModels allAspectModels = semanticHubService.getAllAspectModels(); + + // Assert + assertThat(allAspectModels.models()).hasSize(78); + } + + @Test + void shouldStartJob() { + // Arrange + final RegisterJob request = RegisterJob.builder() + .key(PartChainIdentificationKey.builder() + .bpn("BPNTEST") + .globalAssetId("globalAssetId") + .build()) + .depth(2) + .aspects(List.of("SerialPart", "Batch", "SingleLevelBomAsBuilt")) + .collectAspects(true) + .lookupBPNs(true) + .direction(Direction.DOWNWARD) + .build(); + + // Act + final JobHandle jobHandle = irsService.registerItemJob(request); + + // Assert + assertThat(jobHandle.getId()).isNotNull(); + } + + public static class MinioConfigInitializer + implements ApplicationContextInitializer { + + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + final String hostAddress = minioContainer.getHostAddress(); + TestPropertySourceUtils.addInlinedPropertiesToEnvironment(applicationContext, + "blobstore.endpoint=http://" + hostAddress, "blobstore.accessKey=" + ACCESS_KEY, + "blobstore.secretKey=" + SECRET_KEY, "policystore.persistence.endpoint=http://" + hostAddress, + "policystore.persistence.accessKey=" + ACCESS_KEY, + "policystore.persistence.secretKey=" + SECRET_KEY, + "policystore.persistence.bucketName=policy-test"); + } + } + +} diff --git a/irs-api/src/test/java/org/eclipse/tractusx/irs/WireMockTestConfig.java b/irs-api/src/test/java/org/eclipse/tractusx/irs/WireMockTestConfig.java new file mode 100644 index 0000000000..4e7d14c48a --- /dev/null +++ b/irs-api/src/test/java/org/eclipse/tractusx/irs/WireMockTestConfig.java @@ -0,0 +1,83 @@ +/******************************************************************************** + * 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; + +import static org.eclipse.tractusx.irs.configuration.RestTemplateConfig.BPDM_REST_TEMPLATE; +import static org.eclipse.tractusx.irs.configuration.RestTemplateConfig.DISCOVERY_REST_TEMPLATE; +import static org.eclipse.tractusx.irs.configuration.RestTemplateConfig.DTR_REST_TEMPLATE; +import static org.eclipse.tractusx.irs.configuration.RestTemplateConfig.EDC_REST_TEMPLATE; +import static org.eclipse.tractusx.irs.configuration.RestTemplateConfig.NO_ERROR_REST_TEMPLATE; +import static org.eclipse.tractusx.irs.configuration.RestTemplateConfig.SEMHUB_REST_TEMPLATE; +import static org.eclipse.tractusx.irs.testing.wiremock.WireMockConfig.restTemplateProxy; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Profile; +import org.springframework.web.client.RestTemplate; + +@TestConfiguration +public class WireMockTestConfig { + public static final int HTTP_PORT = 8085; + private static final String PROXY_SERVER_HOST = "127.0.0.1"; + + @Primary + @Profile("integrationtest") + @Bean(DTR_REST_TEMPLATE) + RestTemplate dtrRestTemplate() { + return restTemplateProxy(PROXY_SERVER_HOST, HTTP_PORT); + } + + @Primary + @Profile("integrationtest") + @Bean(EDC_REST_TEMPLATE) + RestTemplate edcRestTemplate() { + return restTemplateProxy(PROXY_SERVER_HOST, HTTP_PORT); + } + + @Primary + @Profile("integrationtest") + @Bean(NO_ERROR_REST_TEMPLATE) + RestTemplate noErrorRestTemplate() { + return restTemplateProxy(PROXY_SERVER_HOST, HTTP_PORT); + } + + @Primary + @Profile("integrationtest") + @Bean(DISCOVERY_REST_TEMPLATE) + RestTemplate discoveryRestTemplate() { + return restTemplateProxy(PROXY_SERVER_HOST, HTTP_PORT); + } + + @Primary + @Profile("integrationtest") + @Bean(BPDM_REST_TEMPLATE) + RestTemplate bpdmRestTemplate() { + return restTemplateProxy(PROXY_SERVER_HOST, HTTP_PORT); + } + + @Primary + @Profile("integrationtest") + @Bean(SEMHUB_REST_TEMPLATE) + @Qualifier(SEMHUB_REST_TEMPLATE) + RestTemplate semanticHubRestTemplate() { + return restTemplateProxy(PROXY_SERVER_HOST, HTTP_PORT); + } +} diff --git a/irs-api/src/test/resources/__files/all-models-page-IT.json b/irs-api/src/test/resources/__files/all-models-page-IT.json new file mode 100644 index 0000000000..36d2bd6a4a --- /dev/null +++ b/irs-api/src/test/resources/__files/all-models-page-IT.json @@ -0,0 +1,554 @@ +{ + "items": [ + { + "urn": "urn:bamm:io.catenax.asset_tracker_links:1.0.0#AssetTrackerLinks", + "version": "1.0.0", + "name": "AssetTrackerLinks", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.battery.battery_pass:3.0.1#BatteryPass", + "version": "3.0.1", + "name": "BatteryPass", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.battery.product_description:1.0.1#ProductDescription", + "version": "1.0.1", + "name": "ProductDescription", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.bom_as_specified:1.0.0#BomAsSpecified", + "version": "1.0.0", + "name": "BomAsSpecified", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.bom_as_specified:1.0.1#BomAsSpecified", + "version": "1.0.1", + "name": "BomAsSpecified", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.certificate_of_destruction:1.0.1#CertificateOfDestruction", + "version": "1.0.1", + "name": "CertificateOfDestruction", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.classified_load_spectrum:1.0.0#ClassifiedLoadSpectrum", + "version": "1.0.0", + "name": "ClassifiedLoadSpectrum", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.decomissioning_certificate:1.0.0#DecommissioningCertificate", + "version": "1.0.0", + "name": "DecommissioningCertificate", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.eol_story:1.0.0#EndOfLife", + "version": "1.0.0", + "name": "EndOfLife", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.fleet.claim_data:1.0.0#ClaimData", + "version": "1.0.0", + "name": "ClaimData", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.fleet.diagnostic_data:1.0.0#DiagnosticData", + "version": "1.0.0", + "name": "DiagnosticData", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.idconversion:1.0.0#IdConversion", + "version": "1.0.0", + "name": "IdConversion", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.individual_asset_definition:1.0.0#IndividualAssetDefinition", + "version": "1.0.0", + "name": "IndividualAssetDefinition", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.iot_sensor_data:1.0.0#IotSensorData", + "version": "1.0.0", + "name": "IotSensorData", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.iot_sensor_device_definition:1.0.0#IotSensorDeviceDefinition", + "version": "1.0.0", + "name": "IotSensorDeviceDefinition", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.manufactured_parts_quality_information:1.0.0#ManufacturedPartsQualityInformation", + "version": "1.0.0", + "name": "ManufacturedPartsQualityInformation", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.manufacturing_capability:1.0.0#ManufacturingCapability", + "version": "1.0.0", + "name": "ManufacturingCapability", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.market_place_offer:1.2.0#MarketplaceOffer", + "version": "1.2.0", + "name": "MarketplaceOffer", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.market_place_offer:1.4.0#MarketplaceOffer", + "version": "1.4.0", + "name": "MarketplaceOffer", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.material_flow_simulation_result:1.0.0#MaterialFlowSimulationResult", + "version": "1.0.0", + "name": "MaterialFlowSimulationResult", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.material_for_homologation:1.0.0#MaterialForHomologation", + "version": "1.0.0", + "name": "MaterialForHomologation", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.part_as_specified:1.0.0#PartAsSpecified", + "version": "1.0.0", + "name": "PartAsSpecified", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.part_as_specified:1.0.1#PartAsSpecified", + "version": "1.0.1", + "name": "PartAsSpecified", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.part_as_specified:2.0.0#PartAsSpecified", + "version": "2.0.0", + "name": "PartAsSpecified", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.pcf:2.0.0#Pcf", + "version": "2.0.0", + "name": "Pcf", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.pcf:3.0.0#Pcf", + "version": "3.0.0", + "name": "Pcf", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.pcf:4.0.0#Pcf", + "version": "4.0.0", + "name": "Pcf", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.pcf:4.0.1#Pcf", + "version": "4.0.1", + "name": "Pcf", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.product_stock:1.0.0#ProductStock", + "version": "1.0.0", + "name": "ProductStock", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.quality_task:1.0.0#QualityTask", + "version": "1.0.0", + "name": "QualityTask", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.refurbishing_certificate:1.0.0#RefurbishingCertificate", + "version": "1.0.0", + "name": "RefurbishingCertificate", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.remanufacturing_certificate:1.0.0#RemanufacturingCertificate", + "version": "1.0.0", + "name": "RemanufacturingCertificate", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.return_request:1.1.1#ReturnRequest", + "version": "1.1.1", + "name": "ReturnRequest", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.return_request:1.1.2#ReturnRequest", + "version": "1.1.2", + "name": "ReturnRequest", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.reuse_certificate:1.0.0#ReuseCertificate", + "version": "1.0.0", + "name": "ReuseCertificate", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.rul:1.0.0#RemainingUsefulLife", + "version": "1.0.0", + "name": "RemainingUsefulLife", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.sealant.sealant_pass:1.0.0#SealantPass", + "version": "1.0.0", + "name": "SealantPass", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.shared.address_characteristic:1.0.1#AddressAspect", + "version": "1.0.1", + "name": "AddressAspect", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.shared.address_characteristic:2.0.0#AddressAspect", + "version": "2.0.0", + "name": "AddressAspect", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.shared.contact_information:1.0.0#ContactInformation", + "version": "1.0.0", + "name": "ContactInformation", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.shared.contact_information:2.0.0#ContactInformation", + "version": "2.0.0", + "name": "ContactInformation", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.shared.physical_dimension:1.0.0#PhysicalDimensions", + "version": "1.0.0", + "name": "PhysicalDimensions", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.shared.physical_dimension:2.0.0#PhysicalDimensions", + "version": "2.0.0", + "name": "PhysicalDimensions", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.shared.recycling_strategy_certificate:1.0.0#RecyclingStrategyCertificate", + "version": "1.0.0", + "name": "RecyclingStrategyCertificate", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.single_level_bom_as_specified:1.0.0#SingleLevelBomAsSpecified", + "version": "1.0.0", + "name": "SingleLevelBomAsSpecified", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.single_level_usage_as_planned:1.1.0#SingleLevelUsageAsPlanned", + "version": "1.1.0", + "name": "SingleLevelUsageAsPlanned", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.time_series_reference:1.0.0#TimeSeriesReference", + "version": "1.0.0", + "name": "TimeSeriesReference", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.traction_battery_code:1.0.0#TractionBatteryCode", + "version": "1.0.0", + "name": "TractionBatteryCode", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.user_estimated_loading:1.0.0#UserEstimatedLoading", + "version": "1.0.0", + "name": "UserEstimatedLoading", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.vehicle.product_description:1.0.0#ProductDescription", + "version": "1.0.0", + "name": "ProductDescription", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.vehicle.product_description:2.0.0#ProductDescription", + "version": "2.0.0", + "name": "ProductDescription", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.waste:1.0.0#Waste", + "version": "1.0.0", + "name": "Waste", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.week_based_capacity_group:1.0.1#WeekBasedCapacityGroup", + "version": "1.0.1", + "name": "WeekBasedCapacityGroup", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.week_based_material_demand:1.0.1#WeekBasedMaterialDemand", + "version": "1.0.1", + "name": "WeekBasedMaterialDemand", + "type": "BAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.essincident:2.0.0#EssIncident", + "version": "2.0.0", + "name": "EssIncident", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.fleet.vehicles:1.0.0#Vehicles", + "version": "1.0.0", + "name": "Vehicles", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.id_based_comment:1.0.0#IdBasedComment", + "version": "1.0.0", + "name": "IdBasedComment", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.id_based_request_for_update:1.0.0#IdBasedRequestForUpdate", + "version": "1.0.0", + "name": "IdBasedRequestForUpdate", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.id_based_request_for_update:2.0.0#IdBasedRequestForUpdate", + "version": "2.0.0", + "name": "IdBasedRequestForUpdate", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.manufacturing_capability:2.0.0#ManufacturingCapability", + "version": "2.0.0", + "name": "ManufacturingCapability", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.material_flow_simulation_result:2.0.0#MaterialFlowSimulationResultAspect", + "version": "2.0.0", + "name": "MaterialFlowSimulationResultAspect", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.parts_analyses:2.0.0#PartsAnalyses", + "version": "2.0.0", + "name": "PartsAnalyses", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.planned_production_output:1.0.0#PlannedProductionOutput", + "version": "1.0.0", + "name": "PlannedProductionOutput", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.secondary_material_content:1.0.0#SecondaryMaterialContent", + "version": "1.0.0", + "name": "SecondaryMaterialContent", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.address_characteristic:3.0.0#AddressAspect", + "version": "3.0.0", + "name": "AddressAspect", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.business_partner_number:1.0.0#BusinessPartnerNumber", + "version": "1.0.0", + "name": "BusinessPartnerNumber", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.contact_information:3.0.0#ContactInformation", + "version": "3.0.0", + "name": "ContactInformation", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.part_site_information_as_built:1.0.0#PartSiteInformationAsBuilt", + "version": "1.0.0", + "name": "PartSiteInformationAsBuilt", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.quantity:1.0.0#Quantity", + "version": "1.0.0", + "name": "Quantity", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.recycling_strategy_certificate:2.0.0#RecyclingStrategyCertificate", + "version": "2.0.0", + "name": "RecyclingStrategyCertificate", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.secondary_material_content:1.0.0#SecondaryMaterialContent", + "version": "1.0.0", + "name": "SecondaryMaterialContent", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.shopfloor_information_types:1.0.0#ShopfloorInformationTypes", + "version": "1.0.0", + "name": "ShopfloorInformationTypes", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.shared.uuid:1.0.0#Uuid", + "version": "1.0.0", + "name": "Uuid", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.single_level_bom_as_specified:2.0.0#SingleLevelBomAsSpecified", + "version": "2.0.0", + "name": "SingleLevelBomAsSpecified", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:samm:io.catenax.vehicle.product_description:3.0.0#ProductDescription", + "version": "3.0.0", + "name": "ProductDescription", + "type": "SAMM", + "status": "RELEASED" + }, + { + "urn": "urn:bamm:io.catenax.single_level_bom_as_built:1.0.0#SingleLevelBomAsBuilt", + "version": "1.0.0", + "name": "SingleLevelBomAsBuilt", + "type": "BAMM", + "status": "DEPRECATED" + }, + { + "urn": "urn:samm:io.catenax.batch:2.0.0#Batch", + "version": "2.0.0", + "name": "Batch", + "type": "SAMM", + "status": "DEPRECATED" + }, + { + "urn": "urn:bamm:io.catenax.serial_part:1.0.1#SerialPart", + "version": "1.0.1", + "name": "SerialPart", + "type": "BAMM", + "status": "DEPRECATED" + } + ], + "totalItems": 78, + "currentPage": 0, + "totalPages": 1, + "itemCount": 78 +} \ No newline at end of file