package io.konik.validation;
import io.konik.zugferd.entity.Tax;
import io.konik.zugferd.entity.trade.TradeTax;
import io.konik.zugferd.unece.codes.TaxCategory;
import io.konik.zugferd.unece.codes.TaxCode;
import org.junit.Test;
import java.math.BigDecimal;
import static io.konik.validation.AmountCalculator.TaxAggregator;
import static org.assertj.core.api.Assertions.assertThat;
public class TaxAggregatorTest {
private Tax vat19 = new TradeTax()
.setPercentage(BigDecimal.valueOf(19))
.setType(TaxCode.VAT)
.setCategory(TaxCategory.C);
private Tax vat23 = new TradeTax()
.setPercentage(BigDecimal.valueOf(23))
.setType(TaxCode.VAT)
.setCategory(TaxCategory.C);
@Test
public void taxBasisForEmptyTaxAggregatorIsEqualToZero() {
//given:
TaxAggregator aggregator = new TaxAggregator();
//when:
BigDecimal value = aggregator.calculateTaxBasis();
//then:
assertThat(value).isEqualByComparingTo(BigDecimal.ZERO);
}
@Test
public void taxTotalForEmptyTaxAggregatorIsEqualToZero() {
//given:
TaxAggregator aggregator = new TaxAggregator();
//when:
BigDecimal value = aggregator.calculateTaxTotal();
//then:
assertThat(value).isEqualByComparingTo(BigDecimal.ZERO);
}
@Test
public void shouldCalculateTaxBasisFromAddedTaxAmounts() {
//given:
TaxAggregator aggregator = new TaxAggregator();
aggregator.add(vat19, BigDecimal.valueOf(100));
aggregator.add(vat19, BigDecimal.valueOf(54));
aggregator.add(vat19, BigDecimal.valueOf(2.34));
aggregator.add(vat23, BigDecimal.valueOf(50));
aggregator.add(vat23, BigDecimal.valueOf(99.99));
//when:
BigDecimal taxBasis = aggregator.calculateTaxBasis();
//then:
assertThat(taxBasis).isEqualByComparingTo(BigDecimal.valueOf(306.33));
}
@Test
public void shouldCalculateTaxTotalFromAddedTaxAmounts() {
//given:
TaxAggregator aggregator = new TaxAggregator();
aggregator.add(vat19, BigDecimal.valueOf(100));
aggregator.add(vat19, BigDecimal.valueOf(54));
aggregator.add(vat19, BigDecimal.valueOf(2.34));
aggregator.add(vat23, BigDecimal.valueOf(50));
aggregator.add(vat23, BigDecimal.valueOf(99.99));
//when:
BigDecimal taxBasis = aggregator.calculateTaxTotal();
//then:
assertThat(taxBasis).isEqualByComparingTo(BigDecimal.valueOf(64.20));
}
}