diff --git a/core/src/main/java/org/lfenergy/shapeshifter/core/service/validation/base/ReferencedRequestMessageIdInResponseValidator.java b/core/src/main/java/org/lfenergy/shapeshifter/core/service/validation/base/ReferencedRequestMessageIdInResponseValidator.java index 01638b4..761b760 100644 --- a/core/src/main/java/org/lfenergy/shapeshifter/core/service/validation/base/ReferencedRequestMessageIdInResponseValidator.java +++ b/core/src/main/java/org/lfenergy/shapeshifter/core/service/validation/base/ReferencedRequestMessageIdInResponseValidator.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; +import org.lfenergy.shapeshifter.api.FlexRequest; import org.lfenergy.shapeshifter.api.PayloadMessageResponseType; import org.lfenergy.shapeshifter.api.PayloadMessageType; import org.lfenergy.shapeshifter.core.model.UftpMessage; @@ -13,27 +14,27 @@ @RequiredArgsConstructor public class ReferencedRequestMessageIdInResponseValidator implements UftpValidator { - private final UftpMessageSupport support; - - @Override - public boolean appliesTo(Class clazz) { - return UftpRequestResponseMapping.hasReferencedRequestMessageId(clazz); - } - - @Override - public int order() { - return 0; - } - - @Override - public boolean isValid(UftpMessage message) { - var value = UftpRequestResponseMapping.getReferencedRequestMessageId(message.payloadMessage()); - return value.isEmpty() || support.findDuplicateMessage(value.get(), message.payloadMessage().getSenderDomain() , - message.payloadMessage().getRecipientDomain()).isPresent(); - } - - @Override - public String getReason() { - return "Unknown reference Request message ID"; - } + private final UftpMessageSupport support; + + @Override + public boolean appliesTo(Class clazz) { + return UftpRequestResponseMapping.hasReferencedRequestMessageId(clazz); + } + + @Override + public int order() { + return 0; + } + + @Override + public boolean isValid(UftpMessage message) { + var value = UftpRequestResponseMapping.getReferencedRequestMessageId(message.payloadMessage()); + return value.isPresent() && support.findReferencedMessage(message.referenceToPreviousMessage(value.get(), message.payloadMessage().getConversationID(), + FlexRequest.class)).isPresent(); + } + + @Override + public String getReason() { + return "Unknown reference Request message ID"; + } } diff --git a/core/src/test/java/org/lfenergy/shapeshifter/core/model/PayloadMessageFixture.java b/core/src/test/java/org/lfenergy/shapeshifter/core/model/PayloadMessageFixture.java index f1a2048..229f38a 100644 --- a/core/src/test/java/org/lfenergy/shapeshifter/core/model/PayloadMessageFixture.java +++ b/core/src/test/java/org/lfenergy/shapeshifter/core/model/PayloadMessageFixture.java @@ -4,7 +4,11 @@ package org.lfenergy.shapeshifter.core.model; -import org.lfenergy.shapeshifter.api.*; +import org.lfenergy.shapeshifter.api.AvailableRequestedType; +import org.lfenergy.shapeshifter.api.FlexRequest; +import org.lfenergy.shapeshifter.api.FlexRequestISPType; +import org.lfenergy.shapeshifter.api.FlexRequestResponse; +import org.lfenergy.shapeshifter.api.TestMessage; import java.time.Duration; import java.time.OffsetDateTime; @@ -49,6 +53,16 @@ public static FlexRequest createTestFlexRequest(String messageId, String senderD return flexRequest; } + public static FlexRequestResponse createTestFlexRequestResponse(String messageId, String senderDomain, String recipientDomain) { + var flexRequestResponse = new FlexRequestResponse(); + flexRequestResponse.setMessageID(messageId); + flexRequestResponse.setConversationID(CONVERSATION_ID); + flexRequestResponse.setSenderDomain(senderDomain); + flexRequestResponse.setRecipientDomain(recipientDomain); + flexRequestResponse.setTimeStamp(NOW); + return flexRequestResponse; + } + public static TestMessage createTestMessage(String messageId, String senderDomain, String recipientDomain) { var testMessage = new TestMessage(); testMessage.setMessageID(messageId); diff --git a/core/src/test/java/org/lfenergy/shapeshifter/core/model/UftpMessageFixture.java b/core/src/test/java/org/lfenergy/shapeshifter/core/model/UftpMessageFixture.java index dd398a4..1d476a3 100644 --- a/core/src/test/java/org/lfenergy/shapeshifter/core/model/UftpMessageFixture.java +++ b/core/src/test/java/org/lfenergy/shapeshifter/core/model/UftpMessageFixture.java @@ -4,6 +4,7 @@ package org.lfenergy.shapeshifter.core.model; +import org.lfenergy.shapeshifter.api.PayloadMessageResponseType; import org.lfenergy.shapeshifter.api.PayloadMessageType; public final class UftpMessageFixture { @@ -15,6 +16,9 @@ private UftpMessageFixture() { public static UftpMessage createIncoming(UftpParticipant sender, T payloadMessage) { return new UftpMessage<>(sender, UftpMessageDirection.INCOMING, payloadMessage); } + public static UftpMessage createIncomingResponse(UftpParticipant sender, T payloadMessage) { + return new UftpMessage<>(sender, UftpMessageDirection.INCOMING, payloadMessage); + } public static UftpMessage createOutgoing(UftpParticipant sender, T payloadMessage) { return new UftpMessage<>(sender, UftpMessageDirection.OUTGOING, payloadMessage); diff --git a/core/src/test/java/org/lfenergy/shapeshifter/core/service/sending/UftpSendMessageServiceTest.java b/core/src/test/java/org/lfenergy/shapeshifter/core/service/sending/UftpSendMessageServiceTest.java index b19f75a..9f24923 100644 --- a/core/src/test/java/org/lfenergy/shapeshifter/core/service/sending/UftpSendMessageServiceTest.java +++ b/core/src/test/java/org/lfenergy/shapeshifter/core/service/sending/UftpSendMessageServiceTest.java @@ -65,7 +65,6 @@ class UftpSendMessageServiceTest { @Mock private UftpValidationService uftpValidationService; - private UftpSendMessageService testSubject; @Mock diff --git a/core/src/test/java/org/lfenergy/shapeshifter/core/service/validation/base/ReferencedRequestMessageIdInResponseValidatorTest.java b/core/src/test/java/org/lfenergy/shapeshifter/core/service/validation/base/ReferencedRequestMessageIdInResponseValidatorTest.java new file mode 100644 index 0000000..ebeb45d --- /dev/null +++ b/core/src/test/java/org/lfenergy/shapeshifter/core/service/validation/base/ReferencedRequestMessageIdInResponseValidatorTest.java @@ -0,0 +1,82 @@ +package org.lfenergy.shapeshifter.core.service.validation.base; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.lfenergy.shapeshifter.api.FlexRequest; +import org.lfenergy.shapeshifter.api.FlexRequestResponse; +import org.lfenergy.shapeshifter.api.PayloadMessageResponseType; +import org.lfenergy.shapeshifter.api.TestMessageResponse; +import org.lfenergy.shapeshifter.api.USEFRoleType; +import org.lfenergy.shapeshifter.core.model.UftpMessageFixture; +import org.lfenergy.shapeshifter.core.model.UftpParticipant; +import org.lfenergy.shapeshifter.core.service.validation.UftpMessageSupport; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@ExtendWith(MockitoExtension.class) +class ReferencedRequestMessageIdInResponseValidatorTest { + private static final String FLEX_REQUEST_MESSAGE_ID = UUID.randomUUID().toString(); + private static final String CONVERSATION_ID = UUID.randomUUID().toString(); + @Mock + private UftpMessageSupport messageSupport; + + @InjectMocks + private ReferencedRequestMessageIdInResponseValidator testSubject; + + private final UftpParticipant sender = new UftpParticipant("example.com", USEFRoleType.DSO); + private final PayloadMessageResponseType flexRequestResponse = new FlexRequestResponse(); + private final FlexRequest flexRequest = new FlexRequest(); + + @Test + void appliesTo() { + assertThat(testSubject.appliesTo(FlexRequestResponse.class)).isTrue(); + } + + @Test + void notAppliesTo() { + assertThat(testSubject.appliesTo(TestMessageResponse.class)).isFalse(); + } + + @Test + void valid_whenNoFlexRequestReferenceInResponse() { + ((FlexRequestResponse) flexRequestResponse).setFlexRequestMessageID(null); + + assertThat(testSubject.isValid(UftpMessageFixture.createIncomingResponse(sender, flexRequestResponse))).isFalse(); + } + + @Test + void valid_whenFlexRequestReferenceInResponseIsKnown() { + var uftpMessage = UftpMessageFixture.createIncomingResponse(sender, flexRequestResponse); + + ((FlexRequestResponse) flexRequestResponse).setFlexRequestMessageID(FLEX_REQUEST_MESSAGE_ID); + flexRequestResponse.setConversationID(CONVERSATION_ID); + given(messageSupport.findReferencedMessage(uftpMessage.referenceToPreviousMessage(FLEX_REQUEST_MESSAGE_ID, CONVERSATION_ID, + FlexRequest.class))).willReturn(Optional.of(flexRequest)); + + assertThat(testSubject.isValid(uftpMessage)).isTrue(); + } + + @Test + void invalid_whenReferenceInResponseIsNotKnown() { + var uftpMessage = UftpMessageFixture.createIncomingResponse(sender, flexRequestResponse); + + ((FlexRequestResponse) flexRequestResponse).setFlexRequestMessageID(FLEX_REQUEST_MESSAGE_ID); + flexRequestResponse.setConversationID(CONVERSATION_ID); + given(messageSupport.findReferencedMessage(uftpMessage.referenceToPreviousMessage(FLEX_REQUEST_MESSAGE_ID, CONVERSATION_ID, + FlexRequest.class))).willReturn(Optional.empty()); + + assertThat(testSubject.isValid(uftpMessage)).isFalse(); + } + + @Test + void getReason() { + assertThat(testSubject.getReason()).isEqualTo("Unknown reference Request message ID"); + } +}