Fix tests

This commit is contained in:
Thomas Chojecki
2015-02-21 18:09:36 +01:00
parent 5329fd378b
commit b66a404212
4 changed files with 712 additions and 602 deletions

View File

@@ -1,8 +1,7 @@
package org.mustangproject.ZUGFeRD; package org.mustangproject.ZUGFeRD;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@@ -15,370 +14,426 @@ import junit.framework.TestCase;
import junit.framework.TestSuite; import junit.framework.TestSuite;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.jempbox.xmp.*; import org.junit.FixMethodOrder;
import org.junit.*;
import org.junit.runners.MethodSorters; import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING) @FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExportableTransaction { public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExportableTransaction
{
@Override
public Date getDeliveryDate() { @Override
return new GregorianCalendar(2014, Calendar.JULY, 3).getTime(); public Date getDeliveryDate()
} {
return new GregorianCalendar(2014, Calendar.JULY, 3).getTime();
@Override }
public Date getDueDate() {
return new GregorianCalendar(2014, Calendar.JULY, 24).getTime(); @Override
} public Date getDueDate()
{
@Override return new GregorianCalendar(2014, Calendar.JULY, 24).getTime();
public Date getIssueDate() { }
return new GregorianCalendar(2014, Calendar.JULY, 3).getTime();
} @Override
public Date getIssueDate()
@Override {
public String getNumber() { return new GregorianCalendar(2014, Calendar.JULY, 3).getTime();
return "RE-20140703/502"; }
}
@Override
@Override public String getNumber()
public String getOwnBIC() { {
return "COBADEFXXX"; return "RE-20140703/502";
} }
@Override @Override
public String getOwnBankName() { public String getOwnBIC()
return "Commerzbank"; {
} return "COBADEFXXX";
}
@Override
public String getOwnCountry() { @Override
return "DE"; public String getOwnBankName()
} {
return "Commerzbank";
@Override }
public String getOwnIBAN() {
return "DE88 2008 0000 0970 3757 00"; @Override
} public String getOwnCountry()
{
@Override return "DE";
public String getOwnLocation() { }
return "Stadthausen";
} @Override
public String getOwnIBAN()
@Override {
public String getOwnOrganisationName() { return "DE88 2008 0000 0970 3757 00";
return "Öäüß'\"<em>test"; }
}
@Override
@Override public String getOwnLocation()
public String getOwnStreet() { {
return "Ecke 12"; return "Stadthausen";
} }
@Override @Override
public String getOwnTaxID() { public String getOwnOrganisationName()
return "22/815/0815/4"; {
} return "Bei Spiel GmbH";
}
@Override
public String getOwnVATID() { @Override
return "DE136695976"; public String getOwnStreet()
} {
return "Ecke 12";
@Override }
public String getOwnZIP() {
return "12345"; @Override
} public String getOwnTaxID()
{
@Override return "22/815/0815/4";
public IZUGFeRDExportableContact getRecipient() { }
return new Contact();
} @Override
public String getOwnVATID()
@Override {
public BigDecimal getTotal() { return "DE136695976";
return new BigDecimal("496.00"); }
}
@Override
@Override public String getOwnZIP()
public BigDecimal getTotalGross() { {
return new BigDecimal("571.04"); return "12345";
} }
@Override @Override
public IZUGFeRDExportableItem[] getZFItems() { public IZUGFeRDExportableContact getRecipient()
Item[] allItems = new Item[3]; {
Product designProduct = new Product("", return new Contact();
"Produkt Öäüß'\"<em>test", "HUR", new BigDecimal( }
"7.000000"));
Product balloonProduct = new Product("", "Luftballon", "C62", @Override
new BigDecimal("19.000000")); public BigDecimal getTotal()
Product airProduct = new Product("", "Heiße Luft pro Liter", "LTR", {
new BigDecimal("19.000000")); return new BigDecimal("496.00");
}
allItems[0] = new Item(new BigDecimal("160"), new BigDecimal("171.20"),
new BigDecimal("1"), new BigDecimal("171.20"), designProduct); @Override
allItems[1] = new Item(new BigDecimal("0.79"), new BigDecimal("0.94"), public BigDecimal getTotalGross()
new BigDecimal("400"), new BigDecimal("376.04"), balloonProduct); {
allItems[2] = new Item(new BigDecimal("0.10"), new BigDecimal("0.12"), return new BigDecimal("571.04");
new BigDecimal("200"), new BigDecimal("23.80"), airProduct); }
return allItems;
} @Override
public IZUGFeRDExportableItem[] getZFItems()
class Contact implements IZUGFeRDExportableContact { {
Item[] allItems = new Item[3];
@Override Product designProduct = new Product("", "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung", "HUR", new BigDecimal("7.000000"));
public String getCountry() { Product balloonProduct = new Product("", "Luftballon: Bunt, ca. 500ml", "C62", new BigDecimal("19.000000"));
return "DE"; Product airProduct = new Product("", "Heiße Luft pro Liter", "LTR", new BigDecimal("19.000000"));
}
allItems[0] = new Item(new BigDecimal("160"), new BigDecimal("171.20"), new BigDecimal("1"), new BigDecimal("171.20"), designProduct);
@Override allItems[1] = new Item(new BigDecimal("0.79"), new BigDecimal("0.94"), new BigDecimal("400"), new BigDecimal("376.04"), balloonProduct);
public String getLocation() { allItems[2] = new Item(new BigDecimal("0.10"), new BigDecimal("0.12"), new BigDecimal("200"), new BigDecimal("23.80"), airProduct);
return "Spielkreis"; return allItems;
} }
@Override class Contact implements IZUGFeRDExportableContact
public String getName() { {
return "Theodor Est";
} @Override
public String getCountry()
@Override {
public String getStreet() { return "DE";
return "Bahnstr. 42"; }
}
@Override
@Override public String getLocation()
public String getVATID() { {
return "DE999999999"; return "Spielkreis";
} }
@Override @Override
public String getZIP() { public String getName()
return "88802"; {
} return "Theodor Est";
} }
class Item implements IZUGFeRDExportableItem { @Override
public String getStreet()
public Item(BigDecimal price, BigDecimal priceGross, {
BigDecimal quantity, BigDecimal totalGross, Product product) { return "Bahnstr. 42";
super(); }
this.price = price;
this.priceGross = priceGross; @Override
this.quantity = quantity; public String getVATID()
this.totalGross = totalGross; {
this.product = product; return "DE999999999";
} }
private BigDecimal price, priceGross, quantity, totalGross; @Override
private Product product; public String getZIP()
{
public BigDecimal getPrice() { return "88802";
return price; }
} }
public void setPrice(BigDecimal price) { class Item implements IZUGFeRDExportableItem
this.price = price; {
}
public Item(BigDecimal price, BigDecimal priceGross, BigDecimal quantity, BigDecimal totalGross, Product product)
public BigDecimal getPriceGross() { {
return priceGross; super();
} this.price = price;
this.priceGross = priceGross;
public void setPriceGross(BigDecimal priceGross) { this.quantity = quantity;
this.priceGross = priceGross; this.totalGross = totalGross;
} this.product = product;
}
public BigDecimal getQuantity() {
return quantity; private BigDecimal price, priceGross, quantity, totalGross;
} private Product product;
public void setQuantity(BigDecimal quantity) { @Override
this.quantity = quantity; public BigDecimal getPrice()
} {
return price;
public BigDecimal getTotalGross() { }
return totalGross;
} public void setPrice(BigDecimal price)
{
public void setTotalGross(BigDecimal totalGross) { this.price = price;
this.totalGross = totalGross; }
}
@Override
public Product getProduct() { public BigDecimal getPriceGross()
return product; {
} return priceGross;
}
public void setProduct(Product product) {
this.product = product; public void setPriceGross(BigDecimal priceGross)
} {
this.priceGross = priceGross;
} }
class Product implements IZUGFeRDExportableProduct { @Override
private String description, name, unit; public BigDecimal getQuantity()
private BigDecimal VATPercent; {
return quantity;
public Product(String description, String name, String unit, }
BigDecimal VATPercent) {
super(); public void setQuantity(BigDecimal quantity)
this.description = description; {
this.name = name; this.quantity = quantity;
this.unit = unit; }
this.VATPercent = VATPercent;
} @Override
public BigDecimal getTotalGross()
public String getDescription() { {
return description; return totalGross;
} }
public void setDescription(String description) { public void setTotalGross(BigDecimal totalGross)
this.description = description; {
} this.totalGross = totalGross;
}
public String getName() {
return name; @Override
} public Product getProduct()
{
public void setName(String name) { return product;
this.name = name; }
}
public void setProduct(Product product)
public String getUnit() { {
return unit; this.product = product;
} }
public void setUnit(String unit) { }
this.unit = unit;
} class Product implements IZUGFeRDExportableProduct
{
public BigDecimal getVATPercent() { private String description, name, unit;
return VATPercent; private BigDecimal VATPercent;
}
public Product(String description, String name, String unit, BigDecimal VATPercent)
public void setVATPercent(BigDecimal vATPercent) { {
VATPercent = vATPercent; super();
} this.description = description;
this.name = name;
} this.unit = unit;
this.VATPercent = VATPercent;
}
/**
* Create the test case @Override
* public String getDescription()
* @param testName {
* name of the test case return description;
*/ }
public MustangReaderWriterEdgeTest(String testName) {
super(testName); public void setDescription(String description)
} {
this.description = description;
/** }
* @return the suite of tests being tested
*/ @Override
public static Test suite() { public String getName()
return new TestSuite(MustangReaderWriterEdgeTest.class); {
} return name;
}
////////// TESTS //////////////////////////////////////////////////////////////////////////////////////////
public void setName(String name)
/** {
* The importer test imports from ./src/test/MustangGnuaccountingBeispielRE-20140703_502.pdf to check the values. this.name = name;
* }
* --> as only Name Ascending is supported for Test Unit sequence, I renamed the this test-A-Export to run before testZExport
*/ @Override
public String getUnit()
public void testAImport() { {
ZUGFeRDImporter zi = new ZUGFeRDImporter(); return unit;
zi.extract("./src/test/MustangGnuaccountingBeispielRE-20140703_502.pdf"); }
// Reading ZUGFeRD
public void setUnit(String unit)
String amount=null; {
String bic=null; this.unit = unit;
String iban=null; }
String holder=null;
String ref=null; @Override
public BigDecimal getVATPercent()
if (zi.canParse()) { {
zi.parse(); return VATPercent;
amount=zi.getAmount(); }
bic=zi.getBIC();
iban=zi.getIBAN(); public void setVATPercent(BigDecimal vATPercent)
holder=zi.getHolder(); {
ref=zi.getForeignReference(); VATPercent = vATPercent;
} }
}
assertEquals(amount, getTotalGross());
assertEquals(bic, getOwnBIC()); /**
assertEquals(iban, getOwnIBAN()); * Create the test case
assertEquals(holder, getOwnOrganisationName()); *
assertEquals(ref, getNumber()); * @param testName
* name of the test case
*/
} public MustangReaderWriterEdgeTest(String testName)
{
super(testName);
/** }
* The exporter test bases on @{code ./src/test/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf}, adds metadata, writes
* to @{code ./target/testout-*} and then imports to check the values. /**
* * @return the suite of tests being tested
* It would not make sense to have it run before the less complex importer test (which is probably redundant) */
* --> as only Name Ascending is supported for Test Unit sequence, I renamed the Exporter Test test-Z-Export public static Test suite()
*/ {
public void testZExport() { return new TestSuite(MustangReaderWriterEdgeTest.class);
final String SOURCE_PDF = "./src/test/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf"; }
final String TARGET_PDF = "./target/testout-MustangGnuaccountingBeispielRE-20140703_502newEdge.pdf";
// the writing part // //////// TESTS //////////////////////////////////////////////////////////////////////////////////////////
PDDocument doc; /**
try { * The importer test imports from ./src/test/MustangGnuaccountingBeispielRE-20140703_502.pdf to check the values.
doc = PDDocument.load(SOURCE_PDF); * --> as only Name Ascending is supported for Test Unit sequence, I renamed the this test-A-Export to run before
// automatically add Zugferd to all outgoing invoices * testZExport
ZUGFeRDExporter ze = new ZUGFeRDExporter(); *
ze.PDFmakeA3compliant(doc, "My Application", * @throws IOException
System.getProperty("user.name"), true); */
ze.PDFattachZugferdFile(doc, this);
doc.save(TARGET_PDF); public void testAImport() throws IOException
} catch (IOException e) { {
e.printStackTrace(); ZUGFeRDImporter zi = new ZUGFeRDImporter();
} catch (TransformerException e) { zi.extractLowLevel(this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20140703_502.pdf"));
e.printStackTrace(); // Reading ZUGFeRD
} catch (Exception e) {
e.printStackTrace(); String amount = null;
} String bic = null;
String iban = null;
String holder = null;
// now check the contents (like MustangReaderTest) String ref = null;
ZUGFeRDImporter zi = new ZUGFeRDImporter();
zi.extract(TARGET_PDF); if (zi.canParse())
// Reading ZUGFeRD {
zi.parse();
String amount=null; amount = zi.getAmount();
String bic=null; bic = zi.getBIC();
String iban=null; iban = zi.getIBAN();
String holder=null; holder = zi.getHolder();
String ref=null; ref = zi.getForeignReference();
}
if (zi.canParse()) {
zi.parse(); assertEquals(amount, getTotalGross().toString());
amount=zi.getAmount(); assertEquals(bic, getOwnBIC());
bic=zi.getBIC(); assertEquals(iban, getOwnIBAN());
iban=zi.getIBAN(); assertEquals(holder, getOwnOrganisationName());
holder=zi.getHolder(); assertEquals(ref, getNumber());
ref=zi.getForeignReference();
} }
/**
assertEquals(amount, getTotalGross()); * The exporter test bases on @{code ./src/test/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf}, adds metadata,
assertEquals(bic, getOwnBIC()); * writes
assertEquals(iban, getOwnIBAN()); * to @{code ./target/testout-*} and then imports to check the values.
assertEquals(holder, getOwnOrganisationName()); * It would not make sense to have it run before the less complex importer test (which is probably redundant)
assertEquals(ref, getNumber()); * --> as only Name Ascending is supported for Test Unit sequence, I renamed the Exporter Test test-Z-Export
*/
public void testZExport()
} {
final InputStream SOURCE_PDF = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf");
final String TARGET_PDF = "./target/testout-MustangGnuaccountingBeispielRE-20140703_502newEdge.pdf";
// the writing part
PDDocument doc;
try
{
doc = PDDocument.load(SOURCE_PDF);
// automatically add Zugferd to all outgoing invoices
ZUGFeRDExporter ze = new ZUGFeRDExporter();
ze.PDFmakeA3compliant(doc, "My Application", System.getProperty("user.name"), true);
ze.PDFattachZugferdFile(doc, this);
doc.save(TARGET_PDF);
doc.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (TransformerException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
// now check the contents (like MustangReaderTest)
ZUGFeRDImporter zi = new ZUGFeRDImporter();
zi.extract(TARGET_PDF);
// Reading ZUGFeRD
String amount = null;
String bic = null;
String iban = null;
String holder = null;
String ref = null;
if (zi.canParse())
{
zi.parse();
amount = zi.getAmount();
bic = zi.getBIC();
iban = zi.getIBAN();
holder = zi.getHolder();
ref = zi.getForeignReference();
}
assertEquals(amount, getTotalGross().toString());
assertEquals(bic, getOwnBIC());
assertEquals(iban, getOwnIBAN());
assertEquals(holder, getOwnOrganisationName());
assertEquals(ref, getNumber());
}
} }

View File

@@ -1,8 +1,7 @@
package org.mustangproject.ZUGFeRD; package org.mustangproject.ZUGFeRD;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@@ -15,370 +14,426 @@ import junit.framework.TestCase;
import junit.framework.TestSuite; import junit.framework.TestSuite;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.jempbox.xmp.*; import org.junit.FixMethodOrder;
import org.junit.*;
import org.junit.runners.MethodSorters; import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING) @FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExportableTransaction { public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExportableTransaction
{
@Override
public Date getDeliveryDate() { @Override
return new GregorianCalendar(2014, Calendar.JULY, 3).getTime(); public Date getDeliveryDate()
} {
return new GregorianCalendar(2014, Calendar.JULY, 3).getTime();
@Override }
public Date getDueDate() {
return new GregorianCalendar(2014, Calendar.JULY, 24).getTime(); @Override
} public Date getDueDate()
{
@Override return new GregorianCalendar(2014, Calendar.JULY, 24).getTime();
public Date getIssueDate() { }
return new GregorianCalendar(2014, Calendar.JULY, 3).getTime();
} @Override
public Date getIssueDate()
@Override {
public String getNumber() { return new GregorianCalendar(2014, Calendar.JULY, 3).getTime();
return "RE-20140703/502"; }
}
@Override
@Override public String getNumber()
public String getOwnBIC() { {
return "COBADEFXXX"; return "RE-20140703/502";
} }
@Override @Override
public String getOwnBankName() { public String getOwnBIC()
return "Commerzbank"; {
} return "COBADEFXXX";
}
@Override
public String getOwnCountry() { @Override
return "DE"; public String getOwnBankName()
} {
return "Commerzbank";
@Override }
public String getOwnIBAN() {
return "DE88 2008 0000 0970 3757 00"; @Override
} public String getOwnCountry()
{
@Override return "DE";
public String getOwnLocation() { }
return "Stadthausen";
} @Override
public String getOwnIBAN()
@Override {
public String getOwnOrganisationName() { return "DE88 2008 0000 0970 3757 00";
return "Bei Spiel GmbH"; }
}
@Override
@Override public String getOwnLocation()
public String getOwnStreet() { {
return "Ecke 12"; return "Stadthausen";
} }
@Override @Override
public String getOwnTaxID() { public String getOwnOrganisationName()
return "22/815/0815/4"; {
} return "Bei Spiel GmbH";
}
@Override
public String getOwnVATID() { @Override
return "DE136695976"; public String getOwnStreet()
} {
return "Ecke 12";
@Override }
public String getOwnZIP() {
return "12345"; @Override
} public String getOwnTaxID()
{
@Override return "22/815/0815/4";
public IZUGFeRDExportableContact getRecipient() { }
return new Contact();
} @Override
public String getOwnVATID()
@Override {
public BigDecimal getTotal() { return "DE136695976";
return new BigDecimal("496.00"); }
}
@Override
@Override public String getOwnZIP()
public BigDecimal getTotalGross() { {
return new BigDecimal("571.04"); return "12345";
} }
@Override @Override
public IZUGFeRDExportableItem[] getZFItems() { public IZUGFeRDExportableContact getRecipient()
Item[] allItems = new Item[3]; {
Product designProduct = new Product("", return new Contact();
"Künstlerische Gestaltung (Stunde)", "HUR", new BigDecimal( }
"7.000000"));
Product balloonProduct = new Product("", "Luftballon", "C62", @Override
new BigDecimal("19.000000")); public BigDecimal getTotal()
Product airProduct = new Product("", "Heiße Luft pro Liter", "LTR", {
new BigDecimal("19.000000")); return new BigDecimal("496.00");
}
allItems[0] = new Item(new BigDecimal("160"), new BigDecimal("171.20"),
new BigDecimal("1"), new BigDecimal("171.20"), designProduct); @Override
allItems[1] = new Item(new BigDecimal("0.79"), new BigDecimal("0.94"), public BigDecimal getTotalGross()
new BigDecimal("400"), new BigDecimal("376.04"), balloonProduct); {
allItems[2] = new Item(new BigDecimal("0.10"), new BigDecimal("0.12"), return new BigDecimal("571.04");
new BigDecimal("200"), new BigDecimal("23.80"), airProduct); }
return allItems;
} @Override
public IZUGFeRDExportableItem[] getZFItems()
class Contact implements IZUGFeRDExportableContact { {
Item[] allItems = new Item[3];
@Override Product designProduct = new Product("", "Künstlerische Gestaltung (Stunde)", "HUR", new BigDecimal("7.000000"));
public String getCountry() { Product balloonProduct = new Product("", "Luftballon", "C62", new BigDecimal("19.000000"));
return "DE"; Product airProduct = new Product("", "Heiße Luft pro Liter", "LTR", new BigDecimal("19.000000"));
}
allItems[0] = new Item(new BigDecimal("160"), new BigDecimal("171.20"), new BigDecimal("1"), new BigDecimal("171.20"), designProduct);
@Override allItems[1] = new Item(new BigDecimal("0.79"), new BigDecimal("0.94"), new BigDecimal("400"), new BigDecimal("376.04"), balloonProduct);
public String getLocation() { allItems[2] = new Item(new BigDecimal("0.10"), new BigDecimal("0.12"), new BigDecimal("200"), new BigDecimal("23.80"), airProduct);
return "Spielkreis"; return allItems;
} }
@Override class Contact implements IZUGFeRDExportableContact
public String getName() { {
return "Theodor Est";
} @Override
public String getCountry()
@Override {
public String getStreet() { return "DE";
return "Bahnstr. 42"; }
}
@Override
@Override public String getLocation()
public String getVATID() { {
return "DE999999999"; return "Spielkreis";
} }
@Override @Override
public String getZIP() { public String getName()
return "88802"; {
} return "Theodor Est";
} }
class Item implements IZUGFeRDExportableItem { @Override
public String getStreet()
public Item(BigDecimal price, BigDecimal priceGross, {
BigDecimal quantity, BigDecimal totalGross, Product product) { return "Bahnstr. 42";
super(); }
this.price = price;
this.priceGross = priceGross; @Override
this.quantity = quantity; public String getVATID()
this.totalGross = totalGross; {
this.product = product; return "DE999999999";
} }
private BigDecimal price, priceGross, quantity, totalGross; @Override
private Product product; public String getZIP()
{
public BigDecimal getPrice() { return "88802";
return price; }
} }
public void setPrice(BigDecimal price) { class Item implements IZUGFeRDExportableItem
this.price = price; {
}
public Item(BigDecimal price, BigDecimal priceGross, BigDecimal quantity, BigDecimal totalGross, Product product)
public BigDecimal getPriceGross() { {
return priceGross; super();
} this.price = price;
this.priceGross = priceGross;
public void setPriceGross(BigDecimal priceGross) { this.quantity = quantity;
this.priceGross = priceGross; this.totalGross = totalGross;
} this.product = product;
}
public BigDecimal getQuantity() {
return quantity; private BigDecimal price, priceGross, quantity, totalGross;
} private Product product;
public void setQuantity(BigDecimal quantity) { @Override
this.quantity = quantity; public BigDecimal getPrice()
} {
return price;
public BigDecimal getTotalGross() { }
return totalGross;
} public void setPrice(BigDecimal price)
{
public void setTotalGross(BigDecimal totalGross) { this.price = price;
this.totalGross = totalGross; }
}
@Override
public Product getProduct() { public BigDecimal getPriceGross()
return product; {
} return priceGross;
}
public void setProduct(Product product) {
this.product = product; public void setPriceGross(BigDecimal priceGross)
} {
this.priceGross = priceGross;
} }
class Product implements IZUGFeRDExportableProduct { @Override
private String description, name, unit; public BigDecimal getQuantity()
private BigDecimal VATPercent; {
return quantity;
public Product(String description, String name, String unit, }
BigDecimal VATPercent) {
super(); public void setQuantity(BigDecimal quantity)
this.description = description; {
this.name = name; this.quantity = quantity;
this.unit = unit; }
this.VATPercent = VATPercent;
} @Override
public BigDecimal getTotalGross()
public String getDescription() { {
return description; return totalGross;
} }
public void setDescription(String description) { public void setTotalGross(BigDecimal totalGross)
this.description = description; {
} this.totalGross = totalGross;
}
public String getName() {
return name; @Override
} public Product getProduct()
{
public void setName(String name) { return product;
this.name = name; }
}
public void setProduct(Product product)
public String getUnit() { {
return unit; this.product = product;
} }
public void setUnit(String unit) { }
this.unit = unit;
} class Product implements IZUGFeRDExportableProduct
{
public BigDecimal getVATPercent() { private String description, name, unit;
return VATPercent; private BigDecimal VATPercent;
}
public Product(String description, String name, String unit, BigDecimal VATPercent)
public void setVATPercent(BigDecimal vATPercent) { {
VATPercent = vATPercent; super();
} this.description = description;
this.name = name;
} this.unit = unit;
this.VATPercent = VATPercent;
}
/**
* Create the test case @Override
* public String getDescription()
* @param testName {
* name of the test case return description;
*/ }
public MustangReaderWriterTest(String testName) {
super(testName); public void setDescription(String description)
} {
this.description = description;
/** }
* @return the suite of tests being tested
*/ @Override
public static Test suite() { public String getName()
return new TestSuite(MustangReaderWriterTest.class); {
} return name;
}
////////// TESTS //////////////////////////////////////////////////////////////////////////////////////////
public void setName(String name)
/** {
* The importer test imports from ./src/test/MustangGnuaccountingBeispielRE-20140703_502.pdf to check the values. this.name = name;
* }
* --> as only Name Ascending is supported for Test Unit sequence, I renamed the this test-A-Export to run before testZExport
*/ @Override
public String getUnit()
public void testAImport() { {
ZUGFeRDImporter zi = new ZUGFeRDImporter(); return unit;
zi.extract("./src/test/MustangGnuaccountingBeispielRE-20140703_502.pdf"); }
// Reading ZUGFeRD
public void setUnit(String unit)
String amount=null; {
String bic=null; this.unit = unit;
String iban=null; }
String holder=null;
String ref=null; @Override
public BigDecimal getVATPercent()
if (zi.canParse()) { {
zi.parse(); return VATPercent;
amount=zi.getAmount(); }
bic=zi.getBIC();
iban=zi.getIBAN(); public void setVATPercent(BigDecimal vATPercent)
holder=zi.getHolder(); {
ref=zi.getForeignReference(); VATPercent = vATPercent;
} }
}
assertEquals(amount, getTotalGross());
assertEquals(bic, getOwnBIC()); /**
assertEquals(iban, getOwnIBAN()); * Create the test case
assertEquals(holder, getOwnOrganisationName()); *
assertEquals(ref, getNumber()); * @param testName
* name of the test case
*/
} public MustangReaderWriterTest(String testName)
{
super(testName);
/** }
* The exporter test bases on @{code ./src/test/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf}, adds metadata, writes
* to @{code ./target/testout-*} and then imports to check the values. /**
* * @return the suite of tests being tested
* It would not make sense to have it run before the less complex importer test (which is probably redundant) */
* --> as only Name Ascending is supported for Test Unit sequence, I renamed the Exporter Test test-Z-Export public static Test suite()
*/ {
public void testZExport() { return new TestSuite(MustangReaderWriterTest.class);
final String SOURCE_PDF = "./src/test/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf"; }
final String TARGET_PDF = "./target/testout-MustangGnuaccountingBeispielRE-20140703_502new.pdf";
// //////// TESTS //////////////////////////////////////////////////////////////////////////////////////////
// the writing part
PDDocument doc; /**
try { * The importer test imports from ./src/test/MustangGnuaccountingBeispielRE-20140703_502.pdf to check the values.
doc = PDDocument.load(SOURCE_PDF); * --> as only Name Ascending is supported for Test Unit sequence, I renamed the this test-A-Export to run before
// automatically add Zugferd to all outgoing invoices * testZExport
ZUGFeRDExporter ze = new ZUGFeRDExporter(); *
ze.PDFmakeA3compliant(doc, "My Application", * @throws IOException
System.getProperty("user.name"), true); */
ze.PDFattachZugferdFile(doc, this);
doc.save(TARGET_PDF); public void testAImport() throws IOException
} catch (IOException e) { {
e.printStackTrace(); ZUGFeRDImporter zi = new ZUGFeRDImporter();
} catch (TransformerException e) { InputStream inputStream = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20140703_502.pdf");
e.printStackTrace(); zi.extractLowLevel(inputStream);
} catch (Exception e) { // Reading ZUGFeRD
e.printStackTrace();
} String amount = null;
String bic = null;
String iban = null;
// now check the contents (like MustangReaderTest) String holder = null;
ZUGFeRDImporter zi = new ZUGFeRDImporter(); String ref = null;
zi.extract(TARGET_PDF);
// Reading ZUGFeRD if (zi.canParse())
{
String amount=null; zi.parse();
String bic=null; amount = zi.getAmount();
String iban=null; bic = zi.getBIC();
String holder=null; iban = zi.getIBAN();
String ref=null; holder = zi.getHolder();
ref = zi.getForeignReference();
if (zi.canParse()) { }
zi.parse();
amount=zi.getAmount(); assertEquals(amount, getTotalGross().toString());
bic=zi.getBIC(); assertEquals(bic, getOwnBIC());
iban=zi.getIBAN(); assertEquals(iban, getOwnIBAN());
holder=zi.getHolder(); assertEquals(holder, getOwnOrganisationName());
ref=zi.getForeignReference(); assertEquals(ref, getNumber());
}
}
assertEquals(amount, getTotalGross()); /**
assertEquals(bic, getOwnBIC()); * The exporter test bases on @{code ./src/test/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf}, adds metadata,
assertEquals(iban, getOwnIBAN()); * writes
assertEquals(holder, getOwnOrganisationName()); * to @{code ./target/testout-*} and then imports to check the values.
assertEquals(ref, getNumber()); * It would not make sense to have it run before the less complex importer test (which is probably redundant)
* --> as only Name Ascending is supported for Test Unit sequence, I renamed the Exporter Test test-Z-Export
*/
} public void testZExport()
{
final InputStream SOURCE_PDF = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf");
final String TARGET_PDF = "./target/testout-MustangGnuaccountingBeispielRE-20140703_502new.pdf";
// the writing part
PDDocument doc;
try
{
doc = PDDocument.load(SOURCE_PDF);
// automatically add Zugferd to all outgoing invoices
ZUGFeRDExporter ze = new ZUGFeRDExporter();
ze.PDFmakeA3compliant(doc, "My Application", System.getProperty("user.name"), true);
ze.PDFattachZugferdFile(doc, this);
doc.save(TARGET_PDF);
doc.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (TransformerException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
// now check the contents (like MustangReaderTest)
ZUGFeRDImporter zi = new ZUGFeRDImporter();
zi.extract(TARGET_PDF);
// Reading ZUGFeRD
String amount = null;
String bic = null;
String iban = null;
String holder = null;
String ref = null;
if (zi.canParse())
{
zi.parse();
amount = zi.getAmount();
bic = zi.getBIC();
iban = zi.getIBAN();
holder = zi.getHolder();
ref = zi.getForeignReference();
}
assertEquals(amount, getTotalGross().toString());
assertEquals(bic, getOwnBIC());
assertEquals(iban, getOwnIBAN());
assertEquals(holder, getOwnOrganisationName());
assertEquals(ref, getNumber());
}
} }