From 29c6d94fa9cce04c865b88f1f1b492d9181781f3 Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Fri, 6 Sep 2024 09:59:23 +0200 Subject: [PATCH] OZG-6239 sendMessage: Use validator --- .../xta/test/app/mapper/ExceptionMapper.java | 12 ++ .../xta/test/app/model/XtaConstants.java | 2 +- .../xta/test/app/server/SendXtaPortImpl.java | 114 ++++++++---------- .../test/app/service/XtaMessageService.java | 3 +- .../test/app/validation/RequestValidator.java | 6 +- .../test/app/mapper/ExceptionMapperTest.java | 94 +++++++++------ .../test/app/server/SendXtaPortImplTest.java | 102 +++++++++------- 7 files changed, 184 insertions(+), 149 deletions(-) diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java index 6f0763f..afcf35c 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java +++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java @@ -9,6 +9,8 @@ import org.mapstruct.ReportingPolicy; import genv3.de.xoev.transport.xta.x211.CodeFehlernummer; import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException; import genv3.de.xoev.transport.xta.x211.InvalidMessageIDExceptionType; +import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; +import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidExceptionType; import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemExceptionType; @@ -37,6 +39,16 @@ public interface ExceptionMapper { @Mapping(target = "errorCode", expression = "java( mapCodeFehlernummer(code, name) )") XTAWSTechnicalProblemExceptionType mapXTAWSTechnicalProblemExceptionType(String code, String name); + default ParameterIsNotValidException createParameterIsNotValidException(String message) { + return new ParameterIsNotValidException( + message, + mapParameterIsNotValidExceptionType(ERROR_CODE_PARAMETER_MISSING, ERROR_CODE_PARAMETER_MISSING_DESCRIPTION) + ); + } + + @Mapping(target = "errorCode", expression = "java( mapCodeFehlernummer(code, name) )") + ParameterIsNotValidExceptionType mapParameterIsNotValidExceptionType(String code, String name); + @Mapping(target = "listURI", constant = ERROR_CODE_LIST_URN) @Mapping(target = "listVersionID", constant = ERROR_CODE_LIST_VERSION) CodeFehlernummer mapCodeFehlernummer(String code, String name); diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java index 7aa512d..ce88d0e 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java +++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java @@ -71,7 +71,7 @@ public class XtaConstants { public static final String ERROR_CODE_LIST_URN = "urn:de:xta:webservice:codeliste:fehlernummer"; public static final String ERROR_CODE_LIST_VERSION = "2.0.0"; public static final String ERROR_CODE_PARAMETER_MISSING = "9020"; - public static final String ERROR_CODE_PARAMETER_MISSING_DESCRIPTION = "Keine Parameter vorhanden"; + public static final String ERROR_CODE_PARAMETER_MISSING_DESCRIPTION = "Notwendige Parameter nicht vorhanden"; public static final String ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM = "9030"; public static final String ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM_DESCRIPTION = "Interner Fehler beim XTA-Server bzw. XTA-Dienstleister"; public static final String ERROR_CODE_MESSAGE_ID_UNKNOWN = "9070"; diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java index f2be49e..81832a0 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java +++ b/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java @@ -1,19 +1,23 @@ package de.ozgcloud.xta.test.app.server; -import static de.ozgcloud.xta.test.app.model.XtaConstants.*; - -import de.ozgcloud.xta.test.app.mapper.RequestMapper; +import jakarta.jws.WebService; -import genv3.de.xoev.transport.xta.x211.*; -import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; -import lombok.RequiredArgsConstructor; import org.apache.cxf.annotations.SchemaValidation; import org.springframework.stereotype.Component; -import de.ozgcloud.xta.test.app.service.ParameterValidatorService; +import de.ozgcloud.xta.test.app.mapper.ExceptionMapper; +import de.ozgcloud.xta.test.app.mapper.RequestMapper; import de.ozgcloud.xta.test.app.service.XtaMessageService; - -import jakarta.jws.WebService; +import de.ozgcloud.xta.test.app.validation.RequestValidator; +import genv3.de.xoev.transport.xta.x211.GenericContentContainer; +import genv3.de.xoev.transport.xta.x211.MessageSchemaViolationException; +import genv3.de.xoev.transport.xta.x211.MessageVirusDetectionException; +import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; +import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; +import genv3.de.xoev.transport.xta.x211.SendPortType; +import genv3.de.xoev.transport.xta.x211.SyncAsyncException; +import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @WebService(serviceName = "XTAService", portName = "SendXtaPort", targetNamespace = "http://xoev.de/transport/xta/211", wsdlLocation = "classpath:wsdl/XTA.wsdl", endpointInterface = "genv3.de.xoev.transport.xta.x211.SendPortType") @@ -23,63 +27,47 @@ import lombok.extern.log4j.Log4j2; @Log4j2 public class SendXtaPortImpl implements SendPortType { - private final ParameterValidatorService validator; - - private final RequestMapper requestMapper; - private final XtaMessageService xtaMessageService; - - /* - * (non-Javadoc) - * @see genv3.de.xoev.transport.xta.x211.SendPortType#sendMessage(genv3.de.xoev.transport.xta.x211. - * GenericContentContainer genericContainer, genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData messageMetaData, - * genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType x509TokenContainer)* - */ - @Override - public void sendMessage(final GenericContentContainer genericContainer, - final genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData messageMetaData, - final genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType x509TokenContainer) - throws SyncAsyncException, XTAWSTechnicalProblemException, MessageVirusDetectionException, - MessageSchemaViolationException, PermissionDeniedException, ParameterIsNotValidException { - log.info("Executing operation sendMessage"); - if (messageMetaData == null) { - log.error("Die erforderliche Header Variable 'messageMetaData' wurde nicht gefunden"); - return; - } - validateMessageId(messageMetaData); - validator.checkMessage(genericContainer); + private final RequestValidator validator; - xtaMessageService.sendMessage(requestMapper.mapXtaMessageFromGenericContentContainer(genericContainer, messageMetaData)); - } + private final RequestMapper requestMapper; + private final ExceptionMapper exceptionMapper; + private final XtaMessageService xtaMessageService; - public void validateMessageId(MessageMetaData messageMetaData) throws ParameterIsNotValidException { - if (messageMetaData.getMsgIdentification() == null || messageMetaData.getMsgIdentification().getMessageID() == null) { - throw buildParameterIsNotValidException("Message ID is missing"); - } - } + /* + * (non-Javadoc) + * @see genv3.de.xoev.transport.xta.x211.SendPortType#sendMessage(genv3.de.xoev.transport.xta.x211. + * GenericContentContainer genericContainer, genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData messageMetaData, + * genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType x509TokenContainer)* + */ + @Override + public void sendMessage(final GenericContentContainer genericContainer, + final genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData messageMetaData, + final genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType x509TokenContainer) + throws SyncAsyncException, XTAWSTechnicalProblemException, MessageVirusDetectionException, + MessageSchemaViolationException, PermissionDeniedException, ParameterIsNotValidException { + log.info("Executing operation sendMessage"); + var request = requestMapper.mapXtaMessageFromGenericContentContainer(genericContainer, messageMetaData); + validator.validate(request); - /* - * (non-Javadoc) - * @see genv3.de.xoev.transport.xta.x211.SendPortType#sendMessageSync(genv3.de.xoev.transport.xta.x211. - * GenericContentContainer genericContainer, genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData messageMetaData, - * genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType x509TokenContainer)* - */ - @Override - public void sendMessageSync(final jakarta.xml.ws.Holder<GenericContentContainer> genericContainer, - final jakarta.xml.ws.Holder<genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData> messageMetaData, - final jakarta.xml.ws.Holder<genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType> x509TokenContainer) - throws SyncAsyncException, XTAWSTechnicalProblemException, MessageVirusDetectionException, - MessageSchemaViolationException, PermissionDeniedException, ParameterIsNotValidException { - log.info("Executing operation sendMessageSync"); - throw new UnsupportedOperationException("sendMessageSync is not supported"); - } + if (!xtaMessageService.sendMessage(request)) { + throw exceptionMapper.createParameterIsNotValidException("Failed to send message"); + } + } - private ParameterIsNotValidException buildParameterIsNotValidException(String message) { - var faultInfo = new ParameterIsNotValidExceptionType(); - faultInfo.getErrorCode().setCode(ERROR_CODE_PARAMETER_MISSING); - faultInfo.getErrorCode().setName(ERROR_CODE_PARAMETER_MISSING_DESCRIPTION); - faultInfo.getErrorCode().setListURI(ERROR_CODE_LIST_URN); - faultInfo.getErrorCode().setListVersionID(ERROR_CODE_LIST_VERSION); - return new ParameterIsNotValidException(message, faultInfo); - } + /* + * (non-Javadoc) + * @see genv3.de.xoev.transport.xta.x211.SendPortType#sendMessageSync(genv3.de.xoev.transport.xta.x211. + * GenericContentContainer genericContainer, genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData messageMetaData, + * genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType x509TokenContainer)* + */ + @Override + public void sendMessageSync(final jakarta.xml.ws.Holder<GenericContentContainer> genericContainer, + final jakarta.xml.ws.Holder<genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData> messageMetaData, + final jakarta.xml.ws.Holder<genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType> x509TokenContainer) + throws SyncAsyncException, XTAWSTechnicalProblemException, MessageVirusDetectionException, + MessageSchemaViolationException, PermissionDeniedException, ParameterIsNotValidException { + log.info("Executing operation sendMessageSync"); + throw new UnsupportedOperationException("sendMessageSync is not supported"); + } } diff --git a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java index f6fa061..eca4f2f 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java +++ b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java @@ -20,8 +20,9 @@ import lombok.RequiredArgsConstructor; public class XtaMessageService { private final XtaMessageRepository messageRepository; - public void sendMessage(XtaMessage message) { + public boolean sendMessage(XtaMessage message) { messageRepository.save(message); + return true; } public XtaMessageMetaDataListing getStatusList(XtaMessageMetaDataListingRequest listingRequest) { diff --git a/src/main/java/de/ozgcloud/xta/test/app/validation/RequestValidator.java b/src/main/java/de/ozgcloud/xta/test/app/validation/RequestValidator.java index 7d1b71f..3474a64 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/validation/RequestValidator.java +++ b/src/main/java/de/ozgcloud/xta/test/app/validation/RequestValidator.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.function.Function; import java.util.stream.Collectors; +import jakarta.annotation.Nullable; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validation; import jakarta.validation.Validator; @@ -28,7 +29,10 @@ public class RequestValidator { private final ExceptionMapper exceptionMapper; - public <T> void validate(T request) throws XTAWSTechnicalProblemException { + public <T> void validate(@Nullable T request) throws XTAWSTechnicalProblemException { + if (request == null) { + throw exceptionMapper.createTechnicalProblemException("Request is invalid: null"); + } validate(request, violations -> exceptionMapper.createTechnicalProblemException("Request is invalid:\n" + getViolationsDescription(violations)) ); diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java index deb7a4d..573cd77 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java @@ -8,8 +8,8 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; -import genv3.de.xoev.transport.xta.x211.CodeFehlernummer; import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException; +import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; class ExceptionMapperTest { @@ -32,47 +32,49 @@ class ExceptionMapperTest { @DisplayName("should map error code") @Test void shouldMapErrorCode() { - var result = createExceptionErrorCode(); + var result = createException().getFaultInfo().getErrorCode(); - assertThat(result.getCode()).isEqualTo(ERROR_CODE_MESSAGE_ID_UNKNOWN); + assertThat(result).usingRecursiveComparison() + .isEqualTo(mapper.mapCodeFehlernummer(ERROR_CODE_MESSAGE_ID_UNKNOWN, ERROR_CODE_MESSAGE_ID_UNKNOWN_DESCRIPTION)); } - @DisplayName("should map error name") - @Test - void shouldMapErrorName() { - var result = createExceptionErrorCode(); - - assertThat(result.getName()).isEqualTo(ERROR_CODE_MESSAGE_ID_UNKNOWN_DESCRIPTION); + private InvalidMessageIDException createException() { + return mapper.createInvalidMessageIDException(exceptionMessage); } - @DisplayName("should map list uri") + } + + @DisplayName("create technical problem exception") + @Nested + class TestCreateTechnicalProblemException { + private final String exceptionMessage = "test message"; + + @DisplayName("should map message") @Test - void shouldMapListUri() { - var result = createExceptionErrorCode(); + void shouldMapMessage() { + var result = createException(); - assertThat(result.getListURI()).isEqualTo(ERROR_CODE_LIST_URN); + assertThat(result.getMessage()).isEqualTo(exceptionMessage); } - @DisplayName("should map list version id") + @DisplayName("should map error code") @Test - void shouldMapListVersionId() { - var result = createExceptionErrorCode(); + void shouldMapErrorCode() { + var result = createException().getFaultInfo().getErrorCode(); - assertThat(result.getListVersionID()).isEqualTo(ERROR_CODE_LIST_VERSION); + assertThat(result).usingRecursiveComparison() + .isEqualTo(mapper.mapCodeFehlernummer(ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM, ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM_DESCRIPTION)); } - private InvalidMessageIDException createException() { - return mapper.createInvalidMessageIDException(exceptionMessage); + private XTAWSTechnicalProblemException createException() { + return mapper.createTechnicalProblemException(exceptionMessage); } - private CodeFehlernummer createExceptionErrorCode() { - return createException().getFaultInfo().getErrorCode(); - } } - @DisplayName("create technical problem exception") + @DisplayName("create parameter is not valid exception") @Nested - class TestCreateTechnicalProblemException { + class TestCreateParameterIsNotValidException { private final String exceptionMessage = "test message"; @DisplayName("should map message") @@ -86,23 +88,43 @@ class ExceptionMapperTest { @DisplayName("should map error code") @Test void shouldMapErrorCode() { - var result = createExceptionErrorCode(); + var result = createException().getFaultInfo().getErrorCode(); + + assertThat(result).usingRecursiveComparison() + .isEqualTo(mapper.mapCodeFehlernummer(ERROR_CODE_PARAMETER_MISSING, ERROR_CODE_PARAMETER_MISSING_DESCRIPTION)); + } + + private ParameterIsNotValidException createException() { + return mapper.createParameterIsNotValidException(exceptionMessage); + } + } + + @DisplayName("map code error") + @Nested + class TestMapCodeError { + private final String code = "test code"; + private final String name = "test name"; - assertThat(result.getCode()).isEqualTo(ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM); + @DisplayName("should map code") + @Test + void shouldMapCode() { + var result = mapper.mapCodeFehlernummer(code, name); + + assertThat(result.getCode()).isEqualTo(code); } - @DisplayName("should map error name") + @DisplayName("should map name") @Test - void shouldMapErrorName() { - var result = createExceptionErrorCode(); + void shouldMapName() { + var result = mapper.mapCodeFehlernummer(code, name); - assertThat(result.getName()).isEqualTo(ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM_DESCRIPTION); + assertThat(result.getName()).isEqualTo(name); } @DisplayName("should map list uri") @Test void shouldMapListUri() { - var result = createExceptionErrorCode(); + var result = mapper.mapCodeFehlernummer(code, name); assertThat(result.getListURI()).isEqualTo(ERROR_CODE_LIST_URN); } @@ -110,17 +132,9 @@ class ExceptionMapperTest { @DisplayName("should map list version id") @Test void shouldMapListVersionId() { - var result = createExceptionErrorCode(); + var result = mapper.mapCodeFehlernummer(code, name); assertThat(result.getListVersionID()).isEqualTo(ERROR_CODE_LIST_VERSION); } - - private XTAWSTechnicalProblemException createException() { - return mapper.createTechnicalProblemException(exceptionMessage); - } - - private CodeFehlernummer createExceptionErrorCode() { - return createException().getFaultInfo().getErrorCode(); - } } } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java b/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java index 4b47d2d..b78c339 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java @@ -1,15 +1,9 @@ package de.ozgcloud.xta.test.app.server; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatNoException; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.verify; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; -import genv3.de.xoev.transport.xta.x211.GenericContentContainer; -import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; -import genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType; -import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; -import org.assertj.core.api.Condition; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -18,67 +12,89 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import de.ozgcloud.xta.test.app.factory.GenericContentContainerTestFactory; -import de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory; +import de.ozgcloud.xta.test.app.mapper.ExceptionMapper; import de.ozgcloud.xta.test.app.mapper.RequestMapper; -import de.ozgcloud.xta.test.app.service.ParameterValidatorService; +import de.ozgcloud.xta.test.app.model.XtaMessage; import de.ozgcloud.xta.test.app.service.XtaMessageService; +import de.ozgcloud.xta.test.app.validation.RequestValidator; +import genv3.de.xoev.transport.xta.x211.GenericContentContainer; +import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; +import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; +import genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType; +import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; +import lombok.SneakyThrows; public class SendXtaPortImplTest { @Spy - private ParameterValidatorService validator; - @Spy + @InjectMocks + private SendXtaPortImpl sendXtaPortImpl; + @Mock + private RequestValidator requestValidator; + @Mock private RequestMapper requestMapper; @Mock private XtaMessageService xtaMessageService; - @Spy @InjectMocks - private SendXtaPortImpl sendXtaPortImpl; + @Mock + private ExceptionMapper exceptionMapper; + @DisplayName("send message") @Nested - class SendMessage { - + class TestSendMessage { + @Mock private GenericContentContainer genericContainer; + @Mock private MessageMetaData messageMetaData; @Mock private X509TokenContainerType x509TokenContainer; + private ParameterIsNotValidException parameterIsNotValidException; + + private XTAWSTechnicalProblemException technicalProblemException; + + @Mock + private XtaMessage xtaMessage; + @BeforeEach - void beforeEach() { - genericContainer = GenericContentContainerTestFactory.create(); - messageMetaData = MessageMetaDataTestFactory.create(); + void mock() { + parameterIsNotValidException = new ParameterIsNotValidException(); + technicalProblemException = new XTAWSTechnicalProblemException(); + when(requestMapper.mapXtaMessageFromGenericContentContainer(genericContainer, messageMetaData)).thenReturn(xtaMessage); } - @DisplayName("Should accept valid request") + @DisplayName("should return") @Test - void shouldAcceptValidRequest() { - assertThatNoException().isThrownBy(() -> sendXtaPortImpl.sendMessage(genericContainer, messageMetaData, x509TokenContainer)); + @SneakyThrows + void shouldSendMessage() { + when(xtaMessageService.sendMessage(xtaMessage)).thenReturn(true); + + sendMessage(); } - @DisplayName("Should send message to XTA message service") + @DisplayName("should throw if send fails") @Test - void shouldSendMessageToXtaMessageService() { - try{ - sendXtaPortImpl.sendMessage(genericContainer, messageMetaData, x509TokenContainer); - } catch (Exception e) { - // ignore - } - - verify(xtaMessageService).sendMessage(any()); + void shouldThrowIfSendFails() { + when(xtaMessageService.sendMessage(xtaMessage)).thenReturn(false); + when(exceptionMapper.createParameterIsNotValidException(any())).thenReturn(parameterIsNotValidException); + + assertThatThrownBy(this::sendMessage) + .isEqualTo(parameterIsNotValidException); } - @DisplayName("Should reject request without message ID") + @DisplayName("should validate request") @Test - void shouldRejectRequestWithoutMessageId() { - messageMetaData.getMsgIdentification().setMessageID(null); + @SneakyThrows + void shouldValidateRequest() { + doThrow(technicalProblemException).when(requestValidator).validate(xtaMessage); - assertThatExceptionOfType(ParameterIsNotValidException.class).isThrownBy( - () -> sendXtaPortImpl.sendMessage(genericContainer, messageMetaData, x509TokenContainer)) - .withMessage("Message ID is missing") - .has(parameterIsMissingExceptionCondition()); + assertThatThrownBy(this::sendMessage) + .isEqualTo(technicalProblemException); + } + + @SneakyThrows + private void sendMessage() { + sendXtaPortImpl.sendMessage(genericContainer, messageMetaData, x509TokenContainer); } - } - private Condition<ParameterIsNotValidException> parameterIsMissingExceptionCondition() { - return new Condition<>(e -> e.getFaultInfo().getErrorCode().getCode().equals("9020"), "error code 9020 for missing parameter"); } + } -- GitLab