aboutsummaryrefslogtreecommitdiff
path: root/tests/src/com/android
diff options
context:
space:
mode:
authorMarcus Hagerott <mhagerott@google.com>2021-03-24 17:10:14 -0700
committerMarcus Hagerott <mhagerott@google.com>2021-04-08 12:45:34 -0700
commitbb9032379c2da8e360fd6d1c94e5df3dd0ac07a0 (patch)
tree39d273f22d7eef4bcb98cfba59ca338ab93dd10a /tests/src/com/android
parent1a288acf42307b4cce6c8387c60b193d508dc687 (diff)
downloadContactsProvider-bb9032379c2da8e360fd6d1c94e5df3dd0ac07a0.tar.gz
Consolidate settings and accounts tables
This is primarily to allow settings for the local account. Test: atest ContactsProviderTests CtsContactsProviderTestCases Bug: 166446448 Change-Id: I3589b55c202346986bead0e3b1c290552b33312b
Diffstat (limited to 'tests/src/com/android')
-rw-r--r--tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java8
-rw-r--r--tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java64
-rw-r--r--tests/src/com/android/providers/contacts/ContactsProvider2Test.java133
3 files changed, 190 insertions, 15 deletions
diff --git a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
index 816d10d7..971656b5 100644
--- a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
@@ -219,12 +219,12 @@ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase {
return ContentUris.parseId(mResolver.insert(uri, values));
}
- protected void createSettings(Account account, String shouldSync, String ungroupedVisible) {
- createSettings(new AccountWithDataSet(account.name, account.type, null),
+ protected Uri createSettings(Account account, String shouldSync, String ungroupedVisible) {
+ return createSettings(new AccountWithDataSet(account.name, account.type, null),
shouldSync, ungroupedVisible);
}
- protected void createSettings(AccountWithDataSet account, String shouldSync,
+ protected Uri createSettings(AccountWithDataSet account, String shouldSync,
String ungroupedVisible) {
ContentValues values = new ContentValues();
values.put(Settings.ACCOUNT_NAME, account.getAccountName());
@@ -234,7 +234,7 @@ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase {
}
values.put(Settings.SHOULD_SYNC, shouldSync);
values.put(Settings.UNGROUPED_VISIBLE, ungroupedVisible);
- mResolver.insert(Settings.CONTENT_URI, values);
+ return mResolver.insert(Settings.CONTENT_URI, values);
}
protected Uri insertOrganization(long rawContactId, ContentValues values) {
diff --git a/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java b/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java
index d50a2922..b3a4c53d 100644
--- a/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java
+++ b/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java
@@ -33,7 +33,6 @@ import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.PhotoFiles;
import android.provider.ContactsContract.PinnedPositions;
import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.Settings;
import android.provider.ContactsContract.StatusUpdates;
import android.provider.ContactsContract.StreamItemPhotos;
import android.provider.ContactsContract.StreamItems;
@@ -122,6 +121,7 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade
int oldVersion = 1108;
oldVersion = upgradeTo1109(oldVersion);
+ oldVersion = upgradeTo1600(oldVersion);
oldVersion = upgrade(oldVersion, ContactsDatabaseHelper.DATABASE_VERSION);
assertEquals(ContactsDatabaseHelper.DATABASE_VERSION, oldVersion);
assertDatabaseStructureSameAsList(TABLE_LIST, /* isNewDatabase =*/ false);
@@ -192,6 +192,57 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade
return MY_VERSION;
}
+ private int upgradeTo1600(int upgradeFrom) {
+ final int MY_VERSION = 1600;
+
+ executeSqlFromAssetFile(getTestContext(), mDb, "upgradeTest/pre_upgrade1600.sql");
+
+ mHelper.onUpgrade(mDb, upgradeFrom, MY_VERSION);
+
+ try (Cursor c = mDb.rawQuery("select "
+ + "_id, account_name, account_type, data_set, ungrouped_visible, should_sync "
+ + "from accounts order by _id", null)) {
+ BaseContactsProvider2Test.assertCursorValuesOrderly(c,
+ cv(Contacts._ID, 1,
+ "account_name", null,
+ "account_type", null,
+ "data_set", null,
+ "ungrouped_visible", 1,
+ "should_sync", 0
+ ),
+ cv(Contacts._ID, 2,
+ "account_name", "visible",
+ "account_type", "type1",
+ "data_set", null,
+ "ungrouped_visible", 1,
+ "should_sync", 1
+ ),
+ cv(Contacts._ID, 3,
+ "account_name", "visible",
+ "account_type", "type1",
+ "data_set", "ds_not_visible",
+ "ungrouped_visible", 0,
+ "should_sync", 1
+ ),
+ cv(Contacts._ID, 4,
+ "account_name", "not_syncable",
+ "account_type", "type1",
+ "data_set", null,
+ "ungrouped_visible", 0,
+ "should_sync", 0
+ ),
+ cv(Contacts._ID, 5,
+ "account_name", "no_settings",
+ "account_type", "type2",
+ "data_set", null,
+ "ungrouped_visible", 0,
+ "should_sync", 1
+ ));
+ }
+
+ return MY_VERSION;
+ }
+
private int upgrade(int upgradeFrom, int upgradeTo) {
if (upgradeFrom < upgradeTo) {
mHelper.onUpgrade(mDb, upgradeFrom, upgradeTo);
@@ -222,6 +273,8 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade
new TableColumn(AccountsColumns.DATA_SET, TEXT, false, null),
new TableColumn(AccountsColumns.SIM_SLOT_INDEX, INTEGER, false, null),
new TableColumn(AccountsColumns.SIM_EF_TYPE, INTEGER, false, null),
+ new TableColumn(AccountsColumns.UNGROUPED_VISIBLE, INTEGER, true, "0"),
+ new TableColumn(AccountsColumns.SHOULD_SYNC, INTEGER, true, "1")
};
private static final TableColumn[] CONTACTS_COLUMNS = new TableColumn[] {
@@ -417,14 +470,6 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade
new TableColumn(AggregationExceptions.RAW_CONTACT_ID2, INTEGER, false, null),
};
- private static final TableColumn[] SETTINGS_COLUMNS = new TableColumn[] {
- new TableColumn(Settings.ACCOUNT_NAME, STRING, true, null),
- new TableColumn(Settings.ACCOUNT_TYPE, STRING, true, null),
- new TableColumn(Settings.DATA_SET, STRING, false, null),
- new TableColumn(Settings.UNGROUPED_VISIBLE, INTEGER, true, "0"),
- new TableColumn(Settings.SHOULD_SYNC, INTEGER, true, "1"),
- };
-
private static final TableColumn[] VISIBLE_CONTACTS_COLUMNS = new TableColumn[] {
new TableColumn(Contacts._ID, INTEGER, false, null),
};
@@ -567,7 +612,6 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade
new TableListEntry(Tables.NICKNAME_LOOKUP, NICKNAME_LOOKUP_COLUMNS),
new TableListEntry(Tables.GROUPS, GROUPS_COLUMNS),
new TableListEntry(Tables.AGGREGATION_EXCEPTIONS, AGGREGATION_EXCEPTIONS_COLUMNS),
- new TableListEntry(Tables.SETTINGS, SETTINGS_COLUMNS),
new TableListEntry(Tables.VISIBLE_CONTACTS, VISIBLE_CONTACTS_COLUMNS),
new TableListEntry(Tables.DEFAULT_DIRECTORY, DEFAULT_DIRECTORY_COLUMNS),
new TableListEntry("calls", CALLS_COLUMNS, false),
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index 031d2172..0bcab462 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -77,6 +77,7 @@ import android.util.ArraySet;
import com.android.internal.util.ArrayUtils;
import com.android.providers.contacts.ContactsActor.AlteringUserContext;
import com.android.providers.contacts.ContactsActor.MockUserManager;
+import com.android.providers.contacts.ContactsDatabaseHelper.AccountsColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.AggregationExceptionColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.ContactsColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.DataUsageStatColumns;
@@ -84,6 +85,7 @@ import com.android.providers.contacts.ContactsDatabaseHelper.DbProperties;
import com.android.providers.contacts.ContactsDatabaseHelper.PresenceColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.RawContactsColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.Tables;
+import com.android.providers.contacts.tests.R;
import com.android.providers.contacts.testutil.CommonDatabaseUtils;
import com.android.providers.contacts.testutil.ContactUtil;
import com.android.providers.contacts.testutil.DataUtil;
@@ -91,7 +93,6 @@ import com.android.providers.contacts.testutil.DatabaseAsserts;
import com.android.providers.contacts.testutil.DeletedContactUtil;
import com.android.providers.contacts.testutil.RawContactUtil;
import com.android.providers.contacts.testutil.TestUtil;
-import com.android.providers.contacts.tests.R;
import com.android.providers.contacts.util.NullContentProvider;
import com.android.providers.contacts.util.UserUtils;
@@ -4242,6 +4243,136 @@ public class ContactsProvider2Test extends BaseContactsProvider2Test {
new String[] {"c", "d", "plus"}, Settings.SHOULD_SYNC, "0");
}
+ public void testSettingsDeletion() {
+ Account account = new Account("a", "b");
+ Uri settingUri = createSettings(account, "0", "1");
+ long rawContactId = RawContactUtil.createRawContact(mResolver, account);
+
+ int count = mResolver.delete(settingUri, null, null);
+
+ // Settings cannot be deleted when there are still raw contacts for the account.
+ assertEquals(0, count);
+
+ assertStoredValue(Settings.CONTENT_URI,
+ Settings.ACCOUNT_NAME + "= ? AND " + Settings.ACCOUNT_TYPE + "= ?",
+ new String[] {"a", "b"}, Settings.UNGROUPED_VISIBLE, "1");
+
+ RawContactUtil.delete(mResolver, rawContactId, true);
+
+ count = mResolver.delete(settingUri, null, null);
+
+ assertEquals(1, count);
+ assertRowCount(0, Settings.CONTENT_URI, null, null);
+ }
+
+ public void testSettingsUpdate() {
+ Account account1 = new Account("a", "b");
+ Account account2 = new Account("c", "d");
+ Account account3 = new Account("e", "f");
+ createSettings(account1, "0", "0");
+ createSettings(account2, "0", "0");
+ createSettings(account3, "0", "0");
+
+ ContentValues values = new ContentValues();
+ values.put(Settings.UNGROUPED_VISIBLE, 1);
+ int count = mResolver.update(Settings.CONTENT_URI, values, null, null);
+
+ assertEquals(3, count);
+ assertStoredValues(Settings.CONTENT_URI,
+ cv(Settings.UNGROUPED_VISIBLE, 1),
+ cv(Settings.UNGROUPED_VISIBLE, 1),
+ cv(Settings.UNGROUPED_VISIBLE, 1));
+
+ values.put(Settings.SHOULD_SYNC, 1);
+ count = mResolver.update(Settings.CONTENT_URI, values,
+ Settings.ACCOUNT_NAME + "=?", new String[] {"a"});
+
+ assertEquals(1, count);
+ assertStoredValues(Settings.CONTENT_URI,
+ cv(Settings.ACCOUNT_NAME, "a",
+ Settings.SHOULD_SYNC, 1),
+ cv(Settings.ACCOUNT_NAME, "c",
+ Settings.SHOULD_SYNC, 0),
+ cv(Settings.ACCOUNT_NAME, "e",
+ Settings.SHOULD_SYNC, 0));
+
+ values.clear();
+ // Settings are stored in the accounts table but updates shouldn't be allowed to modify
+ // the other non-Settings columns.
+ values.put(Settings.ACCOUNT_NAME, "x");
+ values.put(Settings.ACCOUNT_TYPE, "y");
+ values.put(Settings.DATA_SET, "z");
+ mResolver.update(Settings.CONTENT_URI, values, null, null);
+
+ values.put(AccountsColumns.SIM_EF_TYPE, 1);
+ values.put(AccountsColumns.SIM_SLOT_INDEX, 1);
+ try {
+ mResolver.update(Settings.CONTENT_URI, values, null, null);
+ } catch (Exception e) {
+ // ignored. We just care that the update didn't change the data
+ }
+
+ assertStoredValuesDb("SELECT * FROM " + Tables.ACCOUNTS, null,
+ cv(
+ Settings.ACCOUNT_NAME, "a",
+ Settings.ACCOUNT_TYPE, "b",
+ Settings.DATA_SET, null,
+ AccountsColumns.SIM_SLOT_INDEX, null,
+ AccountsColumns.SIM_EF_TYPE, null
+ ),
+ cv(
+ Settings.ACCOUNT_NAME, "c",
+ Settings.ACCOUNT_TYPE, "d",
+ Settings.DATA_SET, null,
+ AccountsColumns.SIM_SLOT_INDEX, null,
+ AccountsColumns.SIM_EF_TYPE, null
+ ),
+ cv(
+ Settings.ACCOUNT_NAME, "e",
+ Settings.ACCOUNT_TYPE, "f",
+ Settings.DATA_SET, null,
+ AccountsColumns.SIM_SLOT_INDEX, null,
+ AccountsColumns.SIM_EF_TYPE, null
+ ));
+ }
+
+ public void testSettingsLocalAccount() {
+ AccountWithDataSet localAccount = AccountWithDataSet.LOCAL;
+
+ // It's not possible to insert the local account directly into settings but it will be
+ // created automatically when a raw contact is created for it.
+ RawContactUtil.createRawContactWithAccountDataSet(
+ mResolver, localAccount.getAccountName(),
+ localAccount.getAccountType(), localAccount.getDataSet());
+
+ ContentValues values = new ContentValues();
+ values.put(Settings.ACCOUNT_NAME, localAccount.getAccountName());
+ values.put(Settings.ACCOUNT_TYPE, localAccount.getAccountType());
+ values.put(Settings.DATA_SET, localAccount.getDataSet());
+ ContentValues expectedValues = new ContentValues(values);
+ // The defaults for the local account are opposite of other accounts.
+ expectedValues.put(Settings.UNGROUPED_VISIBLE, "1");
+ expectedValues.put(Settings.SHOULD_SYNC, "0");
+
+ assertStoredValues(Settings.CONTENT_URI, expectedValues);
+
+ values.put(Settings.SHOULD_SYNC, 1);
+ values.put(Settings.UNGROUPED_VISIBLE, 0);
+ mResolver.update(Settings.CONTENT_URI, values, null, null);
+
+ expectedValues.put(Settings.UNGROUPED_VISIBLE, "0");
+ expectedValues.put(Settings.SHOULD_SYNC, "1");
+ assertStoredValues(Settings.CONTENT_URI, expectedValues);
+
+ // Empty strings should also be the local account.
+ values.put(Settings.ACCOUNT_NAME, "");
+ values.put(Settings.ACCOUNT_TYPE, "");
+ values.put(Settings.DATA_SET, "");
+ mResolver.insert(Settings.CONTENT_URI, values);
+
+ assertRowCount(1, Settings.CONTENT_URI, null, null);
+ }
+
public void testDisplayNameParsingWhenPartsUnspecified() {
long rawContactId = RawContactUtil.createRawContact(mResolver);
ContentValues values = new ContentValues();