blob: 1191560f51dedd37362f349462046a85f660b0d1 [file] [log] [blame]
/*
* 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;
import android.test.suitebuilder.annotation.MediumTest;
@MediumTest
public class FilteredNumberProviderTest extends
ProviderTestCase2<FilteredNumberProviderTest.TestFilteredNumberProvider> {
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 = "234567890";
private static final String TEST_NORMALIZED_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,
FilteredNumberContract.FilteredNumberColumns._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_NORMALIZED_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_NORMALIZED_NUMBER);
v.put(FilteredNumberContract.FilteredNumberColumns.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;
}
}
}