package ru.orangesoftware.financisto2.test.db; import java.util.ArrayList; import java.util.List; import java.util.Map; import ru.orangesoftware.financisto2.model.Account; import ru.orangesoftware.financisto2.model.Attribute; import ru.orangesoftware.financisto2.model.Category; import ru.orangesoftware.financisto2.model.Payee; import ru.orangesoftware.financisto2.model.Transaction; import ru.orangesoftware.financisto2.model.TransactionStatus; import ru.orangesoftware.financisto2.test.builders.AccountBuilder; import ru.orangesoftware.financisto2.test.builders.CategoryBuilder; import ru.orangesoftware.financisto2.test.builders.TransactionBuilder; public class MyDatabaseTest extends AbstractDbTest { Account a1; Map<String, Category> categoriesMap; @Override public void setUp() throws Exception { super.setUp(); a1 = AccountBuilder.createDefault(db); categoriesMap = CategoryBuilder.createDefaultHierarchy(categoryRepository); } public void testShouldSavePayeeOnlyOnce() { // given String payee = "Payee1"; // when Payee p1 = db.insertPayee(payee); Payee p2 = db.insertPayee(payee); List<Payee> payees = db.getAllPayeeList(); // then assertEquals("Ids should be the same!", p1.id, p2.id); assertEquals("List should be of size 1!", 1, payees.size()); assertEquals("The first payee should be the one!", payees.get(0).title, payee); } public void test_when_child_category_is_inserted_it_should_inherit_type_from_the_parent() { // long a1Id = db.insertOrUpdate(createIncomeCategory("A1"), new ArrayList<Attribute>()); // long a2Id = db.insertOrUpdate(createExpenseCategory("A2"), new ArrayList<Attribute>()); // long a11id = db.insertChildCategory(a1Id, createExpenseCategory("a11")); // long a21id = db.insertChildCategory(a2Id, createIncomeCategory("a21")); // Category a1 = db.getCategory(a1Id); // Category a2 = db.getCategory(a2Id); // Category a11 = db.getCategory(a11id); // Category a21 = db.getCategory(a21id); // assertTrue(a1.isIncome()); // assertTrue(a2.isExpense()); // assertTrue(a11.isIncome()); // assertTrue(a21.isExpense()); } public void test_when_category_moves_under_a_new_parent_it_should_inherit_its_type_from_the_new_parent() { // long a1Id = db.insertOrUpdate(createIncomeCategory("A1"), new ArrayList<Attribute>()); // long a2Id = db.insertOrUpdate(createExpenseCategory("A2"), new ArrayList<Attribute>()); // long a11Id = db.insertChildCategory(a1Id, createExpenseCategory("a11")); // long a111Id = db.insertChildCategory(a11Id, createExpenseCategory("a111")); // Category a2 = db.getCategory(a2Id); // Category a11 = db.getCategory(a11Id); // assertTrue(a11.isIncome()); // a11.parent = a2; // a11.title = "a21"; // long a21id = db.insertOrUpdate(a11, new ArrayList<Attribute>()); // Category a21 = db.getCategory(a21id); // Category a211 = db.getCategory(a111Id); // assertTrue("Category should inherit new type", a21.isExpense()); // assertTrue("Child category should inherit new type", a211.isExpense()); } public void test_should_set_split_status_when_inserting_new_transaction() { // when Transaction t = TransactionBuilder.withDb(db).account(a1).amount(1000) .withSplit(categoriesMap.get("A1"), 100) .withSplit(categoriesMap.get("A2"), 900) .withStatus(TransactionStatus.CL) .create(); // then List<Transaction> splits = db.getSplitsForTransaction(t.id); for (Transaction split : splits) { assertEquals(t.status, split.status); } } public void test_should_update_split_status_when_changing_status_of_the_parent_transaction() { // given Transaction t = TransactionBuilder.withDb(db).account(a1).amount(1000) .withSplit(categoriesMap.get("A1"), 100) .withSplit(categoriesMap.get("A2"), 900) .create(); // when t.status = TransactionStatus.CL; db.insertOrUpdate(t); // then List<Transaction> splits = db.getSplitsForTransaction(t.id); for (Transaction split : splits) { assertEquals(t.status, split.status); } } private Category createIncomeCategory(String title) { Category c = new Category(); c.title = title; c.makeThisCategoryIncome(); return c; } private Category createExpenseCategory(String title) { Category c = new Category(); c.title = title; c.makeThisCategoryExpense(); return c; } }