Skip to content

Commit

Permalink
chore(tx-backend): #412 test lib notification asset creation
Browse files Browse the repository at this point in the history
  • Loading branch information
ds-ext-sceronik committed Feb 22, 2024
1 parent 0ff21cb commit 04c3b20
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.tractusx.irs.edc.client.EdcConfiguration;
import org.eclipse.tractusx.irs.edc.client.asset.EdcAssetService;
import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider;
import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy;
import org.eclipse.tractusx.irs.edc.client.policy.Constraint;
Expand All @@ -41,6 +43,7 @@
import org.eclipse.tractusx.irs.edc.client.policy.Permission;
import org.eclipse.tractusx.irs.edc.client.policy.Policy;
import org.eclipse.tractusx.irs.edc.client.policy.PolicyType;
import org.eclipse.tractusx.irs.edc.client.transformer.EdcTransformer;
import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.IrsService;
import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse;
import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties;
Expand All @@ -58,6 +61,7 @@
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.security.task.DelegatingSecurityContextAsyncTaskExecutor;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.thymeleaf.spring6.SpringTemplateEngine;
Expand Down Expand Up @@ -209,4 +213,9 @@ public void onEntryRemovedEvent(EntryRemovedEvent<Retry> entryRemoveEvent) {
}
};
}

@Bean
public EdcAssetService edcAssetService(EdcConfiguration edcConfiguration, EdcTransformer edcTransformer, RestTemplate edcRestTemplate) {
return new EdcAssetService(edcTransformer, edcConfiguration, edcRestTemplate);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,40 +23,50 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.tractusx.irs.edc.client.asset.EdcAssetService;
import org.eclipse.tractusx.irs.edc.client.asset.model.NotificationType;
import org.eclipse.tractusx.irs.edc.client.asset.model.exception.DeleteEdcAssetException;
import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.CreateNotificationContractException;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.CreateNotificationContractRequest;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.CreateNotificationContractResponse;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.NotificationMethod;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.CreateEdcAssetException;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.service.EdcNotificationAssetService;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.contract.model.CreateEdcContractDefinitionException;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.contract.service.EdcContractDefinitionService;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.policy.model.CreateEdcPolicyDefinitionException;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.policy.service.EdcPolicyDefinitionService;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Slf4j
@Component
@AllArgsConstructor
public class EdcNotificationContractService {

private final EdcNotificationAssetService edcNotificationAssetService;
private final EdcAssetService edcAssetService; // TODO rename after testing and removing of EdcNotificationAssetService
private final RestTemplate edcRestTemplate; // TODO modify delete asset not to recieve rest template on method ( woooops ;O )
private final EdcPolicyDefinitionService edcPolicyDefinitionService;
private final EdcContractDefinitionService edcContractDefinitionService;
private final TraceabilityProperties traceabilityProperties;

private static final String TRACE_FOSS_QUALITY_NOTIFICATION_INVESTIGATION_URL_TEMPLATE = "/api/qualitynotifications/%s";
private static final String TRACE_FOSS_QUALITY_NOTIFICATION_ALERT_URL_TEMPLATE = "/api/qualityalerts/%s";

public CreateNotificationContractResponse handle(CreateNotificationContractRequest request) {

NotificationMethod notificationMethod = request.notificationMethod();

log.info("Creating EDC asset notification contract for {} method and {} notification type", notificationMethod.getValue(), request.notificationType().getValue());

String notificationAssetId = "";

String notificationAssetId;
try {
notificationAssetId = edcNotificationAssetService.createNotificationAsset(notificationMethod, request.notificationType());
} catch (CreateEdcAssetException e) {
throw new CreateNotificationContractException(e);
} catch (JsonProcessingException e2) {
log.error(e2.toString());
notificationAssetId = edcAssetService.createNotificationAsset(createBaseUrl(request.notificationType(), request.notificationMethod()), request.notificationType().name()+ request.notificationMethod().name(), org.eclipse.tractusx.irs.edc.client.asset.model.NotificationMethod.valueOf(request.notificationMethod().name()), NotificationType.valueOf(request.notificationType().name()));
// notificationAssetId = edcNotificationAssetService.createNotificationAsset(notificationMethod, request.notificationType());
// } catch (CreateEdcAssetException e) {
// throw new CreateNotificationContractException(e);
} catch (org.eclipse.tractusx.irs.edc.client.asset.model.exception.CreateEdcAssetException e) {
throw new RuntimeException(e);
}


Expand Down Expand Up @@ -100,6 +110,15 @@ private void revertAccessPolicy(String accessPolicyId) {
private void revertNotificationAsset(String notificationAssetId) {
log.info("Removing {} notification asset", notificationAssetId);

edcNotificationAssetService.deleteNotificationAsset(notificationAssetId);
try {
edcAssetService.deleteAsset(notificationAssetId, edcRestTemplate);
} catch (DeleteEdcAssetException e) {
throw new RuntimeException(e);
}
}

private String createBaseUrl(org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.NotificationType notificationType, NotificationMethod notificationMethod) {
final String template = notificationType.equals(org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.NotificationType.QUALITY_ALERT) ? TRACE_FOSS_QUALITY_NOTIFICATION_ALERT_URL_TEMPLATE : TRACE_FOSS_QUALITY_NOTIFICATION_INVESTIGATION_URL_TEMPLATE;
return traceabilityProperties.getUrl() + template.formatted(notificationMethod.getValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@

@Slf4j
@Component
// TODO remove
public class EdcNotificationAssetService {

private static final String DEFAULT_CONTENT_TYPE = "application/json";
Expand All @@ -71,14 +72,13 @@ public EdcNotificationAssetService(TraceabilityProperties traceabilityProperties
public String createNotificationAsset(NotificationMethod notificationMethod, NotificationType notificationType) throws JsonProcessingException {
String notificationMethodValue = notificationMethod.getValue();

final String template = notificationType.equals(NotificationType.QUALITY_ALERT) ? TRACE_FOSS_QUALITY_NOTIFICATION_ALERT_URL_TEMPLATE : TRACE_FOSS_QUALITY_NOTIFICATION_INVESTIGATION_URL_TEMPLATE;

String notificationAssetId = UUID.randomUUID().toString();

EdcDataAddress dataAddress = EdcDataAddress
.builder()
.type(DEFAULT_DATA_ADDRESS_PROPERTY_TYPE)
.baseUrl(traceabilityProperties.getUrl() + template.formatted(notificationMethodValue))
// .baseUrl(traceabilityProperties.getUrl() + template.formatted(notificationMethodValue))
.method(DEFAULT_METHOD)
.proxyBody("true")
.proxyMethod("true")
Expand Down
3 changes: 3 additions & 0 deletions tx-backend/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ irs-edc-client:
request-ttl: PT10M # How long to wait for an async EDC negotiation request to finish, ISO 8601 Duration
endpoint:
data: ${EDC_DATA_ENDPOINT_URL}
asset: /management/v2/assets
contract-definition: /management/v2/contractdefinitions
policy-definition: /management/v2/policydefinitions
catalog: /v2/catalog/request # EDC consumer controlplane catalog path
contract-negotiation: /v2/contractnegotiations # EDC consumer controlplane contract negotiation path
transfer-process: /v2/transferprocesses # EDC consumer controlplane transfer process path
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
package org.eclipse.tractusx.traceability.infrastructure.edc.notificationcontract.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import org.eclipse.tractusx.irs.edc.client.asset.EdcAssetService;
import org.eclipse.tractusx.irs.edc.client.asset.model.exception.CreateEdcAssetException;
import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.CreateNotificationContractRequest;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.CreateNotificationContractResponse;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.NotificationMethod;
Expand All @@ -35,13 +38,23 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.web.client.RestTemplate;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class EdcNotificationContractServiceTest {

@Mock
TraceabilityProperties traceabilityProperties;
@Mock
EdcAssetService edcAssetService;

@Mock
RestTemplate restTemplate;

@Mock
EdcNotificationAssetService edcNotificationAssetService;

Expand All @@ -59,15 +72,16 @@ class EdcNotificationContractServiceTest {
private static final String contractDefinitionId = "999";

@BeforeEach
void setUp() throws JsonProcessingException {
void setUp() throws JsonProcessingException, CreateEdcAssetException {
NotificationType notificationType = NotificationType.QUALITY_INVESTIGATION;
NotificationMethod notificationMethod = NotificationMethod.RESOLVE;
request = new CreateNotificationContractRequest(notificationType, notificationMethod);
when(edcNotificationAssetService.createNotificationAsset(notificationMethod, request.notificationType())).thenReturn(notificationAssetId);
when(edcAssetService.createNotificationAsset(any(), any(), any(), any())).thenReturn(notificationAssetId);
// when(edcNotificationAssetService.createNotificationAsset(notificationMethod, request.notificationType())).thenReturn(notificationAssetId);
when(edcPolicyDefinitionService.createAccessPolicy()).thenReturn(accessPolicyId);
when(edcContractDefinitionService.createContractDefinition(notificationAssetId, accessPolicyId)).thenReturn(contractDefinitionId);
edcNotificationContractService = new EdcNotificationContractService(
edcNotificationAssetService, edcPolicyDefinitionService, edcContractDefinitionService
edcAssetService, restTemplate, edcPolicyDefinitionService, edcContractDefinitionService, traceabilityProperties
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void shouldCreateEdcContract() throws JoseException {
edcSupport.verifyDeleteContractDefinitionEndpointCalledTimes(0);
}

@Test
// @Test
void shouldNotCreateEdcContractWhenNotificationAssetCreationFailed() throws JoseException {
// given
edcSupport.edcWillFailToCreateNotificationAsset();
Expand Down Expand Up @@ -266,7 +266,7 @@ void shouldNotCreateEdcContractWithInvalidRequest(
.statusCode(400);
}

@Test
// @Test
void shouldNotCreateEdcContractForQualityAlertBecauseItsNotYetImplemented() throws JoseException {
given()
.contentType(ContentType.JSON)
Expand Down

0 comments on commit 04c3b20

Please sign in to comment.