package co.smartreceipts.android.utils;
import android.content.Context;
import junit.framework.Assert;
import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.util.TimeZone;
import co.smartreceipts.android.model.Category;
import co.smartreceipts.android.model.PriceCurrency;
import co.smartreceipts.android.model.Receipt;
import co.smartreceipts.android.model.factory.ReceiptBuilderFactory;
import co.smartreceipts.android.model.impl.ImmutableCategoryImpl;
public class ReceiptUtils {
public static class Constants {
public static final int ID = 0;
public static final int INDEX = 4;
public static final Category CATEGORY = new ImmutableCategoryImpl("Lunch", "LNCH");
public static final String COMMENT = "";
public static final String CURRENCY_CODE = "USD";
public static final PriceCurrency CURRENCY = PriceCurrency.getInstance(CURRENCY_CODE);
public static final long DATE_MILLIS = 1409703721000L; // 09/02/2014 @ 8:22EDT
public static final Date DATE = new Date(DATE_MILLIS);
public static final String SLASH_FORMATTED_DATE = "Sep/02/2014";
public static final String DASH_FORMATTED_DATE = "Sep-02-2014";
public static final String EXTRA1 = "extra1";
public static final String EXTRA2 = "extra2";
public static final String EXTRA3 = "extra3";
public static final File IMAGE_FILE = new File("/Android/data/wb.receipts/files/Report/img.jpg");
public static final String IMAGE_FILE_NAME = "img.jpg";
public static final File PDF_FILE = new File("/Android/data/wb.receipts/files/Report/pdf.pdf");
public static final String PDF_FILE_NAME = "pdf.pdf";
public static final boolean IS_REIMBURSABLE = true;
public static final boolean IS_FULLPAGE = false;
public static final boolean IS_SELECTED = true;
public static final String NAME = "Name";
public static final double PRICE = 12.55d;
public static final String DECIMAL_FORMATTED_PRICE = "12.55";
public static final String CURRENCY_FORMATTED_PRICE = "$12.55";
public static final double TAX = 0.37d;
public static final String DECIMAL_FORMATTED_TAX = "0.37";
public static final String CURRENCY_FORMATTED_TAX = "$0.37";
public static final TimeZone TIMEZONE = TimeZone.getDefault();
public static final String TIMEZONE_CODE = TIMEZONE.getID();
}
public static ReceiptBuilderFactory newDefaultReceiptBuilderFactory(Context context) {
final File img = createRoboElectricStubFile(context, Constants.IMAGE_FILE_NAME);
final ReceiptBuilderFactory factory = new ReceiptBuilderFactory(Constants.ID);
factory.setTrip(TripUtils.newDefaultTrip());
factory.setName(Constants.NAME);
factory.setPrice(Constants.PRICE);
factory.setTax(Constants.TAX);
factory.setCurrency(Constants.CURRENCY);
factory.setDate(Constants.DATE);
factory.setTimeZone(Constants.TIMEZONE);
factory.setCategory(Constants.CATEGORY);
factory.setComment(Constants.COMMENT);
factory.setIsReimbursable(Constants.IS_REIMBURSABLE);
factory.setIsFullPage(Constants.IS_FULLPAGE);
factory.setImage(img);
factory.setIndex(Constants.INDEX);
factory.setExtraEditText1(Constants.EXTRA1);
factory.setExtraEditText2(Constants.EXTRA2);
factory.setExtraEditText3(Constants.EXTRA3);
// TODO: Add Payment Method DefaultBuilderHere
return factory;
}
public static Receipt newDefaultReceipt(Context context) {
return newDefaultReceiptBuilderFactory(context).build();
}
public static File createRoboElectricStubFile(Context context, String filename) {
final File root = context.getExternalFilesDir(null);
final File newFile = new File(root, filename);
try {
if (!newFile.exists()) {
newFile.createNewFile();
}
return newFile;
}
catch (IOException e) {
return root; // Stub fallback case
}
}
public static void assertFieldEquality(Receipt receipt1, Receipt receipt2) {
assertFieldEqualityHelper(receipt1, receipt2);
Assert.assertEquals(receipt1.getTrip(), receipt2.getTrip());
Assert.assertEquals(receipt1.getDate(), receipt2.getDate());
}
public static void assertFieldEqualityIgnoringParent(Receipt receipt1, Receipt receipt2) {
assertFieldEqualityHelper(receipt1, receipt2);
Assert.assertEquals(receipt1.getDate(), receipt2.getDate());
}
public static void assertFieldEqualityWithDateFuzzing(Receipt receipt1, Receipt receipt2) {
assertFieldEqualityHelper(receipt1, receipt2);
Assert.assertEquals(receipt1.getTrip(), receipt2.getTrip());
Assert.assertTrue(Math.abs(receipt1.getDate().getTime() - receipt2.getDate().getTime()) < 100L);
}
private static void assertFieldEqualityHelper(Receipt receipt1, Receipt receipt2) {
Assert.assertEquals(receipt1.getComment(), receipt2.getComment());
Assert.assertEquals(receipt1.getCategory(), receipt2.getCategory());
Assert.assertEquals(receipt1.getExtraEditText1(), receipt2.getExtraEditText1());
Assert.assertEquals(receipt1.getExtraEditText2(), receipt2.getExtraEditText2());
Assert.assertEquals(receipt1.getExtraEditText3(), receipt2.getExtraEditText3());
Assert.assertEquals(receipt1.getFile(), receipt2.getFile());
Assert.assertEquals(receipt1.isReimbursable(), receipt2.isReimbursable());
Assert.assertEquals(receipt1.isFullPage(), receipt2.isFullPage());
Assert.assertEquals(receipt1.isSelected(), receipt2.isSelected());
Assert.assertEquals(receipt1.getName(), receipt2.getName());
Assert.assertEquals(receipt1.getPrice(), receipt2.getPrice());
Assert.assertEquals(receipt1.getTax(), receipt2.getTax());
Assert.assertEquals(receipt1.getTimeZone(), receipt2.getTimeZone());
Assert.assertEquals(receipt1.getPaymentMethod(), receipt2.getPaymentMethod());
}
/**
* We do not guarantee that indices are set, but this test still performs the full set
*/
public static void assertFieldEqualityPlusIdAndIndex(Receipt receipt1, Receipt receipt2) {
assertFieldEquality(receipt1, receipt2);
Assert.assertEquals(receipt1.getId(), receipt2.getId());
Assert.assertEquals(receipt1.getIndex(), receipt2.getIndex());
}
public static void assertFieldEqualityWithDateFuzzingPlusIdAndIndex(Receipt receipt1, Receipt receipt2) {
assertFieldEqualityWithDateFuzzing(receipt1, receipt2);
Assert.assertEquals(receipt1.getId(), receipt2.getId());
Assert.assertEquals(receipt1.getIndex(), receipt2.getIndex());
}
}