summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDebashish Chatterjee <debashishc@google.com>2011-06-20 17:03:26 +0100
committerDebashish Chatterjee <debashishc@google.com>2011-06-28 15:04:46 +0100
commitaafbe295d67686870c64c74a59e589d1dfb506fa (patch)
treef413f2484f7cb4e1fe534ee35ba456deb150aad6 /tests
parent836bbd3dc178f94bb674733b8ad57c765fff311a (diff)
downloadpackages_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')
-rw-r--r--tests/src/com/android/providers/contacts/CallLogProviderTest.java133
-rw-r--r--tests/src/com/android/providers/contacts/util/DBQueryUtilsTest.java4
-rw-r--r--tests/src/com/android/providers/contacts/util/SelectionBuilderTest.java56
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());
+ }
+}