diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/PDFAWriteTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/PDFAWriteTest.java new file mode 100644 index 00000000..506f0e60 --- /dev/null +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/PDFAWriteTest.java @@ -0,0 +1,116 @@ + +/** + * ********************************************************************* + *
+ * Copyright 2019 Jochen Staerk + *
+ * Use is subject to license terms. + *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0. + *
+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + *
+ * See the License for the specific language governing permissions and + * limitations under the License. + *
+ * **********************************************************************
+ */
+package org.mustangproject.ZUGFeRD;
+
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+import org.mustangproject.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class PDFAWriteTest extends ResourceCase {
+ final String TARGET_PDF_FROM_A3 = "./target/testout-PDFA3FromA3.pdf";
+ final String TARGET_PDF_FROM_A3_UNKNOWN = "./target/testout-PDFA3FromUnkownA3.pdf";
+ final String TARGET_PDF_FROM_A1_UNKNOWN = "./target/testout-PDFA3FromUnkownA1.pdf";
+ public void testA3KnownExport() {
+ // test creating factur-x invoices to french authorities, i.e. with SIRET number
+ // the writing part
+ TradeParty recipient = new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE");
+ Invoice i = createInvoice(recipient);
+ File tempFile = getResourceAsFile("MustangGnuaccountingBeispielRE-20201121_508blankoA3.pdf");//a3
+ int exceptions=0;
+ try {
+ ZUGFeRDExporterFromA3 zea3 = new ZUGFeRDExporterFromA3().load(tempFile.getAbsolutePath());
+
+ zea3.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date())
+ .setSender(new TradeParty("Test", "teststr", "55232", "teststadt", "DE").addBankDetails(new BankDetails("777666555", "DE4321"))).setOwnTaxID("4711").setOwnVATID("DE19990815")
+ .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")
+ .setContact(new Contact("nameRep", "phoneRep", "emailRep@test.com"))).setNumber("X12")
+ .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), new BigDecimal(2.5), new BigDecimal(1.0))));
+
+ zea3.export(TARGET_PDF_FROM_A3);
+
+ } catch (IOException e) {
+ exceptions++;
+ }
+ assertTrue(exceptions==0);
+
+ }
+ public void testA3UnknownExport() {
+ // test creating factur-x invoices to french authorities, i.e. with SIRET number
+ // the writing part
+ TradeParty recipient = new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE");
+ Invoice i = createInvoice(recipient);
+
+ File tempFile = getResourceAsFile("MustangGnuaccountingBeispielRE-20201121_508blankoA3.pdf");
+ int exceptions=0;
+ try {
+ ZUGFeRDExporterFromA1 zea3 = new ZUGFeRDExporterFromA1().load(tempFile.getAbsolutePath());
+ zea3.setTransaction(i);
+ zea3.export(TARGET_PDF_FROM_A3_UNKNOWN);
+
+ } catch (IOException e) {
+ exceptions++;
+ }
+ assertTrue(exceptions==0);
+
+ }
+
+ public void testA3UnknownExportFromA1() {
+ // test creating factur-x invoices to french authorities, i.e. with SIRET number
+ // the writing part
+ TradeParty recipient = new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE");
+ Invoice i = createInvoice(recipient);
+ File tempFile = getResourceAsFile("MustangGnuaccountingBeispielRE-20201121_508blanko.pdf");
+ int exceptions=0;
+ try {
+ IZUGFeRDExporter zea3 = new ZUGFeRDExporterFromPDFA().load(tempFile.getAbsolutePath());
+ zea3.setTransaction(i);
+ zea3.setProfile(Profiles.getByName("EN16931"));
+ zea3.export(TARGET_PDF_FROM_A1_UNKNOWN);
+
+ } catch (IOException e) {
+ exceptions++;
+ }
+ assertTrue(exceptions==0);
+
+ }
+
+ private Invoice createInvoice(TradeParty recipient) {
+ String orgname = "Test company";
+ String number = "123";
+ String amountStr = "1.00";
+ BigDecimal amount = new BigDecimal(amountStr);
+ return new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date())
+ .setSender(new TradeParty(orgname,"teststr","55232","teststadt","DE").addTaxID("DE4711").addVATID("DE0815").setContact(new Contact("Hans Test","+49123456789","test@example.org")).addBankDetails(new BankDetails("DE12500105170648489890","COBADEFXXX")))
+ .setRecipient(recipient)
+ .setReferenceNumber("991-01484-64")//leitweg-id
+ // not using any VAT, this is also a test of zero-rated goods:
+ .setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", BigDecimal.ZERO), amount, new BigDecimal(1.0)));
+ }
+
+}
diff --git a/library/src/test/resources/MustangGnuaccountingBeispielRE-20201121_508blankoA3.pdf b/library/src/test/resources/MustangGnuaccountingBeispielRE-20201121_508blankoA3.pdf
new file mode 100644
index 00000000..9a0ef0fe
Binary files /dev/null and b/library/src/test/resources/MustangGnuaccountingBeispielRE-20201121_508blankoA3.pdf differ
diff --git a/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java b/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java
index f1376f0e..f267b094 100644
--- a/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java
+++ b/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java
@@ -8,6 +8,47 @@
public class PDFValidatorTest extends ResourceCase {
private static final Logger LOGGER = LoggerFactory.getLogger(ZUGFeRDValidator.class.getCanonicalName()); // log
+ public void testPDFPotentialA3SourceValidation() {
+ final ValidationContext vc = new ValidationContext(null);
+ final PDFValidator pv = new PDFValidator(vc);
+
+ try {
+
+ File tempFile = new File("../library/target/testout-PDFA3FromA3.pdf");
+ assertTrue(tempFile.exists());
+
+ pv.setFilename(tempFile.getAbsolutePath());
+ pv.validate();
+ String actual = pv.getXMLResult();
+ assertEquals(true, actual.contains("summary status=\"valid"));
+ assertEquals(false, actual.contains("summary status=\"invalid"));
+
+
+ tempFile = new File("../library/target/testout-PDFA3FromUnkownA3.pdf");
+ assertTrue(tempFile.exists());
+
+ pv.setFilename(tempFile.getAbsolutePath());
+ vc.clear();
+ pv.validate();
+ actual = pv.getXMLResult();
+ assertEquals(true, actual.contains("summary status=\"valid"));
+ assertEquals(false, actual.contains("summary status=\"invalid"));
+
+ tempFile = new File("../library/target/testout-PDFA3FromUnkownA1.pdf");
+ assertTrue(tempFile.exists());
+
+ pv.setFilename(tempFile.getAbsolutePath());
+ vc.clear();
+ pv.validate();
+ actual = pv.getXMLResult();
+ assertEquals(true, actual.contains("summary status=\"valid"));
+ assertEquals(false, actual.contains("summary status=\"invalid"));
+
+ } catch (final IrrecoverableValidationError e) {
+ // ignore, will be in XML output anyway
+ }
+
+ }
public void testPDFValidation() {
final ValidationContext vc = new ValidationContext(null);
final PDFValidator pv = new PDFValidator(vc);
@@ -36,7 +77,7 @@ public void testPDFValidation() {
assertEquals(true, actual.contains("validationReport profileName=\"PDF/A-3"));
assertEquals(true, actual.contains("batchSummary totalJobs=\"1\" failedToParse=\"0\" encrypted=\"0\""));
assertEquals(true,
- actual.contains("validationReports compliant=\"1\" nonCompliant=\"0\" failedJobs=\"0\">"));
+ actual.contains("validationReports compliant=\"1\" nonCompliant=\"0\" failedJobs=\"0\">"));
// test some xml
// assertEquals(true, actual.contains("