diff options
author | Mike Dodd <mdodd@google.com> | 2015-08-11 11:16:59 -0700 |
---|---|---|
committer | Mike Dodd <mdodd@google.com> | 2015-08-12 12:47:26 -0700 |
commit | d3b009ae55651f1e60950342468e3c37fdeb0796 (patch) | |
tree | bc4b489af52d0e2521e21167d2ad76a47256f348 /tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java | |
parent | ef8c7abbcfc9c770385d6609a4b4bc70240ebdc4 (diff) | |
download | android_packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.tar.gz android_packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.tar.bz2 android_packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.zip |
Initial checkin of AOSP Messaging app.
b/23110861
Change-Id: I11db999bd10656801e618f78ab2b2ef74136fff1
Diffstat (limited to 'tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java')
-rw-r--r-- | tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java b/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java new file mode 100644 index 0000000..b05b022 --- /dev/null +++ b/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.messaging.datamodel.action; + +import android.content.pm.ProviderInfo; +import android.database.Cursor; +import android.net.Uri; +import android.test.mock.MockContentProvider; +import android.test.suitebuilder.annotation.SmallTest; + +import com.android.messaging.BugleTestCase; +import com.android.messaging.FakeContext; +import com.android.messaging.FakeFactory; +import com.android.messaging.datamodel.BugleDatabaseOperations; +import com.android.messaging.datamodel.DataModel; +import com.android.messaging.datamodel.DatabaseWrapper; +import com.android.messaging.datamodel.FakeDataModel; +import com.android.messaging.datamodel.MessagingContentProvider; +import com.android.messaging.datamodel.action.ActionTestHelpers.StubActionService; +import com.android.messaging.datamodel.action.ActionTestHelpers.StubActionService.StubActionServiceCallLog; +import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionListener; +import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionMonitor; +import com.android.messaging.datamodel.data.ParticipantData; +import com.android.messaging.datamodel.data.TestDataFactory; +import com.android.messaging.sms.MmsUtils; + +import org.mockito.Mock; + +import java.util.ArrayList; + +@SmallTest +public class GetOrCreateConversationActionTest extends BugleTestCase { + + @Mock GetOrCreateConversationActionListener mockListener; + + public void testGetOrCreateConversation() { + final DatabaseWrapper db = DataModel.get().getDatabase(); + + final ArrayList<String> recipients = new ArrayList<String>(); + recipients.add("5551234567"); + recipients.add("5551234568"); + + // Generate a list of partially formed participants + final ArrayList<ParticipantData> participants = new + ArrayList<ParticipantData>(); + + + for (final String recipient : recipients) { + participants.add(ParticipantData.getFromRawPhoneBySystemLocale(recipient)); + } + + // Test that we properly stubbed the SMS provider to return a thread id + final long threadId = MmsUtils.getOrCreateThreadId(mContext, recipients); + assertEquals(TestDataFactory.SMS_MMS_THREAD_ID_CURSOR_VALUE, threadId); + + final String blankId = BugleDatabaseOperations.getExistingConversation(db, threadId, false); + assertNull("Conversation already exists", blankId); + + ArrayList<StubActionServiceCallLog> calls = mService.getCalls(); + + GetOrCreateConversationActionMonitor monitor = + GetOrCreateConversationAction.getOrCreateConversation(participants, null, + mockListener); + + assertEquals("Failed to start service once for action", calls.size(), 1); + assertTrue("Action not GetOrCreateConversationAction", calls.get(0).action instanceof + GetOrCreateConversationAction); + + GetOrCreateConversationAction action = (GetOrCreateConversationAction) + calls.get(0).action; + + Object result = action.executeAction(); + + assertTrue(result instanceof String); + + // Make sure that we created a new conversation + assertEquals(TestDataFactory.NUM_TEST_CONVERSATIONS+1, Integer.parseInt((String)result)); + + // Now get the conversation that we just created again + monitor = GetOrCreateConversationAction.getOrCreateConversation(participants, null, + mockListener); + + calls = mService.getCalls(); + assertEquals("Failed to start service for second action", calls.size(), 2); + assertTrue("Action not GetOrCreateConversationAction", calls.get(1).action instanceof + GetOrCreateConversationAction); + action = (GetOrCreateConversationAction)calls.get(1).action; + result = action.executeAction(); + + assertTrue(result instanceof String); + + final String conversationId = (String) result; + + // Make sure that we found the same conversation id + assertEquals(TestDataFactory.NUM_TEST_CONVERSATIONS+1, Integer.parseInt((String)result)); + + final ArrayList<ParticipantData> conversationParticipants = + BugleDatabaseOperations.getParticipantsForConversation(db, conversationId); + + assertEquals("Participant count mismatch", recipients.size(), + conversationParticipants.size()); + for(final ParticipantData participant : conversationParticipants) { + assertTrue(recipients.contains(participant.getSendDestination())); + } + + final Uri conversationParticipantsUri = + MessagingContentProvider.buildConversationParticipantsUri(conversationId); + final Cursor cursor = mContext.getContentResolver().query(conversationParticipantsUri, + ParticipantData.ParticipantsQuery.PROJECTION, null, null, null); + + int countSelf = 0; + while(cursor.moveToNext()) { + final ParticipantData participant = ParticipantData.getFromCursor(cursor); + if (participant.isSelf()) { + countSelf++; + } else { + assertTrue(recipients.contains(participant.getSendDestination())); + } + } + cursor.close(); + assertEquals("Expect one self participant in conversations", 1, countSelf); + assertEquals("Cursor count mismatch", recipients.size(), cursor.getCount() - countSelf); + + final String realId = BugleDatabaseOperations.getExistingConversation(db, threadId, false); + assertEquals("Conversation already exists", realId, conversationId); + } + + private FakeContext mContext; + private StubActionService mService; + + @Override + public void setUp() throws Exception { + super.setUp(); + + mContext = new FakeContext(getTestContext()); + + final MockContentProvider mockProvider = new MockContentProvider() { + @Override + public Cursor query(final Uri uri, final String[] projection, final String selection, + final String[] selectionArgs, final String sortOrder) { + return TestDataFactory.getSmsMmsThreadIdCursor(); + } + }; + + mContext.addContentProvider("mms-sms", mockProvider); + final MessagingContentProvider provider = new MessagingContentProvider(); + final ProviderInfo providerInfo = new ProviderInfo(); + providerInfo.authority = MessagingContentProvider.AUTHORITY; + provider.attachInfo(mContext, providerInfo); + mContext.addContentProvider(MessagingContentProvider.AUTHORITY, provider); + + mService = new StubActionService(); + final FakeDataModel fakeDataModel = new FakeDataModel(mContext) + .withActionService(mService); + FakeFactory.registerWithFakeContext(getTestContext(), mContext) + .withDataModel(fakeDataModel); + provider.setDatabaseForTest(fakeDataModel.getDatabase()); + } +} |