package com.code44.finance.data.providers; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import com.code44.finance.data.DataStore; import com.code44.finance.data.Query; import com.code44.finance.data.db.DBHelper; import com.code44.finance.data.model.Model; import com.code44.finance.utils.IOUtils; import org.junit.Before; import org.robolectric.Robolectric; import org.robolectric.shadows.ShadowContentResolver; import static org.junit.Assert.assertEquals; public class BaseContentProviderTestCase { protected Context context; @Before public void setUp() throws Exception { context = Robolectric.getShadowApplication().getApplicationContext(); final SQLiteDatabase database = new DBHelper(context, null).getWritableDatabase(); final CurrenciesProvider currenciesProvider = new CurrenciesProvider(); currenciesProvider.onCreate(); currenciesProvider.database = database; final AccountsProvider accountsProvider = new AccountsProvider(); accountsProvider.onCreate(); accountsProvider.database = database; final CategoriesProvider categoriesProvider = new CategoriesProvider(); categoriesProvider.onCreate(); categoriesProvider.database = database; final TransactionsProvider transactionsProvider = new TransactionsProvider(); transactionsProvider.onCreate(); transactionsProvider.database = database; ShadowContentResolver.registerProvider(BaseProvider.getAuthority(CurrenciesProvider.class), currenciesProvider); ShadowContentResolver.registerProvider(BaseProvider.getAuthority(AccountsProvider.class), accountsProvider); ShadowContentResolver.registerProvider(BaseProvider.getAuthority(CategoriesProvider.class), categoriesProvider); ShadowContentResolver.registerProvider(BaseProvider.getAuthority(TransactionsProvider.class), transactionsProvider); } protected void insert(Uri uri, Model model) { DataStore.insert().model(model).into(context, uri); } protected int update(Uri uri, ContentValues values, String selection, String... selectionArgs) { return DataStore.update().withSelection(selection, selectionArgs).values(values).into(context, uri); } protected int delete(String mode, Uri uri, String selection, String... selectionArgs) { return DataStore.delete().selection(selection, selectionArgs).from(context, uriWithDeleteMode(uri, mode)); } protected int bulkInsert(Uri uri, ContentValues... valuesArray) { return DataStore.bulkInsert().values(valuesArray).into(context, uri); } protected Cursor query(Uri uri, Query query) { return query.from(Robolectric.application, uri).execute(); } protected void assertQuerySize(Uri uri, Query query, int expectedSize) { final Cursor cursor = query(uri, query); assertEquals(expectedSize, cursor.getCount()); IOUtils.closeQuietly(cursor); } private Uri uriWithDeleteMode(Uri uri, String mode) { return ProviderUtils.withQueryParameter(uri, ProviderUtils.QueryParameterKey.DELETE_MODE, mode); } }