package com.ericliudeveloper.sharedbillhelper; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Handler; import android.os.Message; import android.test.ProviderTestCase2; import android.test.mock.MockContentResolver; import android.util.Log; import com.ericliudeveloper.sharedbillhelper.database.DatabaseConstants; import com.ericliudeveloper.sharedbillhelper.model.Bill; import com.ericliudeveloper.sharedbillhelper.model.BillDAO; import com.ericliudeveloper.sharedbillhelper.model.Member; import com.ericliudeveloper.sharedbillhelper.model.MemberDAO; import com.ericliudeveloper.sharedbillhelper.model.Payment; import com.ericliudeveloper.sharedbillhelper.model.PaymentDAO; import com.ericliudeveloper.sharedbillhelper.model.PaymentInfo; import com.ericliudeveloper.sharedbillhelper.model.PaymentInfoDAO; import com.ericliudeveloper.sharedbillhelper.provider.BillContract; import com.ericliudeveloper.sharedbillhelper.provider.BillProvider; /** * Created by liu on 5/06/15. */ public class ProviderTests extends ProviderTestCase2<BillProvider> { private Context mContext; private MockContentResolver mResolver; // Contains an SQLite database, used as test data private SQLiteDatabase mDb; Uri rowUri1, rowUri2; Uri billUri = BillContract.Bills.CONTENT_URI; String[] projectionBill = {DatabaseConstants.BillColumns.COL_ROWID , DatabaseConstants.BillColumns.COL_TYPE , DatabaseConstants.BillColumns.COL_AMOUNT}; /** * Constructor. * * @param providerClass The class name of the provider under test * @param providerAuthority The provider's authority string */ public ProviderTests() { super(BillProvider.class, BillContract.CONTENT_AUTHORITY); } @Override protected void setUp() throws Exception { super.setUp(); mContext = getMockContext(); mResolver = getMockContentResolver(); } public void testInsertBill() { assertNotNull("The Uri for bill is null.", billUri); ContentValues values1 = new ContentValues(); values1.put(DatabaseConstants.BillColumns.COL_TYPE, "electricity"); values1.put(DatabaseConstants.BillColumns.COL_AMOUNT, "340"); values1.put(DatabaseConstants.BillColumns.COL_BILLING_START, "2005-01-01"); values1.put(DatabaseConstants.BillColumns.COL_BILLING_END, "2005-06-01"); values1.put(DatabaseConstants.BillColumns.COL_DUE_DATE, "2005-08-01"); values1.put(DatabaseConstants.BillColumns.COL_PAID, "0"); values1.put(DatabaseConstants.BillColumns.COL_DELETED, "0"); rowUri1 = mResolver.insert(billUri, values1); Log.d("eric", rowUri1.toString()); assertNotNull("The inserted row uri is null.", rowUri1); // insert more rows ContentValues values2 = new ContentValues(); values2.put(DatabaseConstants.BillColumns.COL_TYPE, "water"); values2.put(DatabaseConstants.BillColumns.COL_AMOUNT, "120"); values2.put(DatabaseConstants.BillColumns.COL_BILLING_START, "2005-01-01"); values2.put(DatabaseConstants.BillColumns.COL_BILLING_END, "2005-06-01"); values2.put(DatabaseConstants.BillColumns.COL_DUE_DATE, "2005-08-01"); values2.put(DatabaseConstants.BillColumns.COL_PAID, "1"); values2.put(DatabaseConstants.BillColumns.COL_DELETED, "0"); rowUri2 = mResolver.insert(billUri, values2); Log.d("eric", rowUri2.toString()); assertNotNull("The inserted row uri is null.", rowUri2); } private void insertBills() { ContentValues values1 = new ContentValues(); values1.put(DatabaseConstants.BillColumns.COL_TYPE, "electricity"); values1.put(DatabaseConstants.BillColumns.COL_AMOUNT, "340"); values1.put(DatabaseConstants.BillColumns.COL_BILLING_START, "2005-01-01"); values1.put(DatabaseConstants.BillColumns.COL_BILLING_END, "2005-06-01"); values1.put(DatabaseConstants.BillColumns.COL_DUE_DATE, "2005-08-01"); values1.put(DatabaseConstants.BillColumns.COL_PAID, "0"); values1.put(DatabaseConstants.BillColumns.COL_DELETED, "0"); rowUri1 = mResolver.insert(billUri, values1); ContentValues values2 = new ContentValues(); values2.put(DatabaseConstants.BillColumns.COL_TYPE, "water"); values2.put(DatabaseConstants.BillColumns.COL_AMOUNT, "120"); values2.put(DatabaseConstants.BillColumns.COL_BILLING_START, "2005-01-01"); values2.put(DatabaseConstants.BillColumns.COL_BILLING_END, "2005-06-01"); values2.put(DatabaseConstants.BillColumns.COL_DUE_DATE, "2005-08-01"); values2.put(DatabaseConstants.BillColumns.COL_PAID, "1"); values2.put(DatabaseConstants.BillColumns.COL_DELETED, "0"); rowUri2 = mResolver.insert(billUri, values2); } public void testQueryOperations() { insertBills(); // very important!!! Cursor billsCursor = mResolver.query(billUri, projectionBill, null, null, null); int rowCount = billsCursor.getCount(); assertTrue("No results returned.", rowCount > 0); Log.d("eric", "returned row number: " + rowCount); } public void testUpdateOperations(){ insertBills(); ContentValues values = new ContentValues(); values.put(DatabaseConstants.BillColumns.COL_TYPE, "internet"); values.put(DatabaseConstants.BillColumns.COL_AMOUNT, "73.4"); values.put(DatabaseConstants.BillColumns.COL_BILLING_START, "2005-01-01"); values.put(DatabaseConstants.BillColumns.COL_BILLING_END, "2005-06-01"); values.put(DatabaseConstants.BillColumns.COL_DUE_DATE, "2005-08-01"); values.put(DatabaseConstants.BillColumns.COL_PAID, "0"); values.put(DatabaseConstants.BillColumns.COL_DELETED, "0"); int count = mResolver.update(rowUri1, values, null, null); assertTrue("Updated row is 0", count > 0); Cursor cursor = mResolver.query(rowUri1, projectionBill, null, null, null); String updatedType = ""; String updatedAmount = ""; if (cursor.moveToFirst()) { updatedType = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.BillColumns.COL_TYPE)); updatedAmount = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.BillColumns.COL_AMOUNT)); } assertEquals("Type is wrong", "internet", updatedType); assertEquals("Amount is wrong", "73.4", updatedAmount); } static String[] memberProjection = BillContract.Members.PROJECTION; static Uri membersUri = BillContract.Members.CONTENT_URI; public void testInsertMember() { Member member = new Member(); member.setFirstName("Eric"); member.setLastName("Liu"); member.setEmail("someone@qq.com"); member.setPhone("12345"); member.setMoveInDate("2005-01-01"); member.setMoveOutDate("2005-02-01"); ContentValues values = MemberDAO.getContentValuesFromMemberInstance(member); Uri uri = mResolver.insert(membersUri, values); Log.d("eric", uri.toString()); assertNotNull("no uri returned when inserting member.", uri); Cursor cursor = mResolver.query(uri, memberProjection, null , null, null); assertTrue("Nothing in the cursor when quering member.", cursor.getCount() > 0); // assertTrue("must fail", false); cursor.moveToFirst(); Member retrievedMember = MemberDAO.getMemberFromCursor(cursor); assertEquals("Retrieved member instance is different from the one been saved. ", "Eric", retrievedMember.getFirstName()); } static String[] paymentsProjection = BillContract.Payments.PROJECTION; static Uri paymentsUri = BillContract.Payments.CONTENT_URI; public void testInsertPayment() { // create a PaymentInfo instance PaymentInfo.Builder paymentInfoBuilder = new PaymentInfo.Builder(); PaymentInfo paymentInfo = paymentInfoBuilder.description("I'm ok") .name("Sunday payment") .numberOfBillsPaid(3) .numberOfMembersPaid(3) .paidTime("1994-02-03") .totalAmount(32135.34) .build(); ContentValues paymentInfoValues = PaymentInfoDAO.getContentValuesFromPaymentInfoInstance(paymentInfo); Uri paymentInfoUri = mResolver.insert(BillContract.PaymentInfos.CONTENT_URI, paymentInfoValues); assertNotNull("Returned null when inserting paymentInfo", paymentInfoUri); // create an Payee Member member = new Member(); member.setFirstName("Eric"); member.setLastName("Liu"); member.setEmail("someone@qq.com"); member.setPhone("12345"); member.setMoveInDate("2005-01-01"); member.setMoveOutDate("2005-02-01"); ContentValues payeeValues = MemberDAO.getContentValuesFromMemberInstance(member); Uri payeeUri = mResolver.insert(membersUri, payeeValues); assertNotNull("Returned null when inserting Payee", payeeUri); Bill bill = new Bill(); bill.setAmount(324.23); bill.setType("Weapons"); bill.setEndDate("2015-06-30"); bill.setStartDate("2014-05-01"); ContentValues billValues = BillDAO.getContentValuesFromBillInstance(bill); Uri billUri = mResolver.insert(BillContract.Bills.CONTENT_URI, billValues); assertNotNull("Returned null when inserting bill", billUri); String paymentInfoSerialNumber = paymentInfo.getSerialNumber(); long billId = Long.valueOf(billUri.getLastPathSegment()); long memberId = Long.valueOf(payeeUri.getLastPathSegment()); Payment.Builder builder = new Payment.Builder(paymentInfoSerialNumber, billId, memberId); builder.payeeDays(10); builder.payeeStartDate("1981-10-10"); builder.payeeEndDate("1981-10-20"); builder.payee_amount(212.2); Payment payment = builder.build(); ContentValues paymentValues = PaymentDAO.getContentValuesFromPaymentInstance(payment); Uri uri = mResolver.insert(paymentsUri, paymentValues); assertNotNull("returns null uri when inserting payment", uri); Cursor cursor = mResolver.query(uri, paymentsProjection, null, null, null); cursor.moveToFirst(); } }