diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefault.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefault.java index 82fbb39e7..3e7d65834 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefault.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefault.java @@ -1,6 +1,7 @@ package it.pagopa.selfcare.onboarding.service; import com.microsoft.azure.functions.ExecutionContext; +import io.quarkus.runtime.util.ExceptionUtil; import it.pagopa.selfcare.onboarding.dto.ResendNotificationsFilters; import it.pagopa.selfcare.onboarding.entity.Onboarding; import jakarta.enterprise.context.ApplicationScoped; @@ -31,7 +32,11 @@ public ResendNotificationsFilters resendNotifications(ResendNotificationsFilters List onboardingsToResend = onboardingService.getOnboardingsToResend(filters, page, pageSize); context.getLogger().info(() -> String.format("Found: %s onboardings to send for page: %s ", onboardingsToResend.size(), page)); for (Onboarding onboarding : onboardingsToResend) { - notificationEventService.send(context, onboarding, null, filters.getNotificationEventTraceId()); + try { + notificationEventService.send(context, onboarding, null, filters.getNotificationEventTraceId()); + } catch (Exception e) { + context.getLogger().severe(() -> String.format("ERROR: Sending onboarding %s error: %s ", onboarding.getId(), ExceptionUtil.generateStackTrace(e))); + } } if(onboardingsToResend.isEmpty() || onboardingsToResend.size() < pageSize) { diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefault.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefault.java index 4a9d6a010..d1d6f6547 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefault.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefault.java @@ -87,34 +87,29 @@ public void send(ExecutionContext context, Onboarding onboarding, QueueEvent que return; } - try { - context.getLogger().info(() -> String.format("Getting product info for onboarding with ID %s and productId %s", onboarding.getId(), onboarding.getProductId())); - Product product = productService.getProduct(onboarding.getProductId()); - if (product.getConsumers() == null || product.getConsumers().isEmpty()) { - context.getLogger().warning(() -> String.format("Node consumers is null or empty for product with ID %s", onboarding.getProductId())); - return; - } + context.getLogger().info(() -> String.format("Getting product info for onboarding with ID %s and productId %s", onboarding.getId(), onboarding.getProductId())); + Product product = productService.getProduct(onboarding.getProductId()); + if (product.getConsumers() == null || product.getConsumers().isEmpty()) { + context.getLogger().warning(() -> String.format("Node consumers is null or empty for product with ID %s", onboarding.getProductId())); + return; + } - if(Objects.isNull(queueEvent)) { - queueEvent = queueEventExaminer.determineEventType(onboarding); - } + if(Objects.isNull(queueEvent)) { + queueEvent = queueEventExaminer.determineEventType(onboarding); + } - context.getLogger().info(() -> String.format("Retrieving institution having ID %s", onboarding.getInstitution().getId())); - InstitutionResponse institution = institutionApi.retrieveInstitutionByIdUsingGET(onboarding.getInstitution().getId()); + context.getLogger().info(() -> String.format("Retrieving institution having ID %s", onboarding.getInstitution().getId())); + InstitutionResponse institution = institutionApi.retrieveInstitutionByIdUsingGET(onboarding.getInstitution().getId()); - Token token = tokenRepository.findByOnboardingId(onboarding.getId()).orElse(null); - NotificationsResources notificationsResources = new NotificationsResources(onboarding, institution, token, queueEvent); - for (String consumer : product.getConsumers()) { - NotificationConfig.Consumer consumerConfig = notificationConfig.consumers().get(consumer.toLowerCase()); - prepareAndSendNotification(context, product, consumerConfig, notificationsResources, notificationEventTraceId); - } - } catch (Exception e) { - context.getLogger().severe(String.format("Error sending notification for onboarding with ID %s %s", onboarding.getId(), Arrays.toString(e.getStackTrace()))); - telemetryClient.trackEvent(EVENT_ONBOARDING_FN_NAME, onboardingEventFailureMap(onboarding, e, notificationEventTraceId), Map.of(EVENT_ONBOARDING_INSTTITUTION_FN_FAILURE, 1D)); + Token token = tokenRepository.findByOnboardingId(onboarding.getId()).orElse(null); + NotificationsResources notificationsResources = new NotificationsResources(onboarding, institution, token, queueEvent); + for (String consumer : product.getConsumers()) { + NotificationConfig.Consumer consumerConfig = notificationConfig.consumers().get(consumer.toLowerCase()); + prepareAndSendNotification(context, product, consumerConfig, notificationsResources, notificationEventTraceId); } } - private void prepareAndSendNotification(ExecutionContext context, Product product, NotificationConfig.Consumer consumer, NotificationsResources notificationsResources, String notificationEventTraceId) throws JsonProcessingException { + private void prepareAndSendNotification(ExecutionContext context, Product product, NotificationConfig.Consumer consumer, NotificationsResources notificationsResources, String notificationEventTraceId) { NotificationBuilder notificationBuilder = notificationBuilderFactory.create(consumer); if (notificationBuilder.shouldSendNotification(notificationsResources.getOnboarding(), notificationsResources.getInstitution())) { NotificationToSend notificationToSend = notificationBuilder.buildNotificationToSend(notificationsResources.getOnboarding(), notificationsResources.getToken(), notificationsResources.getInstitution(), notificationsResources.getQueueEvent()); @@ -125,19 +120,22 @@ private void prepareAndSendNotification(ExecutionContext context, Product produc } } - private void sendNotification(ExecutionContext context, String topic, NotificationToSend notificationToSend, String notificationEventTraceId) throws JsonProcessingException { - String message = mapper.writeValueAsString(notificationToSend); - context.getLogger().info(() -> String.format("Sending notification on topic: %s with message: %s", topic, message)); - + private void sendNotification(ExecutionContext context, String topic, NotificationToSend notificationToSend, String notificationEventTraceId) { + String message = null; try { - eventHubRestClient.sendMessage(topic, message); - telemetryClient.trackEvent(EVENT_ONBOARDING_FN_NAME, notificationEventMap(notificationToSend, topic, notificationEventTraceId), Map.of(EVENT_ONBOARDING_INSTTITUTION_FN_SUCCESS, 1D)); - } catch (Exception e) { - throw new NotificationException(e.getMessage()); + message = mapper.writeValueAsString(notificationToSend); + } catch (JsonProcessingException e) { + throw new NotificationException("Notification cannot be serialized"); + } finally { + String finalMessage = message; + context.getLogger().info(() -> String.format("Sending notification on topic: %s with message: %s", topic, finalMessage)); } + + eventHubRestClient.sendMessage(topic, message); + telemetryClient.trackEvent(EVENT_ONBOARDING_FN_NAME, notificationEventMap(notificationToSend, topic, notificationEventTraceId), Map.of(EVENT_ONBOARDING_INSTTITUTION_FN_SUCCESS, 1D)); } - private void sendTestEnvProductsNotification(ExecutionContext context, Product product, String topic, NotificationToSend notificationToSend, String notificationEventTraceId) throws JsonProcessingException { + private void sendTestEnvProductsNotification(ExecutionContext context, Product product, String topic, NotificationToSend notificationToSend, String notificationEventTraceId) { context.getLogger().info(() -> String.format("Starting sendTestEnvProductsNotification with testEnv %s", product.getTestEnvProductIds())); if (product.getTestEnvProductIds() != null) { for (String testEnvProductId : product.getTestEnvProductIds()) { diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/BaseNotificationBuilder.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/BaseNotificationBuilder.java index f5eb720eb..454d5fdab 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/BaseNotificationBuilder.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/BaseNotificationBuilder.java @@ -153,18 +153,13 @@ private PaymentServiceProvider toSetPaymentServiceProvider(PaymentServiceProvide @Override public void retrieveAndSetGeographicData(InstitutionToNotify institution) { - try { - InstitutionResource institutionProxyInfo = proxyRegistryInstitutionApi.findInstitutionUsingGET(institution.getTaxCode(), null, null); - institution.setIstatCode(institutionProxyInfo.getIstatCode()); - institution.setCategory(institutionProxyInfo.getCategory()); - GeographicTaxonomyResource geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(institutionProxyInfo.getIstatCode()); - institution.setCounty(geographicTaxonomies.getProvinceAbbreviation()); - institution.setCountry(geographicTaxonomies.getCountryAbbreviation()); - institution.setCity(geographicTaxonomies.getDesc().replace(DESCRIPTION_TO_REPLACE_REGEX, "")); - } catch (Exception e) { - log.warn("Error while searching institution {} on IPA, {} ", institution.getTaxCode(), e.getMessage()); - institution.setIstatCode(null); - } + InstitutionResource institutionProxyInfo = proxyRegistryInstitutionApi.findInstitutionUsingGET(institution.getTaxCode(), null, null); + institution.setIstatCode(institutionProxyInfo.getIstatCode()); + institution.setCategory(institutionProxyInfo.getCategory()); + GeographicTaxonomyResource geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(institutionProxyInfo.getIstatCode()); + institution.setCounty(geographicTaxonomies.getProvinceAbbreviation()); + institution.setCountry(geographicTaxonomies.getCountryAbbreviation()); + institution.setCity(geographicTaxonomies.getDesc().replace(DESCRIPTION_TO_REPLACE_REGEX, "")); } @Override diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilder.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilder.java index ce908ea97..e73d36383 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilder.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilder.java @@ -80,40 +80,35 @@ public InstitutionToNotify retrieveInstitution(InstitutionResponse institution) } @Override public void retrieveAndSetGeographicData(InstitutionToNotify institutionToNotify) { - try { - GeographicTaxonomyResource geographicTaxonomies; - if (institutionToNotify.getSubUnitType() != null) { - switch (Objects.requireNonNull(institutionToNotify.getSubUnitType())) { - case "UO" -> { - UOResource organizationUnit = proxyRegistryUoApi.findByUnicodeUsingGET1(institutionToNotify.getSubUnitCode(), null); - institutionToNotify.setIstatCode(organizationUnit.getCodiceComuneISTAT()); - geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(organizationUnit.getCodiceComuneISTAT()); - } - case "AOO" -> { - AOOResource homogeneousOrganizationalArea = proxyRegistryAooApi.findByUnicodeUsingGET(institutionToNotify.getSubUnitCode(), null); - institutionToNotify.setIstatCode(homogeneousOrganizationalArea.getCodiceComuneISTAT()); - geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(homogeneousOrganizationalArea.getCodiceComuneISTAT()); - } - default -> { - InstitutionResource proxyInfo = proxyRegistryInstitutionApi.findInstitutionUsingGET(institutionToNotify.getTaxCode(), null, null); - institutionToNotify.setIstatCode(proxyInfo.getIstatCode()); - geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(proxyInfo.getIstatCode()); - } + GeographicTaxonomyResource geographicTaxonomies; + if (institutionToNotify.getSubUnitType() != null) { + switch (Objects.requireNonNull(institutionToNotify.getSubUnitType())) { + case "UO" -> { + UOResource organizationUnit = proxyRegistryUoApi.findByUnicodeUsingGET1(institutionToNotify.getSubUnitCode(), null); + institutionToNotify.setIstatCode(organizationUnit.getCodiceComuneISTAT()); + geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(organizationUnit.getCodiceComuneISTAT()); + } + case "AOO" -> { + AOOResource homogeneousOrganizationalArea = proxyRegistryAooApi.findByUnicodeUsingGET(institutionToNotify.getSubUnitCode(), null); + institutionToNotify.setIstatCode(homogeneousOrganizationalArea.getCodiceComuneISTAT()); + geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(homogeneousOrganizationalArea.getCodiceComuneISTAT()); + } + default -> { + InstitutionResource proxyInfo = proxyRegistryInstitutionApi.findInstitutionUsingGET(institutionToNotify.getTaxCode(), null, null); + institutionToNotify.setIstatCode(proxyInfo.getIstatCode()); + geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(proxyInfo.getIstatCode()); } - } else { - InstitutionResource proxyInfo = proxyRegistryInstitutionApi.findInstitutionUsingGET(institutionToNotify.getTaxCode(), null, null); - institutionToNotify.setIstatCode(proxyInfo.getIstatCode()); - geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(proxyInfo.getIstatCode()); } + } else { + InstitutionResource proxyInfo = proxyRegistryInstitutionApi.findInstitutionUsingGET(institutionToNotify.getTaxCode(), null, null); + institutionToNotify.setIstatCode(proxyInfo.getIstatCode()); + geographicTaxonomies = geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(proxyInfo.getIstatCode()); + } - if (geographicTaxonomies != null) { - institutionToNotify.setCounty(geographicTaxonomies.getProvinceAbbreviation()); - institutionToNotify.setCountry(geographicTaxonomies.getCountryAbbreviation()); - institutionToNotify.setCity(geographicTaxonomies.getDesc().replace(DESCRIPTION_TO_REPLACE_REGEX, "")); - } - } catch (Exception e) { - log.warn("Error while searching institution {} on IPA, {} ", institutionToNotify.getDescription(), e.getMessage()); - institutionToNotify.setIstatCode(null); + if (geographicTaxonomies != null) { + institutionToNotify.setCounty(geographicTaxonomies.getProvinceAbbreviation()); + institutionToNotify.setCountry(geographicTaxonomies.getCountryAbbreviation()); + institutionToNotify.setCity(geographicTaxonomies.getDesc().replace(DESCRIPTION_TO_REPLACE_REGEX, "")); } } @Override diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefaultTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefaultTest.java index c47bd402c..e6b4f1b7b 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefaultTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventResenderServiceDefaultTest.java @@ -5,11 +5,13 @@ import io.quarkus.test.junit.QuarkusTest; import it.pagopa.selfcare.onboarding.dto.ResendNotificationsFilters; import it.pagopa.selfcare.onboarding.entity.Onboarding; +import it.pagopa.selfcare.onboarding.exception.NotificationException; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; +import java.util.logging.Logger; import static it.pagopa.selfcare.onboarding.TestUtils.getMockedContext; import static org.junit.jupiter.api.Assertions.*; @@ -64,6 +66,25 @@ void resendNotificationsEndsIncrementingPageIfIsWorkingOnIntermediatePage() { assertEquals(1, resendNotificationsFilters.getPage()); } + @Test + void resendNotificationsActivityException() { + ExecutionContext context = mock(ExecutionContext.class); + doReturn(Logger.getGlobal()).when(context).getLogger(); + + doThrow(new NotificationException("Error")).when(notificationEventService).send(any(), any(), any(), any()); + + List onboardings = new ArrayList<>(); + onboardings.add(new Onboarding()); + when(onboardingService.getOnboardingsToResend(any(), anyInt(), anyInt())).thenReturn(onboardings); + + ResendNotificationsFilters resendNotificationsFilters = new ResendNotificationsFilters(); + resendNotificationsFilters.setProductId("prod-pagopa"); + + ResendNotificationsFilters nextFilter = notificationEventResenderServiceDefault.resendNotifications(resendNotificationsFilters, context); + + assertNull(nextFilter); + } + private List mockOnboardingList(int size) { List onboardings = new ArrayList<>(); for (int i = 0; i < size; i++) { diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefaultTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefaultTest.java index 4e1dd424f..afda1a9fe 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefaultTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/NotificationEventServiceDefaultTest.java @@ -1,5 +1,8 @@ package it.pagopa.selfcare.onboarding.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.microsoft.applicationinsights.TelemetryClient; import com.microsoft.azure.functions.ExecutionContext; import io.quarkus.test.InjectMock; import io.quarkus.test.junit.QuarkusTest; @@ -21,6 +24,7 @@ import jakarta.inject.Inject; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import org.openapi.quarkus.core_json.api.InstitutionApi; import org.openapi.quarkus.core_json.model.InstitutionResponse; @@ -29,6 +33,7 @@ import java.util.Optional; import java.util.logging.Logger; +import static it.pagopa.selfcare.onboarding.TestUtils.getMockedContext; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; @@ -36,7 +41,7 @@ public class NotificationEventServiceDefaultTest { @Inject - NotificationEventServiceDefault messageServiceDefault; + NotificationEventServiceDefault notificationServiceDefault; @InjectMock ProductService productService; @@ -70,7 +75,7 @@ void sendMessage() { ExecutionContext context = mock(ExecutionContext.class); doReturn(Logger.getGlobal()).when(context).getLogger(); doNothing().when(eventHubRestClient).sendMessage(anyString(), anyString()); - messageServiceDefault.send(context, onboarding, QueueEvent.ADD); + notificationServiceDefault.send(context, onboarding, QueueEvent.ADD); verify(eventHubRestClient, times(3)) .sendMessage(anyString(), anyString()); } @@ -87,7 +92,7 @@ void sendMessageWithoutQueueEvent() { doReturn(Logger.getGlobal()).when(context).getLogger(); doNothing().when(eventHubRestClient).sendMessage(anyString(), anyString()); when(queueEventExaminer.determineEventType(any())).thenReturn(QueueEvent.ADD); - messageServiceDefault.send(context, onboarding, null); + notificationServiceDefault.send(context, onboarding, null); verify(eventHubRestClient, times(3)) .sendMessage(anyString(), anyString()); } @@ -111,7 +116,7 @@ void sendMessageWithoutToken() { ExecutionContext context = mock(ExecutionContext.class); doReturn(Logger.getGlobal()).when(context).getLogger(); doNothing().when(eventHubRestClient).sendMessage(anyString(), anyString()); - messageServiceDefault.send(context, onboarding, QueueEvent.ADD); + notificationServiceDefault.send(context, onboarding, QueueEvent.ADD); verify(eventHubRestClient, times(3)) .sendMessage(anyString(), anyString()); } @@ -127,7 +132,7 @@ void sendMessageDoesntSendNotificationIfFilterDoesntAllow() { ExecutionContext context = mock(ExecutionContext.class); doReturn(Logger.getGlobal()).when(context).getLogger(); doNothing().when(eventHubRestClient).sendMessage(anyString(), anyString()); - messageServiceDefault.send(context, onboarding, QueueEvent.ADD); + notificationServiceDefault.send(context, onboarding, QueueEvent.ADD); verifyNoInteractions(eventHubRestClient); } @@ -143,7 +148,7 @@ void sendMessageWithTestEnvProducts() { ExecutionContext context = mock(ExecutionContext.class); doReturn(Logger.getGlobal()).when(context).getLogger(); doNothing().when(eventHubRestClient).sendMessage(anyString(), anyString()); - messageServiceDefault.send(context, onboarding, QueueEvent.ADD); + notificationServiceDefault.send(context, onboarding, QueueEvent.ADD); verify(eventHubRestClient, times(9)) .sendMessage(anyString(), anyString()); } @@ -160,7 +165,7 @@ void sendMessageWithError() { .when(eventHubRestClient).sendMessage(anyString(), anyString()); ExecutionContext context = mock(ExecutionContext.class); doReturn(Logger.getGlobal()).when(context).getLogger(); - assertDoesNotThrow(() -> messageServiceDefault.send(context, onboarding, QueueEvent.ADD)); + assertThrows(NotificationException.class, () -> notificationServiceDefault.send(context, onboarding, QueueEvent.ADD)); verify(eventHubRestClient, times(1)) .sendMessage(anyString(), anyString()); } @@ -173,7 +178,7 @@ void sendMessageNullConsumers() { when(productService.getProduct(any())).thenReturn(test); ExecutionContext context = mock(ExecutionContext.class); doReturn(Logger.getGlobal()).when(context).getLogger(); - messageServiceDefault.send(context, onboarding, QueueEvent.ADD); + notificationServiceDefault.send(context, onboarding, QueueEvent.ADD); verifyNoInteractions(eventHubRestClient); } @@ -185,7 +190,7 @@ void sendMessageWontProceedsWhenOnboardingIsNotReferredToInstitution() { ExecutionContext context = mock(ExecutionContext.class); doReturn(Logger.getGlobal()).when(context).getLogger(); - messageServiceDefault.send(context, onboarding, QueueEvent.ADD); + notificationServiceDefault.send(context, onboarding, QueueEvent.ADD); verifyNoInteractions(productService); verifyNoInteractions(tokenRepository); verifyNoInteractions(institutionApi); @@ -285,6 +290,33 @@ void notificationEventMapRootParentTest() { assertEquals(properties.get("billing.TaxCodeInvoicing"), "456"); } + @Test + void sendNotificationsJsonError() { + final Onboarding onboarding = createOnboarding(); + final Product product = createProduct(); + when(productService.getProduct(any())).thenReturn(product); + + when(tokenRepository.findByOnboardingId(any())).thenReturn(Optional.of(new Token())); + when(institutionApi.retrieveInstitutionByIdUsingGET(any())).thenReturn(new InstitutionResponse()); + + BaseNotificationBuilder notificationMapper = mock(BaseNotificationBuilder.class); + when(notificationBuilderFactory.create(any())).thenReturn(notificationMapper); + + NotificationToSend mockNotificationToSend = mock(NotificationToSend.class); + when(mockNotificationToSend.toString()).thenReturn(mockNotificationToSend.getClass().getName()); + + when(notificationMapper.buildNotificationToSend(any(), any(), any(), any())).thenReturn(mockNotificationToSend); + when(notificationMapper.shouldSendNotification(any(), any())).thenReturn(true); + + ExecutionContext context = mock(ExecutionContext.class); + doReturn(Logger.getGlobal()).when(context).getLogger(); + doNothing().when(eventHubRestClient).sendMessage(anyString(), anyString()); + TelemetryClient telemetryClient = mock(TelemetryClient.class); + doNothing().when(telemetryClient).trackEvent(anyString(), any(), any()); + + assertThrows(NotificationException.class, () -> notificationServiceDefault.send(context, onboarding, QueueEvent.ADD)); + } + private Onboarding createOnboarding() { Onboarding onboarding = new Onboarding(); onboarding.setWorkflowType(WorkflowType.CONTRACT_REGISTRATION); diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilderTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilderTest.java index 2c499aa82..5e6e6aa42 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilderTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/utils/SapNotificationBuilderTest.java @@ -263,21 +263,7 @@ void toNotificationToSendForEcWhenPartyRegistryThrowsException() { when(registryProxyInstitutionsApi.findInstitutionUsingGET(any(), any(), any())) .thenThrow(new RuntimeException("Error")); - NotificationToSend notification = sapNotificationBuilder.buildNotificationToSend(onboarding, token, institution, QueueEvent.ADD); - - assertNotNull(notification); - assertNull(notification.getClosedAt()); - assertEquals("ACTIVE", notification.getState()); - assertNotEquals(onboarding.getId(), notification.getId()); - assertEquals(onboarding.getActivatedAt(), notification.getCreatedAt().toLocalDateTime()); - assertEquals(onboarding.getActivatedAt(), notification.getUpdatedAt().toLocalDateTime()); - assertNull(notification.getBilling().getTaxCodeInvoicing()); - assertNull(notification.getBilling().isPublicServices()); - assertNull(notification.getNotificationType()); - assertEquals(NotificationType.ADD_INSTITUTE, notification.getType()); - assertNull(notification.getBilling().getTaxCodeInvoicing()); - assertEquals("taxCodeInvoicing", notification.getInstitution().getTaxCode()); - assertNull(notification.getInstitution().getIstatCode()); + assertThrows(RuntimeException.class, () -> sapNotificationBuilder.buildNotificationToSend(onboarding, token, institution, QueueEvent.ADD)); } @Test