ContactLoaderTest.java revision 5ade0bb1757b216ace2f50d2357409bf9876a07a
15ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee/* 25ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Copyright (C) 2010 The Android Open Source Project 35ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 45ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Licensed under the Apache License, Version 2.0 (the "License"); 55ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * you may not use this file except in compliance with the License. 65ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * You may obtain a copy of the License at 75ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 85ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * http://www.apache.org/licenses/LICENSE-2.0 95ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Unless required by applicable law or agreed to in writing, software 115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * distributed under the License is distributed on an "AS IS" BASIS, 125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * See the License for the specific language governing permissions and 145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * limitations under the License. 155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leepackage com.android.contacts.common.model; 185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.content.ContentUris; 205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.net.Uri; 215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.CommonDataKinds.GroupMembership; 225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.CommonDataKinds.StructuredName; 235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.Contacts; 245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.Data; 255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.DisplayNameSources; 265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.RawContacts; 275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.StatusUpdates; 285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.test.LoaderTestCase; 295ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.test.suitebuilder.annotation.LargeTest; 305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.model.AccountTypeManager; 325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.test.mocks.ContactsMockContext; 335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.test.mocks.MockContentProvider; 345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.model.account.AccountType; 355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.model.account.AccountWithDataSet; 365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.model.account.BaseAccountType; 375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.test.InjectedServices; 385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.test.mocks.MockAccountTypeManager; 395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee/** 415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Runs ContactLoader tests for the the contact-detail and editor view. 425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee@LargeTest 445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leepublic class ContactLoaderTest extends LoaderTestCase { 455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private ContactsMockContext mMockContext; 465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private MockContentProvider mContactsProvider; 475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee @Override 495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee protected void setUp() throws Exception { 505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee super.setUp(); 515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mMockContext = new ContactsMockContext(getContext()); 525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider = mMockContext.getContactsProvider(); 535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee InjectedServices services = new InjectedServices(); 555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee AccountType accountType = new BaseAccountType() { 565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee @Override 575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean areContactsWritable() { 585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return false; 595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee }; 615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee accountType.accountType = "mockAccountType"; 625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee AccountWithDataSet account = 645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee new AccountWithDataSet("mockAccountName", "mockAccountType", null); 655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee AccountTypeManager.setInstanceForTest( 675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee new MockAccountTypeManager( 685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee new AccountType[]{accountType}, new AccountWithDataSet[]{account})); 695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee @Override 725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee protected void tearDown() throws Exception { 735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mMockContext = null; 745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider = null; 755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee super.tearDown(); 765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private Contact assertLoadContact(Uri uri) { 795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final ContactLoader loader = new ContactLoader(mMockContext, uri, true); 805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return getLoaderResultSynchronously(loader); 815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testNullUri() { 845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact result = assertLoadContact(null); 855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertTrue(result.isError()); 865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testEmptyUri() { 895ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact result = assertLoadContact(Uri.EMPTY); 905ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertTrue(result.isError()); 915ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 925ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testInvalidUri() { 945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact result = assertLoadContact(Uri.parse("content://wtf")); 955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertTrue(result.isError()); 965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 975ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 985ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testLoadContactWithContactIdUri() { 995ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Use content Uris that only contain the ID 1005ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long contactId = 1; 1015ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long rawContactId = 11; 1025ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long dataId = 21; 1035ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1045ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String lookupKey = "aa%12%@!"; 1055ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 1065ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri entityUri = Uri.withAppendedPath(baseUri, Contacts.Entity.CONTENT_DIRECTORY); 1075ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupUri = ContentUris.withAppendedId( 1085ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), 1095ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee contactId); 1105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ContactQueries queries = new ContactQueries(); 1125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectTypeQuery(baseUri, Contacts.CONTENT_ITEM_TYPE); 1135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchAllData(entityUri, contactId, rawContactId, dataId, lookupKey); 1145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact contact = assertLoadContact(baseUri); 1165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(contactId, contact.getId()); 1185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(rawContactId, contact.getNameRawContactId()); 1195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource()); 1205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupKey, contact.getLookupKey()); 1215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupUri, contact.getLookupUri()); 1225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getRawContacts().size()); 1235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getStatuses().size()); 1245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.verify(); 1255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testLoadContactWithOldStyleUri() { 1285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Use content Uris that only contain the ID but use the format used in Donut 1295ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long contactId = 1; 1305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long rawContactId = 11; 1315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long dataId = 21; 1325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String lookupKey = "aa%12%@!"; 1345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri legacyUri = ContentUris.withAppendedId( 1355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri.parse("content://contacts"), rawContactId); 1365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); 1375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 1385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupUri = ContentUris.withAppendedId( 1395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), 1405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee contactId); 1415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY); 1425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ContactQueries queries = new ContactQueries(); 1445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, contactId, lookupKey); 1455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchAllData(entityUri, contactId, rawContactId, dataId, lookupKey); 1465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact contact = assertLoadContact(legacyUri); 1485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(contactId, contact.getId()); 1505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(rawContactId, contact.getNameRawContactId()); 1515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource()); 1525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupKey, contact.getLookupKey()); 1535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupUri, contact.getLookupUri()); 1545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getRawContacts().size()); 1555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getStatuses().size()); 1565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.verify(); 1575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testLoadContactWithRawContactIdUri() { 1605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Use content Uris that only contain the ID but use the format used in Donut 1615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long contactId = 1; 1625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long rawContactId = 11; 1635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long dataId = 21; 1645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String lookupKey = "aa%12%@!"; 1665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); 1675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 1685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupUri = ContentUris.withAppendedId( 1695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), 1705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee contactId); 1715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY); 1725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ContactQueries queries = new ContactQueries(); 1745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectTypeQuery(rawContactUri, RawContacts.CONTENT_ITEM_TYPE); 1755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, contactId, lookupKey); 1765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchAllData(entityUri, contactId, rawContactId, dataId, lookupKey); 1775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact contact = assertLoadContact(rawContactUri); 1795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(contactId, contact.getId()); 1815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(rawContactId, contact.getNameRawContactId()); 1825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource()); 1835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupKey, contact.getLookupKey()); 1845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupUri, contact.getLookupUri()); 1855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getRawContacts().size()); 1865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getStatuses().size()); 1875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.verify(); 1885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1895ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1905ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testLoadContactWithContactLookupUri() { 1915ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Use lookup-style Uris that do not contain the Contact-ID 1925ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long contactId = 1; 1945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long rawContactId = 11; 1955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long dataId = 21; 1965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1975ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String lookupKey = "aa%12%@!"; 1985ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 1995ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupNoIdUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey); 2005ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupUri = ContentUris.withAppendedId(lookupNoIdUri, contactId); 2015ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri entityUri = Uri.withAppendedPath(lookupNoIdUri, Contacts.Entity.CONTENT_DIRECTORY); 2025ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2035ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ContactQueries queries = new ContactQueries(); 2045ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectTypeQuery(lookupNoIdUri, Contacts.CONTENT_ITEM_TYPE); 2055ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchAllData(entityUri, contactId, rawContactId, dataId, lookupKey); 2065ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2075ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact contact = assertLoadContact(lookupNoIdUri); 2085ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2095ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(contactId, contact.getId()); 2105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(rawContactId, contact.getNameRawContactId()); 2115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource()); 2125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupKey, contact.getLookupKey()); 2135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupUri, contact.getLookupUri()); 2145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getRawContacts().size()); 2155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getStatuses().size()); 2165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.verify(); 2175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testLoadContactWithContactLookupAndIdUri() { 2205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Use lookup-style Uris that also contain the Contact-ID 2215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long contactId = 1; 2225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long rawContactId = 11; 2235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long dataId = 21; 2245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String lookupKey = "aa%12%@!"; 2265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 2275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupUri = ContentUris.withAppendedId( 2285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), 2295ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee contactId); 2305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY); 2315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ContactQueries queries = new ContactQueries(); 2335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectTypeQuery(lookupUri, Contacts.CONTENT_ITEM_TYPE); 2345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchAllData(entityUri, contactId, rawContactId, dataId, lookupKey); 2355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact contact = assertLoadContact(lookupUri); 2375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(contactId, contact.getId()); 2395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(rawContactId, contact.getNameRawContactId()); 2405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource()); 2415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupKey, contact.getLookupKey()); 2425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupUri, contact.getLookupUri()); 2435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getRawContacts().size()); 2445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getStatuses().size()); 2455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.verify(); 2465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void testLoadContactWithContactLookupWithIncorrectIdUri() { 2495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Use lookup-style Uris that contain incorrect Contact-ID 2505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // (we want to ensure that still the correct contact is chosen) 2515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long contactId = 1; 2535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long wrongContactId = 2; 2545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long rawContactId = 11; 2555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long wrongRawContactId = 12; 2565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long dataId = 21; 2575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String lookupKey = "aa%12%@!"; 2595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String wrongLookupKey = "ab%12%@!"; 2605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 2615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri wrongBaseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, wrongContactId); 2625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupUri = ContentUris.withAppendedId( 2635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), 2645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee contactId); 2655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri lookupWithWrongIdUri = ContentUris.withAppendedId( 2665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), 2675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee wrongContactId); 2685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri entityUri = Uri.withAppendedPath(lookupWithWrongIdUri, 2695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.Entity.CONTENT_DIRECTORY); 2705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ContactQueries queries = new ContactQueries(); 2725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectTypeQuery(lookupWithWrongIdUri, Contacts.CONTENT_ITEM_TYPE); 2735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee queries.fetchAllData(entityUri, contactId, rawContactId, dataId, lookupKey); 2745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contact contact = assertLoadContact(lookupWithWrongIdUri); 2765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(contactId, contact.getId()); 2785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(rawContactId, contact.getNameRawContactId()); 2795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource()); 2805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupKey, contact.getLookupKey()); 2815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(lookupUri, contact.getLookupUri()); 2825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getRawContacts().size()); 2835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee assertEquals(1, contact.getStatuses().size()); 2845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.verify(); 2865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee class ContactQueries { 2895ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void fetchAllData( 2905ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Uri baseUri, long contactId, long rawContactId, long dataId, String encodedLookup) { 2915ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectQuery(baseUri) 2925ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee .withProjection(new String[] { 2935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.NAME_RAW_CONTACT_ID, Contacts.DISPLAY_NAME_SOURCE, 2945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME, 2955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.DISPLAY_NAME_ALTERNATIVE, Contacts.PHONETIC_NAME, 2965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.PHOTO_ID, Contacts.STARRED, Contacts.CONTACT_PRESENCE, 2975ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.CONTACT_STATUS, Contacts.CONTACT_STATUS_TIMESTAMP, 2985ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.CONTACT_STATUS_RES_PACKAGE, Contacts.CONTACT_STATUS_LABEL, 2995ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3005ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.Entity.CONTACT_ID, 3015ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.Entity.RAW_CONTACT_ID, 3025ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3035ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE, 3045ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee RawContacts.DATA_SET, RawContacts.ACCOUNT_TYPE_AND_DATA_SET, 3055ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee RawContacts.DIRTY, RawContacts.VERSION, RawContacts.SOURCE_ID, 3065ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee RawContacts.SYNC1, RawContacts.SYNC2, RawContacts.SYNC3, RawContacts.SYNC4, 3075ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee RawContacts.DELETED, RawContacts.NAME_VERIFIED, 3085ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3095ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.Entity.DATA_ID, 3105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5, 3125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.DATA6, Data.DATA7, Data.DATA8, Data.DATA9, Data.DATA10, 3135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.DATA11, Data.DATA12, Data.DATA13, Data.DATA14, Data.DATA15, 3145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.SYNC1, Data.SYNC2, Data.SYNC3, Data.SYNC4, 3155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.DATA_VERSION, Data.IS_PRIMARY, 3165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.IS_SUPER_PRIMARY, Data.MIMETYPE, Data.RES_PACKAGE, 3175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee GroupMembership.GROUP_SOURCE_ID, 3195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.PRESENCE, Data.CHAT_CAPABILITY, 3215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.STATUS, Data.STATUS_RES_PACKAGE, Data.STATUS_ICON, 3225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Data.STATUS_LABEL, Data.STATUS_TIMESTAMP, 3235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.PHOTO_URI, 3255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.SEND_TO_VOICEMAIL, 3275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.CUSTOM_RINGTONE, 3285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee Contacts.IS_USER_PROFILE, 3295ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee }) 3305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee .withSortOrder(Contacts.Entity.RAW_CONTACT_ID) 3315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee .returnRow( 3325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee rawContactId, 40, 3335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "aa%12%@!", "John Doe", "Doe, John", "jdo", 3345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 0, 0, StatusUpdates.AVAILABLE, 3355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "Having lunch", 0, 3365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "mockPkg1", 10, 3375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee contactId, 3395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee rawContactId, 3405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "mockAccountName", "mockAccountType", null, "mockAccountType", 3425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 0, 1, 0, 3435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "sync1", "sync2", "sync3", "sync4", 3445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 0, 0, 3455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee dataId, 3475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "dat1", "dat2", "dat3", "dat4", "dat5", 3495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "dat6", "dat7", "dat8", "dat9", "dat10", 3505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "dat11", "dat12", "dat13", "dat14", "dat15", 3515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "syn1", "syn2", "syn3", "syn4", 3525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 0, 0, 3545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 0, StructuredName.CONTENT_ITEM_TYPE, "mockPkg2", 3555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "groupId", 3575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee StatusUpdates.INVISIBLE, null, 3595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "Having dinner", "mockPkg3", 0, 3605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 20, 0, 3615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "content:some.photo.uri", 3635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 0, 3655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee null, 3665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 0 3675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ); 3685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee void fetchLookupAndId(final Uri sourceUri, final long expectedContactId, 3715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final String expectedEncodedLookup) { 3725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectQuery(sourceUri) 3735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee .withProjection(Contacts.LOOKUP_KEY, Contacts._ID) 3745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee .returnRow(expectedEncodedLookup, expectedContactId); 3755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee void fetchContactIdAndLookupFromRawContactUri(final Uri rawContactUri, 3785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final long expectedContactId, final String expectedEncodedLookup) { 3795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // TODO: use a lighter query by joining rawcontacts with contacts in provider 3805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // (See ContactContracts.java) 3815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee final Uri dataUri = Uri.withAppendedPath(rawContactUri, 3825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee RawContacts.Data.CONTENT_DIRECTORY); 3835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mContactsProvider.expectQuery(dataUri) 3845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee .withProjection(RawContacts.CONTACT_ID, Contacts.LOOKUP_KEY) 3855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee .returnRow(expectedContactId, expectedEncodedLookup); 3865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee} 389