aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/at/gv/egiz/moazs/SingleThreadedDeliveryPipelineTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/at/gv/egiz/moazs/SingleThreadedDeliveryPipelineTest.java')
-rw-r--r--src/test/java/at/gv/egiz/moazs/SingleThreadedDeliveryPipelineTest.java188
1 files changed, 188 insertions, 0 deletions
diff --git a/src/test/java/at/gv/egiz/moazs/SingleThreadedDeliveryPipelineTest.java b/src/test/java/at/gv/egiz/moazs/SingleThreadedDeliveryPipelineTest.java
new file mode 100644
index 0000000..c08d567
--- /dev/null
+++ b/src/test/java/at/gv/egiz/moazs/SingleThreadedDeliveryPipelineTest.java
@@ -0,0 +1,188 @@
+package at.gv.egiz.moazs;
+
+import at.gv.egiz.moazs.util.ClientFactory;
+import at.gv.egiz.moazs.pipeline.DeliveryPipeline;
+import at.gv.egiz.moazs.pipeline.SingleThreadedDeliveryPipeline;
+import at.gv.egiz.moazs.repository.DeliveryRepository;
+import at.gv.egiz.moazs.repository.InMemoryDeliveryRepository;
+import at.gv.egiz.moazs.scheme.Mzs2MsgConverter;
+import at.gv.egiz.moazs.scheme.TnvzHelper;
+import at.gv.egiz.moazs.verify.MoaSPSSSignatureVerifier;
+import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType;
+import at.gv.zustellung.msg.xsd.App2ZusePort;
+import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType;
+import at.gv.zustellung.msg.xsd.MetaData;
+import at.gv.zustellung.msg.xsd.persondata.IdentificationType;
+import at.gv.zustellung.tnvz.xsd.TNVZServicePort;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import static at.gv.egiz.moazs.MoaZSException.moaZSException;
+import static at.gv.egiz.moazs.MoaZSException.moaZSExceptionBuilder;
+import static at.gv.zustellung.app2mzs.xsd.ClientType.clientTypeBuilder;
+import static at.gv.zustellung.app2mzs.xsd.ConfigType.configTypeBuilder;
+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.MetaData.metaDataBuilder;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.*;
+
+@RunWith(MockitoJUnitRunner.class)
+public class SingleThreadedDeliveryPipelineTest {
+
+ private DeliveryRepository repository = new InMemoryDeliveryRepository();
+
+ @Mock
+ private TnvzHelper tnvzHelper;
+
+ @Mock
+ private ClientFactory clientFactory;
+
+ @Mock
+ private App2ZusePort msgClient;
+
+ @Mock
+ private TNVZServicePort tnvzClient;
+
+ @Mock
+ private Mzs2MsgConverter converter;
+
+ @Mock
+ private MoaSPSSSignatureVerifier verifier;
+
+
+ private DeliveryPipeline pipeline;
+
+ @Before
+ public void setup() {
+ pipeline = new SingleThreadedDeliveryPipeline(repository, tnvzHelper, converter, clientFactory, verifier);
+ }
+
+ @Test
+ public void executePipelineWithoutTnvzRequest() {
+ var appDeliveryId = "no-tnvz-request";
+ var expectedStatus = setupMocks(appDeliveryId, false);
+
+ pipeline.processRequest(appDeliveryId);
+
+ verifyZeroInteractions(tnvzHelper);
+ var actualStatus = repository.getDeliveryRequestStatus(appDeliveryId).get();
+
+ assertThat(actualStatus).isEqualTo(expectedStatus);
+ }
+
+ @Test
+ public void rejectDeliveryWhenReceiverIsNotAddressable() {
+ var appDeliveryId = "not-addressable";
+ setupMocks(appDeliveryId, true);
+ when(tnvzHelper.performQueryPersonRequest(any(), any(), any()))
+ .thenThrow(buildMzsException("400"));
+
+ pipeline.processRequest(appDeliveryId);
+ var actualCode = repository.getDeliveryRequestStatus(appDeliveryId).get()
+ .getError().getErrorInfo().getCode();
+
+ verify(tnvzHelper).performQueryPersonRequest(any(), any(), any());
+ assertThat(actualCode).isEqualTo("400");
+ }
+
+ @Test
+ public void executePipelineWithTnvzRequest() {
+ var appDeliveryId = "tnvz-request";
+ var expectedStatus = setupMocks(appDeliveryId, true);
+
+ pipeline.processRequest(appDeliveryId);
+ var actualStatus = repository.getDeliveryRequestStatus(appDeliveryId).get();
+
+ assertThat(actualStatus).isEqualTo(expectedStatus);
+ }
+
+ @Test
+ public void rejectInvalidSignature() {
+ var appDeliveryId = "invalid-signature";
+ setupMocks(appDeliveryId, true);
+ doThrow(moaZSException("Signature Invalid!")).when(verifier).verify(any());
+
+ pipeline.processRequest(appDeliveryId);
+ var actualCode = repository.getDeliveryRequestStatus(appDeliveryId).get()
+ .getError().getErrorInfo().getCode();
+
+ assertThat(actualCode).isEqualTo(MoaZSException.ERROR_MOASP_SIGNATURE_INVALID);
+
+ }
+
+ private DeliveryRequestStatusType setupMocks(String appDeliveryId, boolean tnvzRequest) {
+
+ var mzsRequest = setupMzsRequest(appDeliveryId, tnvzRequest);
+ var msgRequest = setupMsgRequest(appDeliveryId);
+ var status = setupStatus(appDeliveryId);
+ var signedStatus = new byte[0];
+ var identification = IdentificationType.identificationTypeBuilder().build();
+ repository.add(mzsRequest);
+ repository.addSignedDeliveryRequestStatus(signedStatus, appDeliveryId);
+
+ when(converter.convert(eq(mzsRequest) )).thenReturn(msgRequest);
+ when(converter.convert(eq(mzsRequest), any())).thenReturn(msgRequest);
+ when(clientFactory.create(any(), same(App2ZusePort.class))).thenReturn(msgClient);
+ when(msgClient.delivery(msgRequest)).thenReturn(status);
+
+ if (tnvzRequest) {
+ when(clientFactory.create(any(), same(TNVZServicePort.class))).thenReturn(tnvzClient);
+ when(tnvzHelper.performQueryPersonRequest(any(), any(), any())).thenReturn(identification);
+ }
+ return status;
+
+ }
+
+ private MoaZSException buildMzsException(String code) {
+ return moaZSExceptionBuilder("").withErrorCode(code).build();
+ }
+
+ private DeliveryRequestStatusType setupStatus(String appDeliveryId) {
+
+ var success = successBuilder()
+ .withAppDeliveryID(appDeliveryId)
+ .build();
+
+ return deliveryRequestStatusTypeBuilder()
+ .withSuccess(success)
+ .build();
+
+ }
+
+ private DeliveryRequestType setupMzsRequest(String appDeliveryId, boolean tnvzRequest) {
+
+ var msgClient = clientTypeBuilder()
+ .withURL("http://zuse")
+ .build();
+
+ var config = configTypeBuilder()
+ .withPerformQueryPersonRequest(tnvzRequest)
+ .withMSGClient(msgClient)
+ .build();
+
+ return deliveryRequestTypeBuilder()
+ .withMetaData(setupMetaData(appDeliveryId))
+ .withConfig(config)
+ .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();
+ }
+
+}