From 6fcdcc15f3b8786e0ecab5886324eeb212c58699 Mon Sep 17 00:00:00 2001 From: Anne Rong Date: Mon, 10 Aug 2015 17:45:55 -0700 Subject: Create local database table + ContentProvider for filtered numbers Bug: 23350722 Bug: 23350276 Change-Id: I070434cead43aa93026aa6b00ab886aa2947b1e6 --- .../database/FilteredNumberProviderTest.java | 227 +++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 tests/src/com/android/dialer/database/FilteredNumberProviderTest.java (limited to 'tests/src') diff --git a/tests/src/com/android/dialer/database/FilteredNumberProviderTest.java b/tests/src/com/android/dialer/database/FilteredNumberProviderTest.java new file mode 100644 index 000000000..94bf6e6c2 --- /dev/null +++ b/tests/src/com/android/dialer/database/FilteredNumberProviderTest.java @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.dialer.database; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.DatabaseUtils; +import android.net.Uri; +import android.test.ProviderTestCase2; + +public class FilteredNumberProviderTest extends + ProviderTestCase2 { + private ContentResolver mResolver; + + private static final String TIME_ZONE_AMERICA_LOS_ANGELES = "America/Los_Angeles"; + private static final String DEFAULT_TIMEZONE = TIME_ZONE_AMERICA_LOS_ANGELES; + private static final String DEFAULT_COUNTRY_ISO = "US"; + private static final String TEST_NUMBER = "+1234567890"; + private static final long TEST_TIME = 1439936706; + + public FilteredNumberProviderTest () { + super(TestFilteredNumberProvider.class, FilteredNumberContract.AUTHORITY); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + mResolver = getMockContentResolver(); + } + + public void testInsert() { + // Insert row + Uri uri = mResolver.insert( + FilteredNumberContract.FilteredNumber.CONTENT_URI, + getTestValues(null)); + assertNotNull(uri); + long id = ContentUris.parseId(uri); + assertTrue(id > 0); + } + + public void testQuery() { + Cursor cursor = mResolver.query( + FilteredNumberContract.FilteredNumber.CONTENT_URI, null, null, null, null); + assertNotNull(cursor); + assertEquals(cursor.getCount(), 0); + cursor.close(); + } + + public void testInsertAndQuery() { + // Insert row + ContentValues testValues = getTestValues(null); + Uri uri = mResolver.insert(FilteredNumberContract.FilteredNumber.CONTENT_URI, testValues); + + // Query + Cursor cursor = mResolver.query(uri, null, null, null, null); + assertNotNull(cursor); + assertEquals(cursor.getCount(), 1); + + cursor.moveToFirst(); + assertCursorValues(cursor, testValues); + cursor.close(); + } + + public void testIllegalUri() { + try { + mResolver.query( + Uri.withAppendedPath( + FilteredNumberContract.FilteredNumber.CONTENT_URI, + "ILLEGAL"), null, null, null, null); + fail("Expecting exception but none was thrown."); + } catch (IllegalArgumentException e) { + } + } + + public void testQueryWithId() { + // Insert row + ContentValues testValues = getTestValues(null); + Uri uri = mResolver.insert(FilteredNumberContract.FilteredNumber.CONTENT_URI, testValues); + long id = ContentUris.parseId(uri); + + // Query + Cursor cursor = mResolver.query( + ContentUris.withAppendedId( + FilteredNumberContract.FilteredNumber.CONTENT_URI, + id), null, null, null, null); + assertNotNull(cursor); + assertEquals(cursor.getCount(), 1); + + cursor.moveToFirst(); + assertCursorValues(cursor, testValues); + cursor.close(); + } + + public void testDelete() { + // Insert row + Uri uri = mResolver.insert( + FilteredNumberContract.FilteredNumber.CONTENT_URI, + getTestValues(null)); + long id = ContentUris.parseId(uri); + + // Delete row + int rows = mResolver.delete( + FilteredNumberContract.FilteredNumber.CONTENT_URI, + "id = ?", + new String[]{Long.toString(id)}); + assertEquals(rows, 1); + + // Query + Cursor cursor = mResolver.query(uri, null, null, null, null); + assertNotNull(cursor); + assertEquals(cursor.getCount(), 0); + cursor.close(); + } + + public void testUpdate() { + // Insert row + Uri uri = mResolver.insert( + FilteredNumberContract.FilteredNumber.CONTENT_URI, + getTestValues(null)); + + // Update row + ContentValues v = new ContentValues(); + v.put(FilteredNumberContract.FilteredNumberColumns.TIMES_FILTERED, 3); + v.put(FilteredNumberContract.FilteredNumberColumns.LAST_TIME_FILTERED, TEST_TIME); + int rows = mResolver.update(FilteredNumberContract.FilteredNumber.CONTENT_URI, v, + FilteredNumberContract.FilteredNumberColumns.NORMALIZED_NUMBER + " = ?", + new String[]{TEST_NUMBER}); + assertEquals(rows, 1); + + ContentValues expected = getTestValues(TEST_TIME); + expected.put(FilteredNumberContract.FilteredNumberColumns.TIMES_FILTERED, 3); + expected.put(FilteredNumberContract.FilteredNumberColumns.LAST_TIME_FILTERED, TEST_TIME); + + // Re-query + Cursor cursor = mResolver.query(uri, null, null, null, null); + assertNotNull(cursor); + assertEquals(cursor.getCount(), 1); + cursor.moveToFirst(); + assertCursorValues(cursor, expected); + cursor.close(); + } + + public void testInsertDefaultValues() { + // Insert row + ContentValues v = getTestValues(null); + Uri uri = mResolver.insert(FilteredNumberContract.FilteredNumber.CONTENT_URI, v); + assertNotNull(uri); + long id = ContentUris.parseId(uri); + assertTrue(id > 0); + + // Query + Cursor cursor = mResolver.query(uri, null, null, null, null); + assertNotNull(cursor); + assertEquals(cursor.getCount(), 1); + + int creationTimeIndex = + cursor.getColumnIndex(FilteredNumberContract.FilteredNumberColumns.CREATION_TIME); + cursor.moveToFirst(); + assertEquals(cursor.getLong(creationTimeIndex), TEST_TIME); + cursor.close(); + } + + @Override + protected void tearDown() throws Exception { + getProvider().closeDb(); + super.tearDown(); + } + + private ContentValues getTestValues(Long timeNow) { + ContentValues v = new ContentValues(); + v.putNull(FilteredNumberContract.FilteredNumberColumns._ID); + v.put(FilteredNumberContract.FilteredNumberColumns.NORMALIZED_NUMBER, TEST_NUMBER); + v.put(FilteredNumberContract.FilteredNumberColumns.COUNTRY_ISO, DEFAULT_COUNTRY_ISO); + v.put(FilteredNumberContract.FilteredNumberColumns.TIMES_FILTERED, 0); + v.putNull(FilteredNumberContract.FilteredNumberColumns.LAST_TIME_FILTERED); + v.put(FilteredNumberContract.FilteredNumberColumns.CREATION_TIME, timeNow); + v.put(FilteredNumberContract.FilteredNumberColumns.SOURCE, 1); + v.put(FilteredNumberContract.FilteredNumberColumns.TYPE, 1); + return v; + } + + private void assertCursorValues(Cursor cursor, ContentValues expectedValues) { + ContentValues v = new ContentValues(); + DatabaseUtils.cursorRowToContentValues(cursor, v); + v.remove(FilteredNumberContract.FilteredNumberColumns._ID); + expectedValues.remove(FilteredNumberContract.FilteredNumberColumns._ID); + assertEquals(v.toString(), expectedValues.toString()); + } + + public static class TestFilteredNumberProvider extends FilteredNumberProvider { + private DialerDatabaseHelper mDialerDatabaseHelper; + + @Override + protected DialerDatabaseHelper getDatabaseHelper(Context context) { + if (mDialerDatabaseHelper == null) { + mDialerDatabaseHelper = DialerDatabaseHelper.getNewInstanceForTest(context); + } + return mDialerDatabaseHelper; + } + + protected void closeDb() { + mDialerDatabaseHelper.close(); + } + + @Override + protected long getCurrentTimeMs() { + return TEST_TIME; + } + } +} -- cgit v1.2.3