blob: 4e579699355e855fb6c6f9efb52a237708bd02b6 [file] [log] [blame]
Dmitri Plotnikov32bac642011-01-06 18:43:46 -08001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.contacts.activities;
18
Yorke Lee70396332014-05-28 12:16:35 -070019import android.content.ContentUris;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070020import android.content.ContentValues;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070021import android.net.Uri;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070022import android.provider.ContactsContract;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070023import android.provider.ContactsContract.Contacts;
24import android.provider.ContactsContract.Directory;
25import android.provider.ContactsContract.Groups;
26import android.provider.ContactsContract.ProviderStatus;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070027import android.test.ActivityInstrumentationTestCase2;
28import android.test.suitebuilder.annotation.SmallTest;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070029
Gary Mai0a49afa2016-12-05 15:53:58 -080030import com.android.contacts.ContactPhotoManager;
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080031import com.android.contacts.ContactsApplication;
Gary Mai69c182a2016-12-05 13:07:03 -080032import com.android.contacts.model.AccountTypeManager;
33import com.android.contacts.model.account.AccountType;
34import com.android.contacts.model.account.AccountWithDataSet;
35import com.android.contacts.model.account.BaseAccountType;
Gary Mai0a49afa2016-12-05 15:53:58 -080036import com.android.contacts.test.mocks.ContactsMockContext;
37import com.android.contacts.test.mocks.MockAccountTypeManager;
38import com.android.contacts.test.mocks.MockContactPhotoManager;
39import com.android.contacts.test.mocks.MockContentProvider;
40import com.android.contacts.test.mocks.MockContentProvider.Query;
41import com.android.contacts.test.mocks.MockSharedPreferences;
42import com.android.contacts.testing.InjectedServices;
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080043
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080044/**
Makoto Onukie7d15fb2011-08-24 18:20:22 -070045 * This test is so outdated that it's disabled temporarily. TODO Update the test and re-enable it.
46 *
Katherine Kuan9856fce2011-06-01 10:24:09 -070047 * Tests for {@link PeopleActivity}.
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080048 *
49 * Running all tests:
50 *
51 * runtest contacts
52 * or
53 * adb shell am instrument \
54 * -w com.android.contacts.tests/android.test.InstrumentationTestRunner
Makoto Onukie7d15fb2011-08-24 18:20:22 -070055 *
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080056 */
Daisuke Miyakawa04549602011-11-23 13:25:10 -080057@SmallTest
Katherine Kuan9856fce2011-06-01 10:24:09 -070058public class PeopleActivityTest
59 extends ActivityInstrumentationTestCase2<PeopleActivity>
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080060{
Dmitri Plotnikovab75f822011-01-10 11:21:59 -080061 private static final String TEST_ACCOUNT = "testAccount";
62 private static final String TEST_ACCOUNT_TYPE = "testAccountType";
63
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080064 private ContactsMockContext mContext;
65 private MockContentProvider mContactsProvider;
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080066 private MockContentProvider mSettingsProvider;
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080067
Katherine Kuan9856fce2011-06-01 10:24:09 -070068 public PeopleActivityTest() {
69 super(PeopleActivity.class);
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080070 }
71
72 @Override
73 public void setUp() {
Chiao Chengdabac3f2012-11-01 17:03:07 -070074 mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080075 mContactsProvider = mContext.getContactsProvider();
Yorke Lee70396332014-05-28 12:16:35 -070076 // The ContactsApplication performs this getType query to warm up the provider - see
77 // ContactsApplication#DelayedInitialization.doInBackground
78 mContactsProvider.expectTypeQuery(ContentUris.withAppendedId(Contacts.CONTENT_URI, 1),
79 Contacts.CONTENT_ITEM_TYPE);
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080080 mSettingsProvider = mContext.getSettingsProvider();
81 InjectedServices services = new InjectedServices();
82 services.setContentResolver(mContext.getContentResolver());
Dmitri Plotnikov072d9112011-01-09 15:48:11 -080083 services.setSharedPreferences(new MockSharedPreferences());
Andrew Leef26fd6d2015-03-27 15:12:55 -070084 ContactPhotoManager.injectContactPhotoManagerForTesting(new MockContactPhotoManager());
Daniel Lehmann96e87fd2011-09-20 21:31:37 -070085 AccountType accountType = new BaseAccountType() {
86 @Override
87 public boolean areContactsWritable() {
88 return false;
89 }
90 };
Dmitri Plotnikovab75f822011-01-10 11:21:59 -080091 accountType.accountType = TEST_ACCOUNT_TYPE;
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080092
Dave Santoro2b3f3c52011-07-26 17:35:42 -070093 AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null);
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080094 ContactsApplication.injectServices(services);
Chiao Chengdabac3f2012-11-01 17:03:07 -070095
96 final MockAccountTypeManager mockManager = new MockAccountTypeManager(
97 new AccountType[] { accountType }, new AccountWithDataSet[] { account });
98 AccountTypeManager.setInstanceForTest(mockManager);
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080099 }
100
Hugo Hudson51ada362011-08-05 14:36:14 +0100101 @Override
102 protected void tearDown() throws Exception {
103 ContactsApplication.injectServices(null);
104 super.tearDown();
105 }
106
Dmitri Plotnikov32bac642011-01-06 18:43:46 -0800107 private void expectProviderStatusQueryAndReturnNormal() {
108 mContactsProvider
109 .expectQuery(ProviderStatus.CONTENT_URI)
Brian Attwellc3d202c2015-01-08 15:01:03 -0800110 .withProjection(ProviderStatus.STATUS)
111 .returnRow(ProviderStatus.STATUS_NORMAL)
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800112 .anyNumberOfTimes();
Dmitri Plotnikov32bac642011-01-06 18:43:46 -0800113 }
114
115 private void expectGroupsQueryAndReturnEmpty() {
116 mContactsProvider
117 .expectQuery(Groups.CONTENT_URI)
118 .withAnyProjection()
119 .withAnySelection()
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800120 .returnEmptyCursor()
121 .anyNumberOfTimes();
122 }
123
Dmitri Plotnikovab75f822011-01-10 11:21:59 -0800124 private void expectContactListQuery(int count) {
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800125 Uri uri = Contacts.CONTENT_URI.buildUpon()
Yorke Lee9d2b6d52014-09-04 14:58:56 -0700126 .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800127 .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
128 String.valueOf(Directory.DEFAULT))
129 .build();
130
Dmitri Plotnikovab75f822011-01-10 11:21:59 -0800131 Query query = mContactsProvider
132 .expectQuery(uri)
133 .withAnyProjection()
134 .withSortOrder(Contacts.SORT_KEY_PRIMARY);
135 for (int i = 1; i <= count; i++) {
136 ContentValues values = new ContentValues();
137 values.put(Contacts._ID, i);
138 values.put(Contacts.DISPLAY_NAME, "Contact " + i);
139 values.put(Contacts.SORT_KEY_PRIMARY, "contact " + i);
140 values.put(Contacts.LOOKUP_KEY, "lu" + i);
141 query.returnRow(values);
142 }
143 }
144
145 private void expectContactLookupQuery(
146 String lookupKey, long id, String returnLookupKey, long returnId) {
147 Uri uri = Contacts.getLookupUri(id, lookupKey);
148 mContactsProvider.expectTypeQuery(uri, Contacts.CONTENT_ITEM_TYPE);
149 mContactsProvider
150 .expectQuery(uri)
151 .withProjection(Contacts._ID, Contacts.LOOKUP_KEY)
152 .returnRow(returnId, returnLookupKey);
153 }
154
155 private void expectContactEntityQuery(String lookupKey, int contactId) {
156 Uri uri = Uri.withAppendedPath(
157 Contacts.getLookupUri(contactId, lookupKey), Contacts.Entity.CONTENT_DIRECTORY);
158 ContentValues row1 = new ContentValues();
159 row1.put(Contacts.Entity.DATA_ID, 1);
160 row1.put(Contacts.Entity.LOOKUP_KEY, lookupKey);
161 row1.put(Contacts.Entity.CONTACT_ID, contactId);
162 row1.put(Contacts.Entity.DISPLAY_NAME, "Contact " + contactId);
163 row1.put(Contacts.Entity.ACCOUNT_NAME, TEST_ACCOUNT);
164 row1.put(Contacts.Entity.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE);
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800165 mContactsProvider
166 .expectQuery(uri)
167 .withAnyProjection()
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800168 .withAnySortOrder()
Dmitri Plotnikovab75f822011-01-10 11:21:59 -0800169 .returnRow(row1)
170 .anyNumberOfTimes();
Dmitri Plotnikov32bac642011-01-06 18:43:46 -0800171 }
172}