diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenController.java b/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenController.java index e4f3067..5d007e8 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenController.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenController.java @@ -58,4 +58,7 @@ Mono> getCitizenConsentStatus(@PathVariable @P @GetMapping("/{tppId}") Mono>> getCitizenEnabled(@PathVariable @Pattern(regexp = TPP_STRUCTURE_REGEX, message = "Invalid fiscal code format") String fiscalCode); + @DeleteMapping("/test/{fiscalCode}") + Mono> deleteCitizenConsent(@PathVariable @Pattern(regexp = FISCAL_CODE_STRUCTURE_REGEX, message = "Invalid fiscal code format") String fiscalCode); + } diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerImpl.java b/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerImpl.java index 6c9eca2..0bfa443 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerImpl.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerImpl.java @@ -64,6 +64,12 @@ public Mono>> getCitizenEnabled(String tp .map(ResponseEntity::ok); } + @Override + public Mono> deleteCitizenConsent(String fiscalCode) { + return citizenService.deleteCitizenConsent(fiscalCode) + .map(ResponseEntity::ok); + } + @Override public Mono> bloomFilterSearch(String fiscalCode) { return Mono.fromCallable(() -> diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenService.java b/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenService.java index af088dc..f9dc8cd 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenService.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenService.java @@ -14,4 +14,5 @@ public interface CitizenService { Mono getCitizenConsentsList(String fiscalCode); Mono getCitizenConsentsListEnabled(String fiscalCode); Mono> getCitizenEnabled(String tppId); + Mono deleteCitizenConsent(String fiscalCode); } diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceImpl.java b/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceImpl.java index f67cda4..aebd6ed 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceImpl.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceImpl.java @@ -190,4 +190,15 @@ public Mono> getCitizenEnabled(String tppId) { .map(mapperToDTO::map) .collectList(); } + + @Override + public Mono deleteCitizenConsent(String fiscalCode) { + return citizenRepository.findByFiscalCode(fiscalCode) + .switchIfEmpty(Mono.error(exceptionMap.throwException + (ExceptionName.CITIZEN_NOT_ONBOARDED, "Citizen consent not founded during delete process "))) + .flatMap(citizenConsent -> + citizenRepository.deleteById(citizenConsent.getId()) + .then(Mono.just(mapperToDTO.map(citizenConsent))) + ); + } } diff --git a/src/test/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerTest.java b/src/test/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerTest.java index 26b00c3..d4c01af 100644 --- a/src/test/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerTest.java +++ b/src/test/java/it/gov/pagopa/onboarding/citizen/controller/CitizenControllerTest.java @@ -205,4 +205,19 @@ void getCitizenEnabled_ShouldReturnListOfCitizens() { } + @Test + void deleteCitizenConsent_OK() { + CitizenConsentDTO mockConsent = CitizenConsentDTOFaker.mockInstance(true); + Mockito.when(citizenService.deleteCitizenConsent(FISCAL_CODE)) + .thenReturn(Mono.just(mockConsent)); + webClient.delete() + .uri("/emd/citizen/test/{fiscalCode}", FISCAL_CODE) + .accept(MediaType.APPLICATION_JSON) + .exchange() + .expectStatus().isOk() + .expectBodyList(CitizenConsentDTO.class) + .value(response -> Assertions.assertEquals(1, response.size())); + } + + } diff --git a/src/test/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceTest.java b/src/test/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceTest.java index 3407cd1..75a8ab3 100644 --- a/src/test/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceTest.java +++ b/src/test/java/it/gov/pagopa/onboarding/citizen/service/CitizenServiceTest.java @@ -337,5 +337,35 @@ void getCitizenEnabled_Empty() { }) .verifyComplete(); } + + + @Test + void deleteCitizenConsent_OK() { + CitizenConsent citizenConsent = CitizenConsent.builder() + .id(FISCAL_CODE) + .fiscalCode(FISCAL_CODE) + .consents(new HashMap<>()) + .build(); + + when(citizenRepository.findByFiscalCode(FISCAL_CODE)).thenReturn(Mono.just(citizenConsent)); + when(citizenRepository.deleteById(FISCAL_CODE)).thenReturn(Mono.empty()); + StepVerifier.create(citizenService.deleteCitizenConsent(FISCAL_CODE)) + .assertNext(response -> { + assertNotNull(response); + assertEquals(0, response.getConsents().size()); + }) + .verifyComplete(); + } + + + @Test + void deleteCitizenConsent_NotOnboarded() { + when(citizenRepository.findByFiscalCode(FISCAL_CODE)).thenReturn(Mono.empty()); + + StepVerifier.create(citizenService.deleteCitizenConsent(FISCAL_CODE)) + .expectErrorMatches(throwable -> throwable instanceof ClientExceptionWithBody && + "Citizen consent not founded during delete process ".equals(throwable.getMessage())) + .verify(); + } }