package io.konik.validation; import com.neovisionaries.i18n.CurrencyCode; import io.konik.zugferd.entity.trade.item.Item; import io.konik.zugferd.entity.trade.item.ItemTax; import io.konik.zugferd.entity.trade.item.SpecifiedSettlement; import io.konik.zugferd.unece.codes.TaxCode; import io.konik.zugferd.unqualified.Amount; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.math.BigDecimal; import java.util.Arrays; import java.util.Collection; import static io.konik.validation.AmountCalculator.ItemTaxTotalCalculator; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.runners.Parameterized.Parameter; import static org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class ItemTaxTotalCalculatorTest { private static final CurrencyCode CURRENCY_CODE = CurrencyCode.USD; @Parameters(name = "Calculating tax amount for case {index}: {0} * {1}% = {2}") public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ { BigDecimal.valueOf(100), BigDecimal.valueOf(23), BigDecimal.valueOf(23) }, { BigDecimal.valueOf(99), BigDecimal.ZERO, BigDecimal.ZERO }, { BigDecimal.valueOf(43.12), BigDecimal.valueOf(8), BigDecimal.valueOf(3.45) } }); } @Parameter public BigDecimal lineTotal; @Parameter(1) public BigDecimal taxPercentage; @Parameter(2) public BigDecimal expectedTaxAmount; @Test public void test() { //given: Item item = createItem(); ItemTaxTotalCalculator calculator = new ItemTaxTotalCalculator(new Amount(lineTotal, CURRENCY_CODE)); //when: Amount taxTotal = calculator.apply(item); //then: assertThat(taxTotal.getValue()).isEqualByComparingTo(expectedTaxAmount); } private Item createItem() { Item item = new Item(); ItemTax tax = new ItemTax(); tax.setPercentage(taxPercentage); tax.setType(TaxCode.VAT); SpecifiedSettlement settlement = new SpecifiedSettlement(); settlement.addTradeTax(tax); item.setSettlement(settlement); return item; } }