package ru.orangesoftware.financisto2.test.db; import android.content.Context; import android.test.AndroidTestCase; import android.test.RenamingDelegatingContext; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import ru.orangesoftware.financisto2.db.CategoryRepository; import ru.orangesoftware.financisto2.db.DatabaseAdapter; import ru.orangesoftware.financisto2.db.DatabaseHelper; import ru.orangesoftware.financisto2.db.DatabaseUtils; import ru.orangesoftware.financisto2.model.Account; import ru.orangesoftware.financisto2.model.Category; import ru.orangesoftware.financisto2.model.Transaction; import ru.orangesoftware.financisto2.test.builders.DateTime; /** * Created by IntelliJ IDEA. * User: Denis Solonenko * Date: 2/7/11 7:22 PM */ public abstract class AbstractDbTest extends AndroidTestCase { private DatabaseHelper dbHelper; protected DatabaseAdapter db; protected CategoryRepository categoryRepository; protected Context context; @Override public void setUp() throws Exception { context = new RenamingDelegatingContext(getContext(), "test-"); dbHelper = new DatabaseHelper(context); db = new DatabaseAdapter(context); db.dbHelper = db.dbHelper = dbHelper; categoryRepository = new CategoryRepository(context); categoryRepository.db = db; } @Override public void tearDown() throws Exception { dbHelper.close(); } public void assertAccountTotal(Account account, long total) { Account a = db.getAccount(account.id); assertEquals("Account "+account.id+" total", total, a.totalAmount); } public void assertLastTransactionDate(Account account, DateTime dateTime) { Account a = db.getAccount(account.id); assertEquals("Account "+account.id+" last transaction date", dateTime.asLong(), a.lastTransactionDate); } public void assertFinalBalanceForAccount(Account account, long expectedBalance) { long balance = db.getLastRunningBalanceForAccount(account); assertEquals("Account "+account.id+" final balance", expectedBalance, balance); } public void assertAccountBalanceForTransaction(Transaction t, Account a, long expectedBalance) { long balance = db.getAccountBalanceForTransaction(a, t); assertEquals(expectedBalance, balance); } public void assertTransactionsCount(Account account, long expectedCount) { long count = DatabaseUtils.rawFetchLongValue(db, "select count(*) from transactions where from_account_id=?", new String[]{String.valueOf(account.id)}); assertEquals("Transaction for account "+account.id, expectedCount, count); } public void assertCategory(String name, boolean isIncome, Category c) { assertEquals(name, c.title); assertEquals(isIncome, c.isIncome()); } public static <T> Set<T> asSet(T...values) { return new HashSet<T>(Arrays.asList(values)); } }