blob: ec08a76a72a8b1f94aefc238d326880218433423 [file] [log] [blame]
Dmitri Plotnikov9692f262010-06-29 18:53:11 -07001/*
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.interactions;
18
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070019import android.content.ContentUris;
20import android.net.Uri;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070021import android.provider.ContactsContract.Contacts;
22import android.provider.ContactsContract.Contacts.Entity;
23import android.test.ActivityInstrumentationTestCase2;
Marcus Hagerott38212ae2016-09-13 09:18:09 -070024import android.test.suitebuilder.annotation.MediumTest;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070025
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -080026import com.android.contacts.ContactsApplication;
Dmitri Plotnikov9692f262010-06-29 18:53:11 -070027import com.android.contacts.R;
Chiao Cheng0d5588d2012-11-26 15:34:14 -080028import com.android.contacts.common.model.AccountTypeManager;
Chiao Cheng428f0082012-11-13 18:38:56 -080029import com.android.contacts.common.model.account.AccountType;
30import com.android.contacts.common.model.account.BaseAccountType;
Marcus Hagerott38212ae2016-09-13 09:18:09 -070031import com.android.contacts.common.test.FragmentTestActivity;
32import com.android.contacts.common.test.IntegrationTestUtils;
33import com.android.contacts.common.test.mocks.ContactsMockContext;
Yorke Leecd321f62013-10-28 15:20:15 -070034import com.android.contacts.common.test.mocks.MockAccountTypeManager;
Marcus Hagerott38212ae2016-09-13 09:18:09 -070035import com.android.contacts.common.test.mocks.MockContentProvider;
36import com.android.contacts.common.test.mocks.MockContentProvider.Query;
37import com.android.contacts.common.testing.InjectedServices;
Dmitri Plotnikov9692f262010-06-29 18:53:11 -070038
Dmitri Plotnikov9692f262010-06-29 18:53:11 -070039/**
40 * Tests for {@link ContactDeletionInteraction}.
41 *
42 * Running all tests:
43 *
44 * runtest contacts
45 * or
46 * adb shell am instrument \
47 * -w com.android.contacts.tests/android.test.InstrumentationTestRunner
48 */
Marcus Hagerott38212ae2016-09-13 09:18:09 -070049@MediumTest
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -080050public class ContactDeletionInteractionTest
51 extends ActivityInstrumentationTestCase2<FragmentTestActivity> {
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -080052 private static final Uri CONTACT_URI = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
53 private static final Uri ENTITY_URI = Uri.withAppendedPath(
54 CONTACT_URI, Entity.CONTENT_DIRECTORY);
55
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080056 public static final String WRITABLE_ACCOUNT_TYPE = "writable";
57 public static final String READONLY_ACCOUNT_TYPE = "readonly";
58
Dmitri Plotnikov9692f262010-06-29 18:53:11 -070059 private ContactsMockContext mContext;
60 private MockContentProvider mContactsProvider;
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -080061 private ContactDeletionInteraction mFragment;
Hugo Hudson149fb7f2011-07-21 14:57:53 +010062 private IntegrationTestUtils mUtils;
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -080063
64 public ContactDeletionInteractionTest() {
65 super(FragmentTestActivity.class);
66 }
Dmitri Plotnikov9692f262010-06-29 18:53:11 -070067
68 @Override
69 protected void setUp() throws Exception {
70 super.setUp();
Hugo Hudson149fb7f2011-07-21 14:57:53 +010071 // This test requires that the screen be turned on.
72 mUtils = new IntegrationTestUtils(getInstrumentation());
73 mUtils.acquireScreenWakeLock(getInstrumentation().getTargetContext());
74
Chiao Chengdabac3f2012-11-01 17:03:07 -070075 mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -080076 InjectedServices services = new InjectedServices();
77 services.setContentResolver(mContext.getContentResolver());
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080078
Daniel Lehmann96e87fd2011-09-20 21:31:37 -070079 AccountType readOnlyAccountType = new BaseAccountType() {
80 @Override
81 public boolean areContactsWritable() {
82 return false;
83 }
84 };
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080085 readOnlyAccountType.accountType = READONLY_ACCOUNT_TYPE;
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080086
Daniel Lehmann96e87fd2011-09-20 21:31:37 -070087 AccountType writableAccountType = new BaseAccountType() {
88 @Override
89 public boolean areContactsWritable() {
90 return true;
91 }
92 };
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080093 writableAccountType.accountType = WRITABLE_ACCOUNT_TYPE;
Dmitri Plotnikov6f667b52011-01-09 12:53:13 -080094 ContactsApplication.injectServices(services);
Chiao Chengdabac3f2012-11-01 17:03:07 -070095
96 final MockAccountTypeManager mockManager = new MockAccountTypeManager(
97 new AccountType[] { writableAccountType, readOnlyAccountType }, null);
98 AccountTypeManager.setInstanceForTest(mockManager);
Dmitri Plotnikov9692f262010-06-29 18:53:11 -070099 mContactsProvider = mContext.getContactsProvider();
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -0800100 }
101
102 @Override
103 protected void tearDown() throws Exception {
Dmitri Plotnikov6f667b52011-01-09 12:53:13 -0800104 ContactsApplication.injectServices(null);
Hugo Hudson149fb7f2011-07-21 14:57:53 +0100105 mUtils.releaseScreenWakeLock();
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -0800106 super.tearDown();
Dmitri Plotnikov9692f262010-06-29 18:53:11 -0700107 }
108
109 public void testSingleWritableRawContact() {
James Laskey202ad072016-10-21 09:40:56 -0700110 expectQuery().returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
Dmitri Plotnikov9692f262010-06-29 18:53:11 -0700111 assertWithMessageId(R.string.deleteConfirmation);
112 }
113
114 public void testReadOnlyRawContacts() {
James Laskey202ad072016-10-21 09:40:56 -0700115 expectQuery().returnRow(1, READONLY_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
Dmitri Plotnikov9692f262010-06-29 18:53:11 -0700116 assertWithMessageId(R.string.readOnlyContactWarning);
117 }
118
119 public void testMixOfWritableAndReadOnlyRawContacts() {
120 expectQuery()
James Laskey202ad072016-10-21 09:40:56 -0700121 .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt")
122 .returnRow(2, READONLY_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
Dmitri Plotnikov9692f262010-06-29 18:53:11 -0700123 assertWithMessageId(R.string.readOnlyContactDeleteConfirmation);
124 }
125
126 public void testMultipleWritableRawContacts() {
127 expectQuery()
James Laskey202ad072016-10-21 09:40:56 -0700128 .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt")
129 .returnRow(2, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
Dmitri Plotnikov9692f262010-06-29 18:53:11 -0700130 assertWithMessageId(R.string.multipleContactDeleteConfirmation);
131 }
132
133 private Query expectQuery() {
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -0800134 return mContactsProvider.expectQuery(ENTITY_URI).withProjection(
Dave Santoro2b3f3c52011-07-26 17:35:42 -0700135 Entity.RAW_CONTACT_ID, Entity.ACCOUNT_TYPE, Entity.DATA_SET, Entity.CONTACT_ID,
James Laskey202ad072016-10-21 09:40:56 -0700136 Entity.LOOKUP_KEY, Entity.DISPLAY_NAME, Entity.DISPLAY_NAME_ALTERNATIVE);
Dmitri Plotnikov9692f262010-06-29 18:53:11 -0700137 }
138
139 private void assertWithMessageId(int messageId) {
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -0800140 final FragmentTestActivity activity = getActivity();
141
Flavio Lerda34ce5e92011-06-06 15:25:17 +0100142 final TestLoaderManager mockLoaderManager = new TestLoaderManager();
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -0800143 getInstrumentation().runOnMainSync(new Runnable() {
144 @Override
145 public void run() {
Flavio Lerda34ce5e92011-06-06 15:25:17 +0100146 mFragment = ContactDeletionInteraction.startWithTestLoaderManager(
147 activity, CONTACT_URI, false, mockLoaderManager);
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -0800148 }
149 });
150
151 getInstrumentation().waitForIdleSync();
152
Flavio Lerda34ce5e92011-06-06 15:25:17 +0100153 mockLoaderManager.waitForLoaders(R.id.dialog_delete_contact_loader_id);
Dmitri Plotnikov43fd1e82011-01-09 11:29:39 -0800154
155 getInstrumentation().waitForIdleSync();
156
157 mContext.verify();
158
159 assertEquals(messageId, mFragment.mMessageId);
Dmitri Plotnikov9692f262010-06-29 18:53:11 -0700160 }
161}