+ ParticipantRefreshTest - Added UIIntents and FakeDataModel. Fixed the errors in the data verification. + GetOrCreateConversationActionTest - changed the blankId assert to assertEquals because 10 conversations were inserted when database was created. + ConversationFragmentTest - Return mockDraftMessageData even if createDraftMessageData is called with null argument. Bug: 119503204 Test: manual - Ran the following CTS tests on Pixel phone. Tested the messaging UI. $ make -j 40 $ make messagingtests -j $ ls -l out/target/product/marlin/system/app/messaging/messaging.apk -rw-r--r-- 1 rtenneti primarygroup 8974412 Dec 3 17:21 out/target/product/marlin/system/app/messaging/messaging.apk $ ls -l out/target/product/marlin/testcases/messagingtests/messagingtests.apk -rw-r--r-- 1 rtenneti primarygroup 709233 Dec 3 17:25 out/target/product/marlin/testcases/messagingtests/messagingtests.apk $ adb install -r -d out/target/product/marlin/system/app/messaging/messaging.apk $ adb install -r -d out/target/product/marlin/testcases/messagingtests/messagingtests.apk $ adb shell am instrument -w com.android.messaging.test Test results for InstrumentationTestRunner=......................................... Time: 13.376 OK (113 tests) Change-Id: Ib5784b9ed0b9086f153dd438b2b791ae0bca2621
176 lines
7.6 KiB
Java
176 lines
7.6 KiB
Java
/*
|
|
* 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);
|
|
|
|
// TestDataFactory creates NUM_TEST_CONVERSATIONS conversations. blank
|
|
// conversation would be the next conversation.
|
|
final String blankId = BugleDatabaseOperations.getExistingConversation(db, threadId, false);
|
|
assertEquals(TestDataFactory.NUM_TEST_CONVERSATIONS+1, Integer.parseInt((String)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());
|
|
}
|
|
}
|