132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov/*
232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *
432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * you may not use this file except in compliance with the License.
632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * You may obtain a copy of the License at
732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *
832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *
1032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
1132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
1232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * See the License for the specific language governing permissions and
1432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * limitations under the License.
1532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov */
1632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
1732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikovpackage com.android.contacts.activities;
1832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
197039633999b3a46a87c851fa06d9168897ccc54bYorke Leeimport android.content.ContentUris;
20e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.ContentValues;
21e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.net.Uri;
22e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract;
23e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Contacts;
24e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Directory;
25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Groups;
26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.ProviderStatus;
27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.ActivityInstrumentationTestCase2;
28e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.suitebuilder.annotation.SmallTest;
29e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
300a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.ContactPhotoManager;
311173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.ContactsApplication;
3269c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.AccountTypeManager;
3369c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountType;
3469c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountWithDataSet;
3569c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.BaseAccountType;
360a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.ContactsMockContext;
370a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockAccountTypeManager;
380a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockContactPhotoManager;
390a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockContentProvider;
400a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockContentProvider.Query;
410a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockSharedPreferences;
420a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.testing.InjectedServices;
4332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
4432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov/**
45e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * This test is so outdated that it's disabled temporarily.  TODO Update the test and re-enable it.
46e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki *
479856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan * Tests for {@link PeopleActivity}.
4832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *
4932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Running all tests:
5032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *
5132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *   runtest contacts
5232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * or
5332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *   adb shell am instrument \
5432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *     -w com.android.contacts.tests/android.test.InstrumentationTestRunner
55e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki *
5632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov */
570454960b4b9e43b75bbfd0fb296c25d59111a765Daisuke Miyakawa@SmallTest
589856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuanpublic class PeopleActivityTest
599856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan        extends ActivityInstrumentationTestCase2<PeopleActivity>
6032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov{
61ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private static final String TEST_ACCOUNT = "testAccount";
62ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private static final String TEST_ACCOUNT_TYPE = "testAccountType";
63ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
6432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private ContactsMockContext mContext;
6532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private MockContentProvider mContactsProvider;
661173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    private MockContentProvider mSettingsProvider;
6732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
689856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan    public PeopleActivityTest() {
699856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan        super(PeopleActivity.class);
7032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    }
7132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
7232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    @Override
7332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    public void setUp() {
74dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng        mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
7532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        mContactsProvider = mContext.getContactsProvider();
767039633999b3a46a87c851fa06d9168897ccc54bYorke Lee        // The ContactsApplication performs this getType query to warm up the provider - see
777039633999b3a46a87c851fa06d9168897ccc54bYorke Lee        // ContactsApplication#DelayedInitialization.doInBackground
787039633999b3a46a87c851fa06d9168897ccc54bYorke Lee        mContactsProvider.expectTypeQuery(ContentUris.withAppendedId(Contacts.CONTENT_URI, 1),
797039633999b3a46a87c851fa06d9168897ccc54bYorke Lee                Contacts.CONTENT_ITEM_TYPE);
801173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        mSettingsProvider = mContext.getSettingsProvider();
811173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        InjectedServices services = new InjectedServices();
821173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        services.setContentResolver(mContext.getContentResolver());
83072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov        services.setSharedPreferences(new MockSharedPreferences());
84f26fd6d6c6de1f75b33557c6297ee6b5a6e1c112Andrew Lee        ContactPhotoManager.injectContactPhotoManagerForTesting(new MockContactPhotoManager());
8596e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann        AccountType accountType = new BaseAccountType() {
8696e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            @Override
8796e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            public boolean areContactsWritable() {
8896e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann                return false;
8996e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            }
9096e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann        };
91ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        accountType.accountType = TEST_ACCOUNT_TYPE;
9232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
932b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null);
941173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        ContactsApplication.injectServices(services);
95dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng
96dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng        final MockAccountTypeManager mockManager = new MockAccountTypeManager(
97dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng                        new AccountType[] { accountType }, new AccountWithDataSet[] { account });
98dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng        AccountTypeManager.setInstanceForTest(mockManager);
991173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    }
10032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
10151ada3680de8700bc273a7e652886823f4c1981fHugo Hudson    @Override
10251ada3680de8700bc273a7e652886823f4c1981fHugo Hudson    protected void tearDown() throws Exception {
10351ada3680de8700bc273a7e652886823f4c1981fHugo Hudson        ContactsApplication.injectServices(null);
10451ada3680de8700bc273a7e652886823f4c1981fHugo Hudson        super.tearDown();
10551ada3680de8700bc273a7e652886823f4c1981fHugo Hudson    }
10651ada3680de8700bc273a7e652886823f4c1981fHugo Hudson
10732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private void expectProviderStatusQueryAndReturnNormal() {
10832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        mContactsProvider
10932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .expectQuery(ProviderStatus.CONTENT_URI)
110c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell                .withProjection(ProviderStatus.STATUS)
111c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell                .returnRow(ProviderStatus.STATUS_NORMAL)
1121173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .anyNumberOfTimes();
11332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    }
11432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
11532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private void expectGroupsQueryAndReturnEmpty() {
11632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        mContactsProvider
11732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .expectQuery(Groups.CONTENT_URI)
11832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .withAnyProjection()
11932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .withAnySelection()
1201173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .returnEmptyCursor()
1211173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .anyNumberOfTimes();
1221173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    }
1231173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov
124ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private void expectContactListQuery(int count) {
1251173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        Uri uri = Contacts.CONTENT_URI.buildUpon()
1269d2b6d5bcead8c71e96dcd27bc393e9ee0ec656fYorke Lee                .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
1271173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
1281173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                        String.valueOf(Directory.DEFAULT))
1291173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .build();
1301173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov
131ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Query query = mContactsProvider
132ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .expectQuery(uri)
133ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .withAnyProjection()
134ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .withSortOrder(Contacts.SORT_KEY_PRIMARY);
135ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        for (int i = 1; i <= count; i++) {
136ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            ContentValues values = new ContentValues();
137ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts._ID, i);
138ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts.DISPLAY_NAME, "Contact " + i);
139ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts.SORT_KEY_PRIMARY, "contact " + i);
140ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts.LOOKUP_KEY, "lu" + i);
141ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            query.returnRow(values);
142ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        }
143ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    }
144ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
145ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private void expectContactLookupQuery(
146ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            String lookupKey, long id, String returnLookupKey, long returnId) {
147ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Uri uri = Contacts.getLookupUri(id, lookupKey);
148ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        mContactsProvider.expectTypeQuery(uri, Contacts.CONTENT_ITEM_TYPE);
149ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        mContactsProvider
150ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .expectQuery(uri)
151ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .withProjection(Contacts._ID, Contacts.LOOKUP_KEY)
152ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .returnRow(returnId, returnLookupKey);
153ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    }
154ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
155ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private void expectContactEntityQuery(String lookupKey, int contactId) {
156ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Uri uri = Uri.withAppendedPath(
157ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                Contacts.getLookupUri(contactId, lookupKey), Contacts.Entity.CONTENT_DIRECTORY);
158ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        ContentValues row1 = new ContentValues();
159ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.DATA_ID, 1);
160ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.LOOKUP_KEY, lookupKey);
161ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.CONTACT_ID, contactId);
162ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.DISPLAY_NAME, "Contact " + contactId);
163ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.ACCOUNT_NAME, TEST_ACCOUNT);
164ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE);
1651173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        mContactsProvider
1661173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .expectQuery(uri)
1671173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withAnyProjection()
1681173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withAnySortOrder()
169ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .returnRow(row1)
170ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .anyNumberOfTimes();
17132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    }
17232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov}
173