diff options
author | Debashish Chatterjee <debashishc@google.com> | 2011-06-20 17:03:26 +0100 |
---|---|---|
committer | Debashish Chatterjee <debashishc@google.com> | 2011-06-28 15:04:46 +0100 |
commit | aafbe295d67686870c64c74a59e589d1dfb506fa (patch) | |
tree | f413f2484f7cb4e1fe534ee35ba456deb150aad6 /tests | |
parent | 836bbd3dc178f94bb674733b8ad57c765fff311a (diff) | |
download | packages_providers_ContactsProvider-aafbe295d67686870c64c74a59e589d1dfb506fa.zip packages_providers_ContactsProvider-aafbe295d67686870c64c74a59e589d1dfb506fa.tar.gz packages_providers_ContactsProvider-aafbe295d67686870c64c74a59e589d1dfb506fa.tar.bz2 |
Introduced query param 'include_voicemails' for call_log uri.
- by default only call entries (i.e. no voicemails) are returned.
- if include_voicemails is set to true then also include voicemail
records, but only if the caller has full voicemail permission.
- voicemail record can only be inserted through call_log provider if
include_voicemails is set.
Change-Id: I98f6778ace64fa752dc0525c5ce4e5eb83b2e689
Diffstat (limited to 'tests')
3 files changed, 179 insertions, 14 deletions
diff --git a/tests/src/com/android/providers/contacts/CallLogProviderTest.java b/tests/src/com/android/providers/contacts/CallLogProviderTest.java index d4da602..5a55311 100644 --- a/tests/src/com/android/providers/contacts/CallLogProviderTest.java +++ b/tests/src/com/android/providers/contacts/CallLogProviderTest.java @@ -48,6 +48,13 @@ import android.test.suitebuilder.annotation.MediumTest; */ @MediumTest public class CallLogProviderTest extends BaseContactsProvider2Test { + private static final String VOICEMAIL_ALL_PERMISSION = + "com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL"; + private static final String VOICEMAIL_OWN_PERMISSION = + "com.android.voicemail.permission.READ_WRITE_OWN_VOICEMAIL"; + + private static final Uri VOICEMAIL_CONTENT_URI = CallLogProvider.CONTENT_URI_WITH_VOICEMAIL; + /** Fields specific to voicemail provider that should not be exposed by call_log*/ private static final String[] VOICEMAIL_PROVIDER_SPECIFIC_COLUMNS = new String[] { Voicemails._DATA, @@ -75,21 +82,47 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { addProvider(TestCallLogProvider.class, CallLog.AUTHORITY); } + @Override + protected void tearDown() throws Exception { + setUpWithVoicemailPermissions(); + mResolver.delete(VOICEMAIL_CONTENT_URI, null, null); + super.tearDown(); + } + public void testInsert_RegularCallRecord() { - ContentValues values = new ContentValues(); - putCallValues(values); + ContentValues values = getDefaultCallValues(); Uri uri = mResolver.insert(Calls.CONTENT_URI, values); values.put(Calls.COUNTRY_ISO, "us"); assertStoredValues(uri, values); assertSelection(uri, values, Calls._ID, ContentUris.parseId(uri)); } + private void setUpWithVoicemailPermissions() { + mActor.addPermissions(VOICEMAIL_OWN_PERMISSION); + mActor.addPermissions(VOICEMAIL_ALL_PERMISSION); + } + + private void setUpWithNoVoicemailPermissions() { + mActor.removePermissions(VOICEMAIL_OWN_PERMISSION); + mActor.removePermissions(VOICEMAIL_ALL_PERMISSION); + } + public void testInsert_VoicemailCallRecord() { - ContentValues values = new ContentValues(); - putCallValues(values); + setUpWithVoicemailPermissions(); + final ContentValues values = getDefaultCallValues(); values.put(Calls.TYPE, Calls.VOICEMAIL_TYPE); values.put(Calls.VOICEMAIL_URI, "content://foo/voicemail/2"); - Uri uri = mResolver.insert(Calls.CONTENT_URI, values); + + // Should fail with the base content uri without the voicemail param. + EvenMoreAsserts.assertThrows(IllegalArgumentException.class, new Runnable() { + @Override + public void run() { + mResolver.insert(Calls.CONTENT_URI, values); + } + }); + + // Now grant voicemail permission - should succeed. + Uri uri = mResolver.insert(VOICEMAIL_CONTENT_URI, values); assertStoredValues(uri, values); assertSelection(uri, values, Calls._ID, ContentUris.parseId(uri)); } @@ -126,8 +159,7 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { } public void testCallLogFilter() { - ContentValues values = new ContentValues(); - putCallValues(values); + ContentValues values = getDefaultCallValues(); mResolver.insert(Calls.CONTENT_URI, values); Uri filterUri = Uri.withAppendedPath(Calls.CONTENT_FILTER_URI, "1-800-4664-411"); @@ -163,12 +195,25 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { assertStoredValues(uri, values); } + // Test to check that the calls and voicemail uris returns expected results. + public void testDifferentContentUris() { + setUpWithVoicemailPermissions(); + // Insert one voicemaail and two regular call record. + insertVoicemailRecord(); + insertCallRecord(); + insertCallRecord(); + + // With the default uri, only 2 call entries should be returned. + // With the voicemail uri all 3 should be returned. + assertEquals(2, getCount(Calls.CONTENT_URI, null, null)); + assertEquals(3, getCount(VOICEMAIL_CONTENT_URI, null, null)); + } + // Test to check that none of the voicemail provider specific fields are // insertable through call_log provider. public void testCannotAccessVoicemailSpecificFields_Insert() { for (String voicemailColumn : VOICEMAIL_PROVIDER_SPECIFIC_COLUMNS) { - final ContentValues values = new ContentValues(); - putCallValues(values); + final ContentValues values = getDefaultCallValues(); values.put(voicemailColumn, "foo"); EvenMoreAsserts.assertThrows("Column: " + voicemailColumn, IllegalArgumentException.class, new Runnable() { @@ -211,18 +256,78 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { } } - private void putCallValues(ContentValues values) { - values.put(Calls.TYPE, Calls.INCOMING_TYPE); + public void testVoicemailPermissions_Insert() { + EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() { + @Override + public void run() { + mResolver.insert(VOICEMAIL_CONTENT_URI, getDefaultVoicemailValues()); + } + }); + // Should now succeed with permissions granted. + setUpWithVoicemailPermissions(); + mResolver.insert(VOICEMAIL_CONTENT_URI, getDefaultVoicemailValues()); + } + + public void testVoicemailPermissions_Update() { + EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() { + @Override + public void run() { + mResolver.update(VOICEMAIL_CONTENT_URI, getDefaultVoicemailValues(), null, null); + } + }); + // Should now succeed with permissions granted. + setUpWithVoicemailPermissions(); + mResolver.update(VOICEMAIL_CONTENT_URI, getDefaultCallValues(), null, null); + } + + public void testVoicemailPermissions_Query() { + EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() { + @Override + public void run() { + mResolver.query(VOICEMAIL_CONTENT_URI, null, null, null, null); + } + }); + // Should now succeed with permissions granted. + setUpWithVoicemailPermissions(); + mResolver.query(VOICEMAIL_CONTENT_URI, null, null, null, null); + } + + public void testVoicemailPermissions_Delete() { + EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() { + @Override + public void run() { + mResolver.delete(VOICEMAIL_CONTENT_URI, null, null); + } + }); + // Should now succeed with permissions granted. + setUpWithVoicemailPermissions(); + mResolver.delete(VOICEMAIL_CONTENT_URI, null, null); + } + + private ContentValues getDefaultValues(int callType) { + ContentValues values = new ContentValues(); + values.put(Calls.TYPE, callType); values.put(Calls.NUMBER, "1-800-4664-411"); values.put(Calls.DATE, 1000); values.put(Calls.DURATION, 30); values.put(Calls.NEW, 1); + return values; + } + + private ContentValues getDefaultCallValues() { + return getDefaultValues(Calls.INCOMING_TYPE); + } + + private ContentValues getDefaultVoicemailValues() { + return getDefaultValues(Calls.VOICEMAIL_TYPE); } private Uri insertCallRecord() { - ContentValues values = new ContentValues(); - putCallValues(values); - return mResolver.insert(Calls.CONTENT_URI, values); + return mResolver.insert(Calls.CONTENT_URI, getDefaultCallValues()); + } + + private Uri insertVoicemailRecord() { + return mResolver.insert(VOICEMAIL_CONTENT_URI, getDefaultVoicemailValues()); } public static class TestCallLogProvider extends CallLogProvider { diff --git a/tests/src/com/android/providers/contacts/util/DBQueryUtilsTest.java b/tests/src/com/android/providers/contacts/util/DBQueryUtilsTest.java index 6cad686..350e971 100644 --- a/tests/src/com/android/providers/contacts/util/DBQueryUtilsTest.java +++ b/tests/src/com/android/providers/contacts/util/DBQueryUtilsTest.java @@ -40,6 +40,10 @@ public class DBQueryUtilsTest extends AndroidTestCase { assertEquals("(foo = 'bar')", DbQueryUtils.getEqualityClause("foo", "bar")); } + public void testGetInEqualityClause() { + assertEquals("(foo != 'bar')", DbQueryUtils.getInequalityClause("foo", "bar")); + } + public void testConcatenateClauses() { assertEquals("(first)", concatenateClauses("first")); assertEquals("(first) AND (second)", concatenateClauses("first", "second")); diff --git a/tests/src/com/android/providers/contacts/util/SelectionBuilderTest.java b/tests/src/com/android/providers/contacts/util/SelectionBuilderTest.java new file mode 100644 index 0000000..7adbeca --- /dev/null +++ b/tests/src/com/android/providers/contacts/util/SelectionBuilderTest.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2011 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.providers.contacts.util; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +/** + * Unit tests for {@link SelectionBuilder}. + */ +@SmallTest +public class SelectionBuilderTest extends AndroidTestCase { + public void testEmptyClauses() { + assertEquals(null, new SelectionBuilder(null).build()); + assertEquals(null, new SelectionBuilder("").build()); + assertEquals(null, new SelectionBuilder("").addClause(null).build()); + assertEquals(null, new SelectionBuilder(null).addClause("").build()); + assertEquals(null, new SelectionBuilder(null).addClause("").addClause(null).build()); + } + + public void testNonEmptyClauses() { + assertEquals("(A)", new SelectionBuilder("A").build()); + assertEquals("(A) AND (B=bar) AND (C='1')", new SelectionBuilder("A") + .addClause("B=bar") + .addClause("C='1'") + .build()); + + // Skips null and empty clauses. + assertEquals("(A) AND (B) AND (C)", new SelectionBuilder("A") + .addClause("") + .addClause("B") + .addClause(null) + .addClause("C") + .addClause(null) + .build()); + + // Use base selection with constructor. + assertEquals("(A)", new SelectionBuilder(null).addClause("A").build()); + assertEquals("(A)", new SelectionBuilder("").addClause("A").build()); + assertEquals("(A) AND (B)", new SelectionBuilder("A").addClause("B").build()); + } +} |