package com.code44.finance.data.providers; import android.content.ContentValues; import android.database.Cursor; import com.code44.finance.data.Query; import com.code44.finance.data.db.Tables; import com.code44.finance.data.model.Account; import com.code44.finance.data.model.Category; import com.code44.finance.data.model.Transaction; import com.code44.finance.utils.IOUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import static org.junit.Assert.assertEquals; @RunWith(RobolectricTestRunner.class) public class TransactionsProviderTest extends BaseContentProviderTestCase { @Test public void insert_updatesAccountsBalances() { Account account = insertAccount(); final Transaction transaction = new Transaction(); transaction.setAccountFrom(account); transaction.setCategory(Category.getExpense()); transaction.setAmount(42); insert(TransactionsProvider.uriTransactions(), transaction); account = getAccount(account.getId()); assertEquals(-42, account.getBalance()); } @Test(expected = IllegalArgumentException.class) public void update_throwsIllegalArgumentException() { update(TransactionsProvider.uriTransactions(), new ContentValues(), null); } @Test public void delete_updatesAccountsBalances() { Account account = insertAccount(); final Transaction transaction = new Transaction(); transaction.setAccountFrom(account); transaction.setCategory(Category.getExpense()); transaction.setAmount(42); insert(TransactionsProvider.uriTransactions(), transaction); delete("delete", TransactionsProvider.uriTransactions(), null); account = getAccount(account.getId()); assertEquals(0, account.getBalance()); } @Test public void bulkInsert_updatesAccountsBalances() { Account account = insertAccount(); final Transaction transaction = new Transaction(); transaction.setAccountTo(account); transaction.setCategory(Category.getIncome()); transaction.setAmount(42); bulkInsert(TransactionsProvider.uriTransactions(), transaction.asValues()); account = getAccount(account.getId()); assertEquals(42, account.getBalance()); } private Account insertAccount() { final Account account = new Account(); account.setTitle("a"); insert(AccountsProvider.uriAccounts(), account); return account; } private Account getAccount(String accountId) { final Cursor cursor = Query.create() .projectionLocalId(Tables.Accounts.ID) .projection(Tables.Accounts.PROJECTION) .projection(Tables.Currencies.PROJECTION) .from(context, AccountsProvider.uriAccount(accountId)) .execute(); assertEquals(1, cursor.getCount()); final Account account = Account.from(cursor); IOUtils.closeQuietly(cursor); return account; } }