package ru.orangesoftware.financisto2.test.utils;
import android.test.AndroidTestCase;
import java.util.Arrays;
import java.util.List;
import ru.orangesoftware.financisto2.model.Transaction;
import ru.orangesoftware.financisto2.utils.SplitAdjuster;
/**
* Created by IntelliJ IDEA.
* User: Denis Solonenko
* Date: 7/23/11 1:53 AM
*/
public class SplitAdjusterTest extends AndroidTestCase {
List<Transaction> splits;
public void test_should_adjust_all_splits_evenly() {
adjustEvenly(0);
assertAmounts(1000, -500, 420, 100, -100);
adjustEvenly(500);
assertAmounts(1100, -400, 520, 200, 0);
adjustEvenly(-1000);
assertAmounts(800, -700, 220, -100, -300);
adjustEvenly(1001);
assertAmounts(1200, -300, 620, 300, 101);
adjustEvenly(-1002);
assertAmounts(800, -700, 220, -101, -301);
adjustEvenly(1003);
assertAmounts(1200, -300, 621, 301, 101);
adjustEvenly(-1004);
assertAmounts(800, -701, 219, -101, -301);
adjustEvenly(4);
assertAmounts(1000, -499, 421, 101, -99);
}
public void test_should_adjust_the_last_split() {
adjustLast(0);
assertAmounts(1000, -500, 420, 100, -100);
adjustLast(100);
assertAmounts(1000, -500, 420, 100, 0);
adjustLast(-100);
assertAmounts(1000, -500, 420, 100, -200);
}
private void adjustEvenly(long amount) {
createSplits();
SplitAdjuster.adjustEvenly(splits, amount);
}
private void adjustLast(long amount) {
createSplits();
SplitAdjuster.adjustLast(splits, amount);
}
private void assertAmounts(long...splitAmounts) {
assertEquals("Split1", splitAmounts[0], splits.get(0).fromAmount);
assertEquals("Split2", splitAmounts[1], splits.get(1).fromAmount);
assertEquals("Split3", splitAmounts[2], splits.get(2).fromAmount);
assertEquals("Split4", splitAmounts[3], splits.get(3).fromAmount);
assertEquals("Split5", splitAmounts[4], splits.get(4).fromAmount);
}
private void createSplits() {
splits = Arrays.asList(newSplit(1000), newSplit(-500), newSplit(420), newSplit(100), newSplit(-100));
}
private Transaction newSplit(long amount) {
Transaction t = new Transaction();
t.fromAmount = amount;
return t;
}
}