package io.konik.calculation; import io.konik.InvoiceTransformer; import io.konik.zugferd.Invoice; import io.konik.zugferd.entity.trade.item.SpecifiedMonetarySummation; import org.junit.Test; import java.io.InputStream; import java.math.BigDecimal; import static org.assertj.core.api.Assertions.assertThat; public class InvoiceCalculatorTest { @Test public void shouldCorrectInvoiceMonetarySummationAndItemsSpecifiedMonetarySummations() { //given: InputStream xml = getClass().getResourceAsStream("/ZUGFeRD_Invoice_with_discounts_and_charges.xml"); InvoiceTransformer transformer = new InvoiceTransformer(); Invoice invoice = transformer.toModel(xml); InvoiceCalculator corrector = new InvoiceCalculator(invoice); //when: Invoice corrected = corrector.complete(); //then: assertThat(invoice.getTrade().getSettlement().getMonetarySummation()) .isNotEqualTo(corrected.getTrade().getSettlement().getMonetarySummation()); for (int i = 0; i < invoice.getTrade().getItems().size(); i++) { SpecifiedMonetarySummation monetarySummation = invoice.getTrade().getItems().get(i).getSettlement().getMonetarySummation(); if (monetarySummation != null) { assertThat(monetarySummation) .isNotEqualTo(corrected.getTrade().getItems().get(i).getSettlement().getMonetarySummation()); } } } @Test public void shouldCorrectInvoiceTradeTaxList() { //given: InputStream xml = getClass().getResourceAsStream("/ZUGFeRD-without-trade-tax.xml"); InvoiceTransformer transformer = new InvoiceTransformer(); Invoice invoice = transformer.toModel(xml); InvoiceCalculator corrector = new InvoiceCalculator(invoice); //when: Invoice corrected = corrector.complete(); //then: assertThat(invoice.getTrade().getSettlement().getTradeTax()).isEmpty(); assertThat(corrected.getTrade().getSettlement().getTradeTax()).hasSize(1); assertThat(corrected.getTrade().getSettlement().getTradeTax().get(0).getCalculated().getValue()).isEqualByComparingTo(BigDecimal.valueOf(2.40)); assertThat(corrected.getTrade().getSettlement().getTradeTax().get(0).getBasis().getValue()).isEqualByComparingTo(BigDecimal.valueOf(30.0)); assertThat(corrected.getTrade().getSettlement().getTradeTax().get(0).getPercentage()).isEqualByComparingTo(BigDecimal.valueOf(8.0)); } }