diff --git a/src/main/java/it/gov/pagopa/common/utils/Utils.java b/src/main/java/it/gov/pagopa/common/utils/Utils.java index 28bfd53..bc0a27c 100644 --- a/src/main/java/it/gov/pagopa/common/utils/Utils.java +++ b/src/main/java/it/gov/pagopa/common/utils/Utils.java @@ -1,4 +1,5 @@ package it.gov.pagopa.common.utils; + import it.gov.pagopa.common.web.exception.EmdEncryptionException; import lombok.extern.slf4j.Slf4j; @@ -9,7 +10,6 @@ @Slf4j public class Utils { - private Utils(){} public static String createSHA256(String fiscalCode) { try { @@ -25,14 +25,14 @@ public static String createSHA256(String fiscalCode) { } return hexString.toString(); } catch (NoSuchAlgorithmException e) { - log.error("Something went wrong creating SHA256"); + log.info("Something went wrong creating SHA256"); throw new EmdEncryptionException("Something went wrong creating SHA256",true,e); } } public static String inputSanify(String message){ if (message != null) - return message.replaceAll("[\\r\\n]", ""); - return "[EMD][WARNING] Null log"; + return message.replaceAll("[\\r\\n]", " "); + return "[EMD][WARNING] Null log"; } } diff --git a/src/main/java/it/gov/pagopa/common/web/exception/EmdEncryptionException.java b/src/main/java/it/gov/pagopa/common/web/exception/EmdEncryptionException.java index c846862..99efea0 100644 --- a/src/main/java/it/gov/pagopa/common/web/exception/EmdEncryptionException.java +++ b/src/main/java/it/gov/pagopa/common/web/exception/EmdEncryptionException.java @@ -1,12 +1,12 @@ package it.gov.pagopa.common.web.exception; -import it.gov.pagopa.common.utils.CommonConstants.ExceptionCode; +import it.gov.pagopa.common.utils.CommonConstants; public class EmdEncryptionException extends ServiceException { public EmdEncryptionException(String message, boolean printStackTrace, Throwable ex) { - this(ExceptionCode.GENERIC_ERROR, message, printStackTrace, ex); + this(CommonConstants.ExceptionCode.GENERIC_ERROR, message, printStackTrace, ex); } public EmdEncryptionException(String code, String message, boolean printStackTrace, Throwable ex) { super(code, message,null, printStackTrace, ex); diff --git a/src/main/java/it/gov/pagopa/common/web/exception/ErrorManager.java b/src/main/java/it/gov/pagopa/common/web/exception/ErrorManager.java index 7b37f7a..437672b 100644 --- a/src/main/java/it/gov/pagopa/common/web/exception/ErrorManager.java +++ b/src/main/java/it/gov/pagopa/common/web/exception/ErrorManager.java @@ -5,7 +5,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.lang.Nullable; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -23,9 +22,9 @@ public ErrorManager(@Nullable ErrorDTO defaultErrorDTO) { } @ExceptionHandler(RuntimeException.class) - protected ResponseEntity handleException(RuntimeException error, ServerHttpRequest request) { + protected ResponseEntity handleException(RuntimeException error) { - logClientException(error, request); + logClientException(error); if(error instanceof ClientExceptionNoBody clientExceptionNoBody){ return ResponseEntity.status(clientExceptionNoBody.getHttpStatus()).build(); @@ -46,14 +45,14 @@ protected ResponseEntity handleException(RuntimeException error, Serve .body(errorDTO); } } - public static void logClientException(RuntimeException error, ServerHttpRequest request) { + public static void logClientException(RuntimeException error) { Throwable unwrappedException = error.getCause() instanceof ServiceException ? error.getCause() : error; String clientExceptionMessage = ""; if(error instanceof ClientException clientException) { - clientExceptionMessage = ": HttpStatus %s - %s%s".formatted( + clientExceptionMessage = "HttpStatus %s - %s%s".formatted( clientException.getHttpStatus(), (clientException instanceof ClientExceptionWithBody clientExceptionWithBody) ? clientExceptionWithBody.getCode() + ": " : "", clientException.getMessage() @@ -61,17 +60,10 @@ public static void logClientException(RuntimeException error, ServerHttpRequest } if(!(error instanceof ClientException clientException) || clientException.isPrintStackTrace() || unwrappedException.getCause() != null){ - log.error("Something went wrong handling request {}{}", getRequestDetails(request), clientExceptionMessage, unwrappedException); + log.error("Something went wrong : {}", clientExceptionMessage, unwrappedException); } else { - log.info("A {} occurred handling request {}{} at {}", - unwrappedException.getClass().getSimpleName() , - getRequestDetails(request), - clientExceptionMessage, - unwrappedException.getStackTrace().length > 0 ? unwrappedException.getStackTrace()[0] : "UNKNOWN"); + log.info("{}",clientExceptionMessage); } } - public static String getRequestDetails(ServerHttpRequest request) { - return "%s %s".formatted(request.getMethod(), request.getURI()); - } } diff --git a/src/main/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandler.java b/src/main/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandler.java index 4763292..0940802 100644 --- a/src/main/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandler.java +++ b/src/main/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandler.java @@ -7,7 +7,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -27,11 +26,11 @@ public ServiceExceptionHandler(ErrorManager errorManager, Map handleException(ServiceException error, ServerHttpRequest request) { + protected ResponseEntity handleException(ServiceException error) { if (null != error.getPayload()) { - return handleBodyProvidedException(error, request); + return handleBodyProvidedException(error); } - return errorManager.handleException(transcodeException(error), request); + return errorManager.handleException(transcodeException(error)); } private ClientException transcodeException(ServiceException error) { @@ -45,9 +44,9 @@ private ClientException transcodeException(ServiceException error) { return new ClientExceptionWithBody(httpStatus, error.getCode(), error.getMessage(), error.isPrintStackTrace(), error); } - private ResponseEntity handleBodyProvidedException(ServiceException error, ServerHttpRequest request) { + private ResponseEntity handleBodyProvidedException(ServiceException error) { ClientException clientException = transcodeException(error); - ErrorManager.logClientException(clientException, request); + ErrorManager.logClientException(clientException); return ResponseEntity.status(clientException.getHttpStatus()) .contentType(MediaType.APPLICATION_JSON) diff --git a/src/main/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandler.java b/src/main/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandler.java index b7873ff..7450d23 100644 --- a/src/main/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandler.java +++ b/src/main/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandler.java @@ -1,11 +1,9 @@ package it.gov.pagopa.common.web.exception; - import it.gov.pagopa.common.web.dto.ErrorDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; -import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.lang.Nullable; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -13,6 +11,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.support.WebExchangeBindException; import org.springframework.web.reactive.resource.NoResourceFoundException; +import org.springframework.web.server.MethodNotAllowedException; import org.springframework.web.server.MissingRequestValueException; import java.util.Optional; @@ -33,42 +32,47 @@ public ValidationExceptionHandler(@Nullable ErrorDTO templateValidationErrorDTO) @ExceptionHandler(WebExchangeBindException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorDTO handleWebExchangeBindException( - WebExchangeBindException ex, ServerHttpRequest request) { + WebExchangeBindException e) { - String message = ex.getBindingResult().getAllErrors().stream() + String message = e.getBindingResult().getAllErrors().stream() .map(error -> { String fieldName = ((FieldError) error).getField(); String errorMessage = error.getDefaultMessage(); return String.format("[%s]: %s", fieldName, errorMessage); }).collect(Collectors.joining("; ")); - log.info("A WebExchangeBindException occurred handling request {}: HttpStatus 400 - {}", - ErrorManager.getRequestDetails(request), message); - log.debug("Something went wrong while validating http request", ex); + log.info("A WebExchangeBindException occurred : HttpStatus 400 - {}", message); + log.debug("Something went wrong while validating http request", e); return new ErrorDTO(templateValidationErrorDTO.getCode(), message); } @ExceptionHandler(MissingRequestValueException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorDTO handleMissingRequestValueException(MissingRequestValueException e, ServerHttpRequest request) { - - log.info("A MissingRequestValueException occurred handling request {}: HttpStatus 400 - {}", - ErrorManager.getRequestDetails(request), e.getMessage()); + public ErrorDTO handleMissingRequestValueException(MissingRequestValueException e) { + log.info("A MissingRequestValueException occurred : HttpStatus 400 - Something went wrong due to a missing request value"); log.debug("Something went wrong due to a missing request value", e); - return new ErrorDTO(templateValidationErrorDTO.getCode(), templateValidationErrorDTO.getMessage()); + return new ErrorDTO(templateValidationErrorDTO.getCode(), "Something went wrong due to a missing request value"); } - @ExceptionHandler(NoResourceFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) - public ErrorDTO handleNoResourceFoundException(NoResourceFoundException e, ServerHttpRequest request) { + public ErrorDTO handleNoResourceFoundException(NoResourceFoundException e) { - log.info("A NoResourceFoundException occurred handling request {}: HttpStatus 400 - {}", - ErrorManager.getRequestDetails(request), e.getMessage()); - log.debug("Something went wrong due to a missing request value", e); + log.info("A NoResourceFoundException occurred : HttpStatus 400 - Something went wrong due to a missing static resource"); + log.debug("Something went wrong due to a missing static resource", e); + + return new ErrorDTO(templateValidationErrorDTO.getCode(), "Something went wrong due to a missing static resource"); + } + + @ExceptionHandler(MethodNotAllowedException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ErrorDTO handleMethodNotAllowedException(MethodNotAllowedException e) { + + log.info("A MethodNotAllowedException occurred : HttpStatus 405 - Request is not supported"); + log.debug("Something went wrong due to a request not supported", e); - return new ErrorDTO(templateValidationErrorDTO.getCode(), templateValidationErrorDTO.getMessage()); + return new ErrorDTO(templateValidationErrorDTO.getCode(), "Request is not supported"); } diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/configuration/ExceptionMap.java b/src/main/java/it/gov/pagopa/onboarding/citizen/configuration/ExceptionMap.java index 141f65f..61cda9e 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/configuration/ExceptionMap.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/configuration/ExceptionMap.java @@ -1,37 +1,41 @@ package it.gov.pagopa.onboarding.citizen.configuration; +import it.gov.pagopa.common.web.exception.ClientException; import it.gov.pagopa.common.web.exception.ClientExceptionWithBody; -import it.gov.pagopa.onboarding.citizen.constants.OnboardingCitizenConstants; +import it.gov.pagopa.onboarding.citizen.constants.CitizenConstants; +import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; import java.util.HashMap; import java.util.Map; -import java.util.function.Supplier; +import java.util.function.Function; @Configuration +@Slf4j public class ExceptionMap { - private final Map> exMap = new HashMap<>(); + private final Map> exceptions = new HashMap<>(); public ExceptionMap() { - exMap.put(OnboardingCitizenConstants.ExceptionName.CITIZEN_NOT_ONBOARDED, () -> + exceptions.put(CitizenConstants.ExceptionName.CITIZEN_NOT_ONBOARDED, message -> new ClientExceptionWithBody( HttpStatus.NOT_FOUND, - OnboardingCitizenConstants.ExceptionCode.CITIZEN_NOT_ONBOARDED, - OnboardingCitizenConstants.ExceptionMessage.CITIZEN_NOT_ONBOARDED + CitizenConstants.ExceptionCode.CITIZEN_NOT_ONBOARDED, + message ) ); - } - public RuntimeException getException(String exceptionKey) { - if (exMap.containsKey(exceptionKey)) { - return exMap.get(exceptionKey).get(); + public RuntimeException throwException(String exceptionKey, String message) { + if (exceptions.containsKey(exceptionKey)) { + return exceptions.get(exceptionKey).apply(message); } else { - throw new IllegalArgumentException(String.format("Exception Name Not Found: %s", exceptionKey)); + log.error("Exception Name Not Found: {}", exceptionKey); + return new RuntimeException(); } } } + diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/constants/OnboardingCitizenConstants.java b/src/main/java/it/gov/pagopa/onboarding/citizen/constants/CitizenConstants.java similarity index 90% rename from src/main/java/it/gov/pagopa/onboarding/citizen/constants/OnboardingCitizenConstants.java rename to src/main/java/it/gov/pagopa/onboarding/citizen/constants/CitizenConstants.java index 4ec7f3f..349f395 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/constants/OnboardingCitizenConstants.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/constants/CitizenConstants.java @@ -1,6 +1,6 @@ package it.gov.pagopa.onboarding.citizen.constants; -public class OnboardingCitizenConstants { +public class CitizenConstants { public static final class ExceptionCode { public static final String CITIZEN_NOT_ONBOARDED = "CITIZEN_NOT_ONBOARDED"; @@ -23,5 +23,5 @@ private ExceptionName() {} } - private OnboardingCitizenConstants() {} + private CitizenConstants() {} } diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/dto/CitizenConsentDTO.java b/src/main/java/it/gov/pagopa/onboarding/citizen/dto/CitizenConsentDTO.java index 9151702..c35fec5 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/dto/CitizenConsentDTO.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/dto/CitizenConsentDTO.java @@ -17,7 +17,6 @@ public class CitizenConsentDTO { private String hashedFiscalCode; private String tppId; private Boolean tppState; - private String userId; private LocalDateTime creationDate; private LocalDateTime lastUpdateDate; } diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/dto/mapper/CitizenConsentObjectToDTOMapper.java b/src/main/java/it/gov/pagopa/onboarding/citizen/dto/mapper/CitizenConsentObjectToDTOMapper.java index 885bf6f..fa68c7c 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/dto/mapper/CitizenConsentObjectToDTOMapper.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/dto/mapper/CitizenConsentObjectToDTOMapper.java @@ -12,8 +12,8 @@ public CitizenConsentDTO map(CitizenConsent citizenConsent){ return CitizenConsentDTO.builder() .tppState(citizenConsent.getTppState()) .tppId(citizenConsent.getTppId()) - .hashedFiscalCode(citizenConsent.getHashedFiscalCode()) - .userId(citizenConsent.getUserId()) + .creationDate(citizenConsent.getCreationDate()) + .lastUpdateDate(citizenConsent.getLastUpdateDate()) .build(); } } diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/model/CitizenConsent.java b/src/main/java/it/gov/pagopa/onboarding/citizen/model/CitizenConsent.java index 4c8657e..64ebd8e 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/model/CitizenConsent.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/model/CitizenConsent.java @@ -17,7 +17,6 @@ public class CitizenConsent { private String hashedFiscalCode; private String tppId; private Boolean tppState; - private String userId; private LocalDateTime creationDate; private LocalDateTime lastUpdateDate; diff --git a/src/main/java/it/gov/pagopa/onboarding/citizen/model/mapper/CitizenConsentDTOToObjectMapper.java b/src/main/java/it/gov/pagopa/onboarding/citizen/model/mapper/CitizenConsentDTOToObjectMapper.java index 195aebe..96caf6a 100644 --- a/src/main/java/it/gov/pagopa/onboarding/citizen/model/mapper/CitizenConsentDTOToObjectMapper.java +++ b/src/main/java/it/gov/pagopa/onboarding/citizen/model/mapper/CitizenConsentDTOToObjectMapper.java @@ -13,7 +13,6 @@ public CitizenConsent map(CitizenConsentDTO citizenConsentDTO){ .tppState(true) .tppId(citizenConsentDTO.getTppId()) .hashedFiscalCode(citizenConsentDTO.getHashedFiscalCode()) - .userId(citizenConsentDTO.getUserId()) .build(); } } 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 14e9875..51962a8 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 @@ -1,10 +1,10 @@ package it.gov.pagopa.onboarding.citizen.service; import it.gov.pagopa.common.utils.Utils; -import it.gov.pagopa.onboarding.citizen.constants.OnboardingCitizenConstants.ExceptionName; +import it.gov.pagopa.onboarding.citizen.configuration.ExceptionMap; +import it.gov.pagopa.onboarding.citizen.constants.CitizenConstants.ExceptionName; import it.gov.pagopa.onboarding.citizen.dto.CitizenConsentDTO; import it.gov.pagopa.onboarding.citizen.dto.mapper.CitizenConsentObjectToDTOMapper; -import it.gov.pagopa.onboarding.citizen.configuration.ExceptionMap; import it.gov.pagopa.onboarding.citizen.model.CitizenConsent; import it.gov.pagopa.onboarding.citizen.model.mapper.CitizenConsentDTOToObjectMapper; import it.gov.pagopa.onboarding.citizen.repository.CitizenRepository; @@ -35,12 +35,12 @@ public CitizenServiceImpl(CitizenRepository citizenRepository, CitizenConsentObj @Override public Mono createCitizenConsent(CitizenConsentDTO citizenConsentDTO) { - log.info("[EMD][CITIZEN][CREATE] Received message: {}",inputSanify(citizenConsentDTO.toString())); CitizenConsent citizenConsent = mapperToObject.map(citizenConsentDTO); String hashedFiscalCode = Utils.createSHA256(citizenConsent.getHashedFiscalCode()); citizenConsent.setHashedFiscalCode(hashedFiscalCode); citizenConsent.setCreationDate(LocalDateTime.now()); citizenConsent.setLastUpdateDate(LocalDateTime.now()); + log.info("[EMD-CITIZEN][CREATE] Received consent: {}",inputSanify(citizenConsent.toString())); return citizenRepository.save(citizenConsent) .map(mapperToDTO::map) .doOnSuccess(savedConsent -> log.info("[EMD][CREATE-CITIZEN-CONSENT] Created")); @@ -53,7 +53,8 @@ public Mono updateChannelState(String fiscalCode, String tppI log.info("[EMD][[CITIZEN][UPDATE-CHANNEL-STATE] Received hashedFiscalCode: {} and tppId: {} with state: {}" ,hashedFiscalCode, inputSanify(tppId), tppState); return citizenRepository.findByHashedFiscalCodeAndTppId(hashedFiscalCode, tppId) - .switchIfEmpty(Mono.error(exceptionMap.getException(ExceptionName.CITIZEN_NOT_ONBOARDED))) + .switchIfEmpty(Mono.error(exceptionMap.throwException + (ExceptionName.CITIZEN_NOT_ONBOARDED,"Citizen not founded during update state process"))) .flatMap(citizenConsent -> { citizenConsent.setTppState(tppState); citizenConsent.setLastUpdateDate(LocalDateTime.now()); @@ -66,18 +67,19 @@ public Mono updateChannelState(String fiscalCode, String tppI @Override public Mono getConsentStatus(String fiscalCode, String tppId) { String hashedFiscalCode = Utils.createSHA256(fiscalCode); - log.info("[EMD][CITIZEN][GET-CONSENT-STATUS] Received hashedFiscalCode: {} and tppId: {}",hashedFiscalCode,inputSanify(tppId)); + log.info("[EMD-CITIZEN][GET-CONSENT-STATUS] Received hashedFiscalCode: {} and tppId: {}",hashedFiscalCode,inputSanify(tppId)); return citizenRepository.findByHashedFiscalCodeAndTppId(hashedFiscalCode, tppId) - .switchIfEmpty(Mono.error(exceptionMap.getException(ExceptionName.CITIZEN_NOT_ONBOARDED))) + .switchIfEmpty(Mono.error(exceptionMap.throwException + (ExceptionName.CITIZEN_NOT_ONBOARDED,"Citizen not founded during get process "))) .map(mapperToDTO::map) - .doOnSuccess(consent -> log.info("[EMD][CITIZEN][GET-CONSENT-STATUS] Consent found:: {}",consent)); + .doOnSuccess(consent -> log.info("[EMD-CITIZEN][GET-CONSENT-STATUS] Consent found:: {}",consent)); } @Override public Mono> getListEnabledConsents(String fiscalCode) { String hashedFiscalCode = Utils.createSHA256(fiscalCode); - log.info("[EMD][CITIZEN][FIND-CITIZEN-CONSENTS-ENABLED] Received hashedFiscalCode: {}",hashedFiscalCode); + log.info("[EMD-CITIZEN][FIND-CITIZEN-CONSENTS-ENABLED] Received hashedFiscalCode: {}",hashedFiscalCode); return citizenRepository.findByHashedFiscalCodeAndTppStateTrue(hashedFiscalCode) .collectList() .map(consentList -> consentList.stream() @@ -91,13 +93,13 @@ public Mono> getListEnabledConsents(String fiscalCode) { @Override public Mono> getListAllConsents(String fiscalCode) { String hashedFiscalCode = Utils.createSHA256(fiscalCode); - log.info("[EMD][CITIZEN][FIND-ALL-CITIZEN-CONSENTS] Received hashedFiscalCode: {}",(hashedFiscalCode)); + log.info("[EMD-CITIZEN][FIND-ALL-CITIZEN-CONSENTS] Received hashedFiscalCode: {}",(hashedFiscalCode)); return citizenRepository.findByHashedFiscalCode(hashedFiscalCode) .collectList() .map(consentList -> consentList.stream() .map(mapperToDTO::map) .toList() ) - .doOnSuccess(consentList -> log.info("[EMD][CITIZEN][FIND-ALL-CITIZEN-CONSENTS] Consents found:: {}",consentList)); + .doOnSuccess(consentList -> log.info("[EMD-CITIZEN][FIND-ALL-CITIZEN-CONSENTS] Consents found:: {}",consentList)); } } diff --git a/src/test/java/it/gov/pagopa/common/utils/UtilsTest.java b/src/test/java/it/gov/pagopa/common/utils/UtilsTest.java index 3fa89a3..f2534a1 100644 --- a/src/test/java/it/gov/pagopa/common/utils/UtilsTest.java +++ b/src/test/java/it/gov/pagopa/common/utils/UtilsTest.java @@ -1,6 +1,7 @@ package it.gov.pagopa.common.utils; + import it.gov.pagopa.common.web.exception.EmdEncryptionException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/src/test/java/it/gov/pagopa/common/web/exception/ErrorManagerTest.java b/src/test/java/it/gov/pagopa/common/web/exception/ErrorManagerTest.java index 078708d..5e00799 100644 --- a/src/test/java/it/gov/pagopa/common/web/exception/ErrorManagerTest.java +++ b/src/test/java/it/gov/pagopa/common/web/exception/ErrorManagerTest.java @@ -75,7 +75,7 @@ void handleExceptionClientExceptionNoBody() { .expectStatus().isBadRequest(); checkStackTraceSuppressedLog(memoryAppender, - "A ClientExceptionNoBody occurred handling request GET /test: HttpStatus 400 BAD_REQUEST - NOTFOUND ClientExceptionNoBody at it.gov.pagopa.common.web.exception.ErrorManagerTest\\$TestController.testEndpoint\\(ErrorManagerTest.java:[0-9]+\\)"); + "HttpStatus 400 BAD_REQUEST - NOTFOUND ClientExceptionNoBody"); } @Test @@ -119,7 +119,7 @@ void handleExceptionClientExceptionTest() { .expectBody() .json(EXPECTED_GENERIC_ERROR); - checkStackTraceSuppressedLog(memoryAppender, "A ClientException occurred handling request GET /test: HttpStatus null - null at UNKNOWN"); + checkStackTraceSuppressedLog(memoryAppender, "HttpStatus null - null"); memoryAppender.reset(); Mockito.doThrow( @@ -134,7 +134,7 @@ void handleExceptionClientExceptionTest() { .expectBody() .json(EXPECTED_GENERIC_ERROR); - checkStackTraceSuppressedLog(memoryAppender, "A ClientException occurred handling request GET /test: HttpStatus 400 BAD_REQUEST - ClientException with httpStatus and message at it.gov.pagopa.common.web.exception.ErrorManagerTest\\$TestController.testEndpoint\\(ErrorManagerTest.java:[0-9]+\\)"); + checkStackTraceSuppressedLog(memoryAppender, "HttpStatus 400 BAD_REQUEST - ClientException with httpStatus and message"); memoryAppender.reset(); Mockito.doThrow(new ClientException(HttpStatus.BAD_REQUEST, @@ -150,7 +150,7 @@ void handleExceptionClientExceptionTest() { .json(EXPECTED_GENERIC_ERROR); checkLog(memoryAppender, - "Something went wrong handling request GET /test: HttpStatus 400 BAD_REQUEST - ClientException with httpStatus, message and throwable", + "Something went wrong : HttpStatus 400 BAD_REQUEST - ClientException with httpStatus, message and throwable", "it.gov.pagopa.common.web.exception.ClientException: ClientException with httpStatus, message and throwable", "it.gov.pagopa.common.web.exception.ErrorManagerTest$TestController.testEndpoint" ); diff --git a/src/test/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandlerTest.java b/src/test/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandlerTest.java index 0896c70..a37f4ae 100644 --- a/src/test/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandlerTest.java +++ b/src/test/java/it/gov/pagopa/common/web/exception/ServiceExceptionHandlerTest.java @@ -79,7 +79,7 @@ void testSimpleException(){ .expectBody() .json("{\"code\":\"DUMMY_CODE\",\"message\":\"DUMMY_MESSAGE\"}", false); - ErrorManagerTest.checkStackTraceSuppressedLog(memoryAppender, "A ServiceException occurred handling request GET /test: HttpStatus 500 INTERNAL_SERVER_ERROR - DUMMY_CODE: DUMMY_MESSAGE at it.gov.pagopa.common.web.exception.ServiceExceptionHandlerTest\\$TestController.test\\(ServiceExceptionHandlerTest.java:[0-9]+\\)"); + ErrorManagerTest.checkStackTraceSuppressedLog(memoryAppender, "HttpStatus 500 INTERNAL_SERVER_ERROR - DUMMY_CODE: DUMMY_MESSAGE"); } @@ -95,7 +95,7 @@ void testCustomBodyException(){ .json("{\"stringCode\":\"RESPONSE\",\"longCode\":0}", false); ErrorManagerTest.checkLog(memoryAppender, - "Something went wrong handling request GET /test/customBody: HttpStatus 500 INTERNAL_SERVER_ERROR - DUMMY_CODE: DUMMY_MESSAGE", + "Something went wrong : HttpStatus 500 INTERNAL_SERVER_ERROR - DUMMY_CODE: DUMMY_MESSAGE", "it.gov.pagopa.common.web.exception.ServiceException: DUMMY_MESSAGE", "it.gov.pagopa.common.web.exception.ServiceExceptionHandlerTest$TestController.testCustomBody" diff --git a/src/test/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandlerTest.java b/src/test/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandlerTest.java index 3236568..745f8cf 100644 --- a/src/test/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandlerTest.java +++ b/src/test/java/it/gov/pagopa/common/web/exception/ValidationExceptionHandlerTest.java @@ -68,7 +68,7 @@ void testHandleValueNotValidException() { }); } @Test - void testHandleHeaderNotValidException() { + void testHandleMissingRequestValueException() { String invalidJson = "{}"; webTestClient.put() @@ -83,7 +83,45 @@ void testHandleHeaderNotValidException() { ErrorDTO errorDTO = response.getResponseBody(); assertThat(errorDTO).isNotNull(); assertThat(errorDTO.getCode()).isEqualTo("INVALID_REQUEST"); - assertThat(errorDTO.getMessage()).isEqualTo("Invalid request"); + assertThat(errorDTO.getMessage()).isEqualTo("Something went wrong due to a missing request value"); + + }); + } + + @Test + void testHandleNoResourceFoundException() { + String invalidJson = "{}"; + + webTestClient.put() + .uri("/wrongPath") + .contentType(MediaType.APPLICATION_JSON) + .bodyValue(new ValidationDTO("data")) + .exchange() + .expectStatus().isNotFound() + .expectBody(ErrorDTO.class) + + .consumeWith(response -> { + ErrorDTO errorDTO = response.getResponseBody(); + assertThat(errorDTO).isNotNull(); + assertThat(errorDTO.getCode()).isEqualTo("INVALID_REQUEST"); + assertThat(errorDTO.getMessage()).isEqualTo("Something went wrong due to a missing static resource"); + + }); + } + + @Test + void testHandleMethodNotAllowedException() { + + webTestClient.get() + .uri("/test") + .exchange() + .expectStatus().is4xxClientError() + .expectBody(ErrorDTO.class) + .consumeWith(response -> { + ErrorDTO errorDTO = response.getResponseBody(); + assertThat(errorDTO).isNotNull(); + assertThat(errorDTO.getCode()).isEqualTo("INVALID_REQUEST"); + assertThat(errorDTO.getMessage()).isEqualTo("Request is not supported"); }); } 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 d19116e..f49c259 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 @@ -1,6 +1,5 @@ package it.gov.pagopa.onboarding.citizen.controller; -import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.onboarding.citizen.dto.CitizenConsentDTO; import it.gov.pagopa.onboarding.citizen.faker.CitizenConsentDTOFaker; import it.gov.pagopa.onboarding.citizen.service.CitizenServiceImpl; @@ -25,8 +24,7 @@ class CitizenControllerTest { @Autowired private WebTestClient webClient; - @Autowired - private ObjectMapper objectMapper; + private static final String FISCAL_CODE = "fiscalCode"; private static final String TPP_ID = "tppId"; diff --git a/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentDTOFaker.java b/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentDTOFaker.java index f913681..2c639cc 100644 --- a/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentDTOFaker.java +++ b/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentDTOFaker.java @@ -10,9 +10,8 @@ public class CitizenConsentDTOFaker { private CitizenConsentDTOFaker(){} public static CitizenConsentDTO mockInstance(Boolean bias) { return CitizenConsentDTO.builder() - .tppId("channelId") + .tppId("tppId") .tppState(bias) - .userId("userId") .hashedFiscalCode("hashedFiscalCode") .creationDate(LocalDateTime.now()) .lastUpdateDate(LocalDateTime.now()) diff --git a/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentFaker.java b/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentFaker.java index fa233ec..195afad 100644 --- a/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentFaker.java +++ b/src/test/java/it/gov/pagopa/onboarding/citizen/faker/CitizenConsentFaker.java @@ -12,7 +12,6 @@ public static CitizenConsent mockInstance(Boolean bias) { return CitizenConsent.builder() .tppId("tppId") .tppState(bias) - .userId("userId") .hashedFiscalCode("hashedFiscalCode") .creationDate(LocalDateTime.now()) .lastUpdateDate(LocalDateTime.now()) 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 f6ee817..ad99409 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 @@ -45,27 +45,24 @@ class CitizenServiceTest { CitizenRepository citizenRepository; @Autowired - CitizenConsentDTOToObjectMapper mapperToObject; + CitizenConsentObjectToDTOMapper dtoMapper; private static final String FISCAL_CODE = "fiscalCode"; private static final String HASHED_FISCAL_CODE = Utils.createSHA256(FISCAL_CODE); private static final String TPP_ID = "tppId"; private static final boolean TPP_STATE = true; private static final CitizenConsent CITIZEN_CONSENT = CitizenConsentFaker.mockInstance(true); - + private static final CitizenConsentDTO CITIZEN_CONSENT_DTO = CitizenConsentDTOFaker.mockInstance(true); @Test void createCitizenConsent_Ok() { - CitizenConsentDTO citizenConsentDTO = CitizenConsentDTOFaker.mockInstance(true); - CitizenConsent citizenConsent = mapperToObject.map(citizenConsentDTO); + CitizenConsentDTO citizenConsentDTO = dtoMapper.map(CITIZEN_CONSENT); Mockito.when(citizenRepository.save(Mockito.any())) - .thenReturn(Mono.just(citizenConsent)); + .thenReturn(Mono.just(CITIZEN_CONSENT)); - CitizenConsentDTO response = citizenService.createCitizenConsent(citizenConsentDTO).block(); + CitizenConsentDTO response = citizenService.createCitizenConsent(CITIZEN_CONSENT_DTO).block(); assertNotNull(response); - citizenConsentDTO.setLastUpdateDate(response.getLastUpdateDate()); - citizenConsentDTO.setCreationDate(response.getCreationDate()); assertEquals(citizenConsentDTO, response); } @@ -85,7 +82,6 @@ void createCitizenConsent_Ko_EmdEncryptError() { @Test void updateChannelState_Ok() { - Mockito.when(citizenRepository.findByHashedFiscalCodeAndTppId(HASHED_FISCAL_CODE, TPP_ID)) .thenReturn(Mono.just(CITIZEN_CONSENT)); @@ -107,12 +103,12 @@ void updateChannelState_Ko_CitizenNotOnboarded() { Executable executable = () -> citizenService.updateChannelState(FISCAL_CODE, TPP_ID, true).block(); ClientExceptionWithBody exception = assertThrows(ClientExceptionWithBody.class, executable); - assertEquals("CITIZEN_NOT_ONBOARDED", exception.getMessage()); + assertEquals("Citizen not founded during update state process", exception.getMessage()); } @Test void getConsentStatus_Ok() { - + Mockito.when(citizenRepository.findByHashedFiscalCodeAndTppId(HASHED_FISCAL_CODE, TPP_ID)) .thenReturn(Mono.just(CITIZEN_CONSENT)); @@ -130,12 +126,12 @@ void getConsentStatus_Ko_CitizenNotOnboarded() { Executable executable = () -> citizenService.getConsentStatus(FISCAL_CODE, TPP_ID).block(); ClientExceptionWithBody exception = assertThrows(ClientExceptionWithBody.class, executable); - assertEquals("CITIZEN_NOT_ONBOARDED", exception.getMessage()); + assertEquals("Citizen not founded during get process ", exception.getMessage()); } @Test void getListEnabledConsents_Ok() { - + Mockito.when(citizenRepository.findByHashedFiscalCodeAndTppStateTrue(HASHED_FISCAL_CODE)) .thenReturn(Flux.just(CITIZEN_CONSENT)); @@ -147,8 +143,6 @@ void getListEnabledConsents_Ok() { @Test void getListAllConsents_Ok() { - - Mockito.when(citizenRepository.findByHashedFiscalCode(HASHED_FISCAL_CODE)) .thenReturn(Flux.just(CITIZEN_CONSENT));