From 7c95141343a3157ee94a5306d9567beb6af10c90 Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Wed, 3 Jul 2019 10:32:10 +0200 Subject: TnvzHelper: Handle Edge Case and Add Test Cases - TnvzHelper: Handle edge case where Mzs/DeliveryRequest/Sender/CorporateBody is missing (Reason: This field is in a with msg:SenderProfile, so if CorporateBody is missing the request still passes the schema validation). Handle case by rejecting missing CorporateBody and TnvzQuery activated. - Add test cases for TnvzHelper. --- .../java/at/gv/egiz/moazs/mzs/MzsValidator.java | 6 +- .../at/gv/egiz/moazs/scheme/Mzs2MsgConverter.java | 2 +- .../java/at/gv/egiz/moazs/tnvz/TnvzHelper.java | 11 +- src/test/java/at/gv/egiz/moazs/TnvzHelperTest.java | 202 +++++++++++++++++++++ 4 files changed, 211 insertions(+), 10 deletions(-) create mode 100644 src/test/java/at/gv/egiz/moazs/TnvzHelperTest.java diff --git a/src/main/java/at/gv/egiz/moazs/mzs/MzsValidator.java b/src/main/java/at/gv/egiz/moazs/mzs/MzsValidator.java index c5b73bb..26ea7dc 100644 --- a/src/main/java/at/gv/egiz/moazs/mzs/MzsValidator.java +++ b/src/main/java/at/gv/egiz/moazs/mzs/MzsValidator.java @@ -16,7 +16,11 @@ public class MzsValidator { * @return true if mandatory fields are present. */ public boolean isTnvzComplete(DeliveryRequestType request) { - return (!request.getConfig().isPerformQueryPersonRequest()) || request.getTnvzMetaData() != null; + return !request.getConfig().isPerformQueryPersonRequest() || + (request.getTnvzMetaData() != null + && request.getSender().getCorporateBody() != null); + + } /** diff --git a/src/main/java/at/gv/egiz/moazs/scheme/Mzs2MsgConverter.java b/src/main/java/at/gv/egiz/moazs/scheme/Mzs2MsgConverter.java index fdb2ab8..6976738 100644 --- a/src/main/java/at/gv/egiz/moazs/scheme/Mzs2MsgConverter.java +++ b/src/main/java/at/gv/egiz/moazs/scheme/Mzs2MsgConverter.java @@ -61,7 +61,7 @@ public class Mzs2MsgConverter { //------------- SENDER ------------------ - public Sender convert(at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.Sender sender) { + private Sender convert(at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.Sender sender) { return senderBuilder() .withSenderPerson(extractSenderPerson(sender)) .withLogo(sender.getLogo()) diff --git a/src/main/java/at/gv/egiz/moazs/tnvz/TnvzHelper.java b/src/main/java/at/gv/egiz/moazs/tnvz/TnvzHelper.java index 3599362..f71b992 100644 --- a/src/main/java/at/gv/egiz/moazs/tnvz/TnvzHelper.java +++ b/src/main/java/at/gv/egiz/moazs/tnvz/TnvzHelper.java @@ -115,11 +115,6 @@ public class TnvzHelper { private Sender extractSender(DeliveryRequestType.Sender sender) { var corporateBody = sender.getCorporateBody(); - if (corporateBody == null) { - //todo! implement this case - throw MoaZSException.moaZSException("Not Implemented."); - } - var mzsIdentification = corporateBody.getIdentification().get(0); var msgIdentification = converter.convert(mzsIdentification); @@ -135,9 +130,7 @@ public class TnvzHelper { var builder = receiverBuilder(); - if (receiver.getIdentification() != null) { - builder.withIdentification(converter.convert(receiver.getIdentification())); - } else { + if (receiver.getIdentification() == null) { builder .withPerson(converter.convert(receiver.getPerson())) .withAustrianAddressesOnly(receiver.getAustrianAddressesOnly()); @@ -149,6 +142,8 @@ public class TnvzHelper { if (receiver.getPreAdviceNote() != null) { builder.withNotificationAddressList(receiver.getPreAdviceNote().getNotificationAddressList()); } + } else { + builder.withIdentification(converter.convert(receiver.getIdentification())); } return builder.build(); diff --git a/src/test/java/at/gv/egiz/moazs/TnvzHelperTest.java b/src/test/java/at/gv/egiz/moazs/TnvzHelperTest.java new file mode 100644 index 0000000..4425297 --- /dev/null +++ b/src/test/java/at/gv/egiz/moazs/TnvzHelperTest.java @@ -0,0 +1,202 @@ +package at.gv.egiz.moazs; + + +import at.gv.egiz.moazs.scheme.Mzs2MsgConverter; +import at.gv.egiz.moazs.tnvz.TnvzHelper; +import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType; +import at.gv.zustellung.app2mzs.xsd.persondata.IdentificationType; +import at.gv.zustellung.tnvz.xsd.MimeTypeList; +import at.gv.zustellung.tnvz.xsd.QueryPersonResponse; +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 java.util.List; + +import static at.gv.egiz.moazs.MoaZSException.moaZSExceptionBuilder; +import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.Payload.payloadBuilder; +import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.Receiver.receiverBuilder; +import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.Sender.senderBuilder; +import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.deliveryRequestTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.TnvzMetaDataType.tnvzMetaDataTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.persondata.CorporateBodyType.corporateBodyTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.persondata.IdentificationType.Value.valueBuilder; +import static at.gv.zustellung.app2mzs.xsd.persondata.IdentificationType.identificationTypeBuilder; +import static at.gv.zustellung.msg.xsd.ErrorInfoType.errorInfoTypeBuilder; +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 at.gv.zustellung.tnvz.xsd.QueryPersonResponse.QueryResultList.queryResultListBuilder; +import static at.gv.zustellung.tnvz.xsd.QueryPersonResponse.queryPersonResponseBuilder; +import static java.util.stream.Collectors.toList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class TnvzHelperTest { + + private TnvzHelper helper; + + @Mock + private TNVZServicePort port; + + private Mzs2MsgConverter converter; + + @Before + public void setup() { + converter = new Mzs2MsgConverter(); + helper = new TnvzHelper(converter); + } + + @Test + public void acceptWildcardMimetype() { + List acceptedTypes = List.of("*/*"); + List attachedTypes = List.of("pdf", "xml", "html", "random/attachedtype"); + var receiverId = identification("zbpk", "receiver-id-value"); + var deliveryRequest = deliveryRequest(attachedTypes, receiverId); + var success = tnvzSuccess(acceptedTypes, receiverId); + when(port.queryPerson(any())).thenReturn(success); + + var actual = helper.performQueryPersonRequest(deliveryRequest, port, moaZSExceptionBuilder()); + + assertThat(actual).isEqualToComparingFieldByFieldRecursively(receiverId); + } + + @Test(expected = MoaZSException.class) + public void rejectWhenNotAddressable() { + List attachedTypes = List.of("*/*"); + var receiverId = identification("zbpk", "receiver-id-value"); + var deliveryRequest = deliveryRequest(attachedTypes, receiverId); + var error = tnvzError("400", "Person not found."); + when(port.queryPerson(any())).thenReturn(error); + + helper.performQueryPersonRequest(deliveryRequest, port, moaZSExceptionBuilder()); + } + + @Test(expected = MoaZSException.class) + public void rejectMismatchedMimeTypes() { + List acceptedTypes = List.of("xml"); + List attachedTypes = List.of("pdf", "xml", "html", "random/attachedtype"); + var receiverId = identification("zbpk", "receiver-id-value"); + var deliveryRequest = deliveryRequest(attachedTypes, receiverId); + var success = tnvzSuccess(acceptedTypes, receiverId); + when(port.queryPerson(any())).thenReturn(success); + + helper.performQueryPersonRequest(deliveryRequest, port, moaZSExceptionBuilder()); + } + + @Test + public void acceptSpecificMimeType() { + List acceptedTypes = List.of("pdf", "xml", "html"); + List attachedTypes = List.of("pdf", "xml"); + var receiverId = identification("zbpk", "receiver-id-value"); + var deliveryRequest = deliveryRequest(attachedTypes, receiverId); + var success = tnvzSuccess(acceptedTypes, receiverId); + when(port.queryPerson(any())).thenReturn(success); + + var actual = helper.performQueryPersonRequest(deliveryRequest, port, moaZSExceptionBuilder()); + + assertThat(actual).isEqualToComparingFieldByFieldRecursively(receiverId); + } + + + private DeliveryRequestType deliveryRequest(List mzsMimeTypes, IdentificationType receiverId) { + + var corporateBody = corporateBodyTypeBuilder() + .withFullName("Corporate Sender GmbH") + .withIdentification(List.of(identification("zbpk", "deadbeef"))) + .build(); + + var sender = senderBuilder() + .withCorporateBody(corporateBody) + .build(); + + var receiver = receiverBuilder() + .withIdentification(receiverId) + .build(); + + var metadata = tnvzMetaDataTypeBuilder() + .build(); + + return deliveryRequestTypeBuilder() + .withSender(sender) + .withReceiver(receiver) + .withTnvzMetaData(metadata) + .withPayload(payload(mzsMimeTypes)) + .build(); + } + + private IdentificationType identification(String id, String value) { + + var receiverIdValue = valueBuilder() + .withValue(value) + .build(); + + return identificationTypeBuilder() + .withId(id) + .withValue(receiverIdValue) + .build(); + } + + private List payload(List mimeTypes) { + return mimeTypes.stream() + .map((mtype) -> payloadBuilder().withMIMEType(mtype).build()) + .collect(toList()); + } + + private QueryPersonResponse tnvzSuccess(List mimeTypes, IdentificationType receiverId) { + + var success = personResultSuccessTypeBuilder() + .withMimeTypeList(setupMimeTypeList(mimeTypes)) + .withIdentification(converter.convert(receiverId)) + .build(); + + var personResult = personResultTypeBuilder() + .withSuccess(success) + .build(); + + var queryResultList = queryResultListBuilder() + .withQueryResult(List.of(personResult)) + .build(); + + return queryPersonResponseBuilder() + .withQueryResultList(queryResultList) + .build(); + } + + private QueryPersonResponse tnvzError(String code, String text) { + + var info = errorInfoTypeBuilder() + .withCode(code) + .withText(text) + .build(); + + var error = errorBuilder() + .withErrorInfo(info) + .build(); + + var result = personResultTypeBuilder() + .withError(error) + .build(); + + var queryResultList = queryResultListBuilder() + .withQueryResult(List.of(result)) + .build(); + + return queryPersonResponseBuilder() + .withQueryResultList(queryResultList) + .build(); + } + + + private MimeTypeList setupMimeTypeList(List mimeTypes) { + return mimeTypeListBuilder().withMimeType(mimeTypes).build(); + } + + +} -- cgit v1.2.3