package co.smartreceipts.android.model;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import java.math.BigDecimal;
import java.util.Locale;
import co.smartreceipts.android.utils.TestLocaleToggler;
import co.smartreceipts.android.utils.TestUtils;
import static org.junit.Assert.assertEquals;
@RunWith(RobolectricTestRunner.class)
public class TaxItemTest {
@Before
public void setUp() throws Exception {
TestLocaleToggler.setDefaultLocale(Locale.US);
}
@After
public void tearDown() throws Exception {
TestLocaleToggler.resetDefaultLocale();
}
@Test
public void constructionTest() {
final float floatPercent = 20.2f;
final String stringPercent = "20.20";
final BigDecimal bigFloatPercent = new BigDecimal(floatPercent);
final BigDecimal bigStringPercent = new BigDecimal(stringPercent);
final TaxItem t1 = new TaxItem(floatPercent, true);
final TaxItem t2 = new TaxItem(stringPercent, true);
final TaxItem t3 = new TaxItem(bigFloatPercent, true);
final TaxItem t4 = new TaxItem(bigStringPercent, true);
final TaxItem t5 = new TaxItem(floatPercent, false);
final TaxItem t6 = new TaxItem(stringPercent, false);
final TaxItem t7 = new TaxItem(bigFloatPercent, false);
final TaxItem t8 = new TaxItem(bigStringPercent, false);
assertEquals(t2.getPercent().doubleValue(), t1.getPercent().doubleValue(), TestUtils.EPSILON);
assertEquals(t2.getPercentAsString(), t1.getPercentAsString());
assertEquals(t3.getPercent().doubleValue(), t1.getPercent().doubleValue(), TestUtils.EPSILON);
assertEquals(t3.getPercentAsString(), t1.getPercentAsString());
assertEquals(t4.getPercent().doubleValue(), t1.getPercent().doubleValue(), TestUtils.EPSILON);
assertEquals(t4.getPercentAsString(), t1.getPercentAsString());
assertEquals(t5.getPercent().doubleValue(), t1.getPercent().doubleValue(), TestUtils.EPSILON);
assertEquals(t5.getPercentAsString(), t1.getPercentAsString());
assertEquals(t6.getPercent().doubleValue(), t1.getPercent().doubleValue(), TestUtils.EPSILON);
assertEquals(t6.getPercentAsString(), t1.getPercentAsString());
assertEquals(t7.getPercent().doubleValue(), t1.getPercent().doubleValue(), TestUtils.EPSILON);
assertEquals(t7.getPercentAsString(), t1.getPercentAsString());
assertEquals(t8.getPercent().doubleValue(), t1.getPercent().doubleValue(), TestUtils.EPSILON);
assertEquals(t8.getPercentAsString(), t1.getPercentAsString());
}
@Test
public void setPriceTest() {
/* Post-Tax Formula
x = total, y = price, t = x - y, t = y * p
x = y + y * p
x = y * (1 + p)
y = x / (1 + p)
t = x - y
t = x - x / (1 + p)
t = x ( 1 - 1 / (1 + p) )
*/
final String price = "100.00";
final float percent1 = 20.25f;
final float percent2 = 50.43f;
final TaxItem preTax1 = new TaxItem(percent1, true);
final TaxItem postTax1 = new TaxItem(percent1, false);
final TaxItem preTax2 = new TaxItem(percent2, true);
final TaxItem postTax2 = new TaxItem(percent2, false);
preTax1.setPrice(price);
postTax1.setPrice(price);
preTax2.setPrice(price);
postTax2.setPrice(price);
assertEquals(preTax1.getTax().doubleValue(), 20.25d, TestUtils.EPSILON);
assertEquals(preTax1.toString(), "20.25");
assertEquals(postTax1.getTax().doubleValue(), 16.84d, TestUtils.EPSILON);
assertEquals(postTax1.toString(), "16.84");
assertEquals(preTax2.getTax().doubleValue(), 50.43d, TestUtils.EPSILON);
assertEquals(preTax2.toString(), "50.43");
assertEquals(postTax2.getTax().doubleValue(), 33.52d, TestUtils.EPSILON);
assertEquals(postTax2.toString(), "33.52");
}
}