diff options
Diffstat (limited to 'src/test/java/at/gv')
-rw-r--r-- | src/test/java/at/gv/egiz/moazs/SameThreadDeliveryPipelineTest.java | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/src/test/java/at/gv/egiz/moazs/SameThreadDeliveryPipelineTest.java b/src/test/java/at/gv/egiz/moazs/SameThreadDeliveryPipelineTest.java new file mode 100644 index 0000000..f394a63 --- /dev/null +++ b/src/test/java/at/gv/egiz/moazs/SameThreadDeliveryPipelineTest.java @@ -0,0 +1,211 @@ +package at.gv.egiz.moazs; + +import at.gv.egiz.moazs.pipeline.DeliveryPipeline; +import at.gv.egiz.moazs.pipeline.SameThreadDeliveryPipeline; +import at.gv.egiz.moazs.repository.DeliveryRepository; +import at.gv.egiz.moazs.scheme.Mzs2MsgConverter; +import at.gv.egiz.moazs.tnvz.TnvzClient; +import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType; +import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; +import at.gv.zustellung.msg.xsd.MetaData; +import at.gv.zustellung.tnvz.xsd.MimeTypeList; +import at.gv.zustellung.tnvz.xsd.PersonResultType; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.List; + +import static at.gv.zustellung.app2mzs.xsd.ConfigType.configTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.Payload; +import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.Payload.payloadBuilder; +import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.deliveryRequestTypeBuilder; +import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.Success.successBuilder; +import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder; +import static at.gv.zustellung.msg.xsd.ErrorInfoType.errorInfoTypeBuilder; +import static at.gv.zustellung.msg.xsd.MetaData.metaDataBuilder; +import static at.gv.zustellung.tnvz.xsd.MimeTypeList.mimeTypeListBuilder; +import static at.gv.zustellung.tnvz.xsd.PersonResultSuccessType.personResultSuccessTypeBuilder; +import static at.gv.zustellung.tnvz.xsd.PersonResultType.Error.errorBuilder; +import static at.gv.zustellung.tnvz.xsd.PersonResultType.personResultTypeBuilder; +import static java.util.Optional.of; +import static java.util.stream.Collectors.toList; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class SameThreadDeliveryPipelineTest { + + @Mock + private DeliveryRepository repository; + + @Mock + private TnvzClient tnvzClient; + + @Mock + private MsgClient msgClient; + + @Mock + private Mzs2MsgConverter converter; + + + private DeliveryPipeline pipeline; + + @Before + public void setup() { + pipeline = new SameThreadDeliveryPipeline(repository, tnvzClient, converter, msgClient); + } + + @Test + public void executePipelineWithoutTnvzRequest() { + var appDeliveryId = "no-tnvz-request"; + var status = setupMocks(appDeliveryId, false, List.of(), List.of("*/*")); + + pipeline.processRequest(appDeliveryId); + + verifyZeroInteractions(tnvzClient); + verify(repository).add(status); + } + + @Test(expected = MoaZSException.class) + public void rejectDeliveryWhenReceiverIsNotAddressable() { + var appDeliveryId = "not-addressable"; + setupMocks(appDeliveryId, true, List.of(), List.of("*/*")); + when(tnvzClient.queryPerson(any(), any())).thenReturn(setupTnvzError()); + + pipeline.processRequest(appDeliveryId); + + verify(tnvzClient).queryPerson(any(), any()); + } + + @Test + public void acceptWildcardMimeType() { + var appDeliveryId = "wild-card-mimetype"; + List<String> acceptedTypes = List.of("*/*"); + List<String> attachedTypes = List.of("pdf", "xml", "html", "random/attachedtype"); + var status = setupMocks(appDeliveryId, true, attachedTypes, acceptedTypes); + + pipeline.processRequest(appDeliveryId); + + verify(tnvzClient).queryPerson(any(), any()); + verify(repository).add(status); + } + + @Test(expected = MoaZSException.class) + public void rejectMismatchedMimeTypes() { + var appDeliveryId = "mismatched-mimetype"; + List<String> acceptedTypes = List.of("xml"); + List<String> attachedTypes = List.of("pdf", "xml", "html", "random/attachedtype"); + setupMocks(appDeliveryId, true, attachedTypes, acceptedTypes); + + pipeline.processRequest(appDeliveryId); + + verify(tnvzClient).queryPerson(any(), any()); + } + + @Test + public void acceptSpecificMimeType() { + var appDeliveryId = "specific-mimetype"; + List<String> acceptedTypes = List.of("pdf", "xml", "html"); + List<String> attachedTypes = List.of("pdf", "xml"); + var status = setupMocks(appDeliveryId, true, attachedTypes, acceptedTypes); + + pipeline.processRequest(appDeliveryId); + + verify(tnvzClient).queryPerson(any(), any()); + verify(repository).add(status); + } + + private DeliveryRequestStatusType setupMocks(String appDeliveryId, boolean tnvzRequest, + List<String> attachedTypes, List<String> acceptedTypes) { + + var mzsRequest = setupMzsRequest(appDeliveryId, tnvzRequest, attachedTypes); + var msgRequest = setupMsgRequest(appDeliveryId); + var status = setupStatus(appDeliveryId); + when(repository.getDeliveryRequest(appDeliveryId)).thenReturn(of(mzsRequest)); + when(tnvzClient.queryPerson(any(), any())).thenReturn(setupTnvzSuccess(acceptedTypes)); + when(converter.convert(eq(mzsRequest) )).thenReturn(msgRequest); + when(converter.convert(eq(mzsRequest), any())).thenReturn(msgRequest); + when(msgClient.send(msgRequest)).thenReturn(status); + + return status; + + } + + private PersonResultType setupTnvzError() { + + var info = errorInfoTypeBuilder() + .withCode("400") + .withText("Person Not Found") + .build(); + + var error = errorBuilder() + .withErrorInfo(info) + .build(); + + return personResultTypeBuilder() + .withError(error) + .build(); + } + + private PersonResultType setupTnvzSuccess(List<String> mimeTypes) { + + var success = personResultSuccessTypeBuilder() + .withMimeTypeList(setupMimeTypeList(mimeTypes)) + .build(); + + return personResultTypeBuilder() + .withSuccess(success) + .build(); + } + + private DeliveryRequestStatusType setupStatus(String appDeliveryId) { + + var success = successBuilder() + .withAppDeliveryID(appDeliveryId) + .build(); + + return deliveryRequestStatusTypeBuilder() + .withSuccess(success) + .build(); + + } + + private DeliveryRequestType setupMzsRequest(String appDeliveryId, boolean tnvzRequest, List<String> mimeTypes) { + + var config = configTypeBuilder() + .withPerformQueryPersonRequest(tnvzRequest) + .build(); + + return deliveryRequestTypeBuilder() + .withMetaData(setupMetaData(appDeliveryId)) + .withConfig(config) + .withPayload(setupPayload(mimeTypes)) + .build(); + } + + private List<Payload> setupPayload(List<String> mimeTypes) { + return mimeTypes.stream() + .map((mtype) -> payloadBuilder().withMIMEType(mtype).build()) + .collect(toList()); + } + + private MimeTypeList setupMimeTypeList(List<String> mimeTypes) { + return mimeTypeListBuilder().withMimeType(mimeTypes).build(); + } + + private at.gv.zustellung.msg.xsd.DeliveryRequestType setupMsgRequest(String appDeliveryId) { + return at.gv.zustellung.msg.xsd.DeliveryRequestType.deliveryRequestTypeBuilder() + .withMetaData(setupMetaData(appDeliveryId)) + .build(); + } + + private MetaData setupMetaData(String appDeliveryId) { + return metaDataBuilder() + .withAppDeliveryID(appDeliveryId) + .build(); + } + +} |