package io.konik.validation; import com.neovisionaries.i18n.CurrencyCode; import io.konik.zugferd.entity.GrossPrice; import io.konik.zugferd.entity.Price; import io.konik.zugferd.entity.trade.item.Item; import io.konik.zugferd.entity.trade.item.SpecifiedAgreement; import io.konik.zugferd.entity.trade.item.SpecifiedDelivery; import io.konik.zugferd.unece.codes.UnitOfMeasurement; import io.konik.zugferd.unqualified.Amount; import io.konik.zugferd.unqualified.Quantity; 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.ItemLineTotalCalculator; 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 ItemLineTotalCalculatorTest { private static final CurrencyCode CURRENCY = CurrencyCode.USD; @Parameters(name = "Calculating line total for case {index}: {0} USD x {1} = {2} USD") public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ { BigDecimal.ONE, BigDecimal.ONE, BigDecimal.ONE }, { BigDecimal.valueOf(9.99), BigDecimal.ONE, BigDecimal.valueOf(9.99) }, { BigDecimal.valueOf(0.43), BigDecimal.valueOf(25), BigDecimal.valueOf(10.75) } }); } @Parameter public BigDecimal netPrice; @Parameter(1) public BigDecimal quantity; @Parameter(2) public BigDecimal expectedLineTotal; @Test public void test() { //given: Item item = createItem(); ItemLineTotalCalculator calculator = new ItemLineTotalCalculator(); //when: Amount amount = calculator.apply(item); //then: assertThat(amount.getValue()).isEqualByComparingTo(expectedLineTotal); } private Item createItem() { Item item = new Item(); SpecifiedDelivery delivery = new SpecifiedDelivery(); delivery.setBilled(new Quantity(quantity, UnitOfMeasurement.UNIT)); SpecifiedAgreement agreement = new SpecifiedAgreement(); agreement.setGrossPrice(new GrossPrice(new Amount(netPrice, CURRENCY))); agreement.setNetPrice(new Price(new Amount(netPrice, CURRENCY))); item.setDelivery(delivery); item.setAgreement(agreement); return item; } }