summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java')
-rw-r--r--tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java482
1 files changed, 0 insertions, 482 deletions
diff --git a/tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java b/tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java
deleted file mode 100644
index 0405c90..0000000
--- a/tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * 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.ContentProvider;
-import android.content.pm.ProviderInfo;
-import android.database.Cursor;
-import android.net.Uri;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.text.TextUtils;
-
-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.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-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.ActionTestHelpers.StubConnectivityUtil;
-import com.android.messaging.datamodel.action.ReadDraftDataAction.ReadDraftDataActionListener;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.ContentType;
-
-import org.mockito.Mock;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-
-@SmallTest
-public class ReadWriteDraftMessageActionTest extends BugleTestCase {
-
- @Mock ReadDraftDataActionListener mockListener;
-
- // TODO: Add test cases
- // 1. Make sure drafts can include attachments and multiple parts
- // 2. Make sure attachments get cleaned up appropriately
- // 3. Make sure messageId and partIds not reused (currently each draft is a new message).
- public void testWriteDraft() {
- final String draftMessage = "draftMessage";
- final long threadId = 1234567;
- final boolean senderBlocked = false;
- final String participantNumber = "5551234567";
-
- final DatabaseWrapper db = DataModel.get().getDatabase();
-
- final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
- senderBlocked);
- final String selfId = getOrCreateSelfId(db);
-
- // Should clear/stub DB
- final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
- final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
- draftMessage);
-
- WriteDraftMessageAction.writeDraftMessage(conversationId, message);
-
- assertEquals("Failed to start service once for action", calls.size(), 1);
- assertTrue("Action not SaveDraftMessageAction",
- calls.get(0).action instanceof WriteDraftMessageAction);
-
- final Action save = calls.get(0).action;
-
- final Object result = save.executeAction();
-
- assertTrue("Expect row number string as result", result instanceof String);
- final String messageId = (String) result;
-
- // Should check DB
- final MessageData actual = BugleDatabaseOperations.readMessage(db, messageId);
- assertNotNull("Database missing draft", actual);
- assertEquals("Draft text changed", draftMessage, actual.getMessageText());
- }
-
- private static String getOrCreateSelfId(final DatabaseWrapper db) {
- db.beginTransaction();
- final String selfId = BugleDatabaseOperations.getOrCreateParticipantInTransaction(db,
- ParticipantData.getSelfParticipant(ParticipantData.DEFAULT_SELF_SUB_ID));
- db.setTransactionSuccessful();
- db.endTransaction();
- return selfId;
- }
-
- private static String getOrCreateConversation(final DatabaseWrapper db,
- final String participantNumber, final long threadId, final boolean senderBlocked) {
- final ArrayList<ParticipantData> participants =
- new ArrayList<ParticipantData>();
- participants.add(ParticipantData.getFromRawPhoneBySystemLocale(participantNumber));
-
- final String conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
- senderBlocked, participants, false, false, null);
- assertNotNull("No conversation", conversationId);
- return conversationId;
- }
-
- public void testReadDraft() {
- final Object data = "data";
- final String draftMessage = "draftMessage";
- final long threadId = 1234567;
- final boolean senderBlocked = false;
- final String participantNumber = "5552345678";
-
- final DatabaseWrapper db = DataModel.get().getDatabase();
-
- final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
- senderBlocked);
- final String selfId = getOrCreateSelfId(db);
-
- // Should clear/stub DB
- final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
- final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
- draftMessage);
-
- BugleDatabaseOperations.updateDraftMessageData(db, conversationId, message,
- BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-
- final ActionMonitor monitor =
- ReadDraftDataAction.readDraftData(conversationId, null, data, mockListener);
-
- assertEquals("Unexpected number of calls to service", 1, calls.size());
- assertTrue("Action not of type ReadDraftMessageAction",
- calls.get(0).action instanceof ReadDraftDataAction);
-
- final Action read = calls.get(0).action;
-
- final Object result = read.executeAction();
-
- assertTrue(result instanceof ReadDraftDataAction.DraftData);
- final ReadDraftDataAction.DraftData draft = (ReadDraftDataAction.DraftData) result;
-
- assertEquals("Draft message text differs", draftMessage, draft.message.getMessageText());
- assertEquals("Draft self differs", selfId, draft.message.getSelfId());
- assertEquals("Draft conversation differs", conversationId,
- draft.conversation.getConversationId());
- }
-
- public void testReadDraftForNewConversation() {
- final Object data = "data";
- long threadId = 1234567;
- final boolean senderBlocked = false;
- long phoneNumber = 5557654567L;
- final String notConversationId = "ThisIsNotValidConversationId";
-
- final DatabaseWrapper db = DataModel.get().getDatabase();
- final String selfId = getOrCreateSelfId(db);
-
- // Unless set a new conversation should have a null draft message
- final MessageData blank = BugleDatabaseOperations.readDraftMessageData(db,
- notConversationId, selfId);
- assertNull(blank);
-
- String conversationId = null;
- do {
- conversationId = BugleDatabaseOperations.getExistingConversation(db,
- threadId, senderBlocked);
- threadId++;
- phoneNumber++;
- }
- while(!TextUtils.isEmpty(conversationId));
-
- final ArrayList<ParticipantData> participants =
- new ArrayList<ParticipantData>();
- participants.add(ParticipantData.getFromRawPhoneBySystemLocale(Long.toString(phoneNumber)));
-
- conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
- senderBlocked, participants, false, false, null);
- assertNotNull("No conversation", conversationId);
-
- final MessageData actual = BugleDatabaseOperations.readDraftMessageData(db, conversationId,
- selfId);
- assertNull(actual);
-
- // Should clear/stub DB
- final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
- final ActionMonitor monitor =
- ReadDraftDataAction.readDraftData(conversationId, null, data, mockListener);
-
- assertEquals("Unexpected number of calls to service", 1, calls.size());
- assertTrue("Action not of type ReadDraftMessageAction",
- calls.get(0).action instanceof ReadDraftDataAction);
-
- final Action read = calls.get(0).action;
-
- final Object result = read.executeAction();
-
- assertTrue(result instanceof ReadDraftDataAction.DraftData);
- final ReadDraftDataAction.DraftData draft = (ReadDraftDataAction.DraftData) result;
-
- assertEquals("Draft message text differs", "", draft.message.getMessageText());
- assertEquals("Draft self differs", selfId, draft.message.getSelfId());
- assertEquals("Draft conversation differs", conversationId,
- draft.conversation.getConversationId());
- }
-
- public void testWriteAndReadDraft() {
- final Object data = "data";
- final String draftMessage = "draftMessage";
-
- final DatabaseWrapper db = DataModel.get().getDatabase();
- final Cursor conversations = db.query(DatabaseHelper.CONVERSATIONS_TABLE,
- new String[] { ConversationColumns._ID, ConversationColumns.CURRENT_SELF_ID }, null,
- null, null /* groupBy */, null /* having */, null /* orderBy */);
-
- if (conversations.moveToFirst()) {
- final String conversationId = conversations.getString(0);
- final String selfId = getOrCreateSelfId(db);
-
- // Should clear/stub DB
- final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
- final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
- draftMessage);
-
- WriteDraftMessageAction.writeDraftMessage(conversationId, message);
-
- assertEquals("Failed to start service once for action", calls.size(), 1);
- assertTrue("Action not SaveDraftMessageAction",
- calls.get(0).action instanceof WriteDraftMessageAction);
-
- final Action save = calls.get(0).action;
-
- Object result = save.executeAction();
-
- assertTrue("Expect row number string as result", result instanceof String);
-
- // Should check DB
-
- final ActionMonitor monitor =
- ReadDraftDataAction.readDraftData(conversationId, null, data,
- mockListener);
-
- assertEquals("Expect two calls queued", 2, calls.size());
- assertTrue("Expect action", calls.get(1).action instanceof ReadDraftDataAction);
-
- final Action read = calls.get(1).action;
-
- result = read.executeAction();
-
- assertTrue(result instanceof ReadDraftDataAction.DraftData);
- final ReadDraftDataAction.DraftData draft = (ReadDraftDataAction.DraftData) result;
-
- assertEquals("Draft message text differs", draftMessage, draft.message.getMessageText());
- // The conversation's self id is used as the draft's self id.
- assertEquals("Draft self differs", conversations.getString(1),
- draft.message.getSelfId());
- assertEquals("Draft conversation differs", conversationId,
- draft.conversation.getConversationId());
- } else {
- fail("No conversations in database");
- }
- }
-
- public void testUpdateDraft() {
- final String initialMessage = "initialMessage";
- final String draftMessage = "draftMessage";
- final long threadId = 1234567;
- final boolean senderBlocked = false;
- final String participantNumber = "5553456789";
-
- final DatabaseWrapper db = DataModel.get().getDatabase();
-
- final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
- senderBlocked);
- final String selfId = getOrCreateSelfId(db);
-
- final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
- // Insert initial message
- MessageData initial = MessageData.createDraftSmsMessage(conversationId, selfId,
- initialMessage);
-
- BugleDatabaseOperations.updateDraftMessageData(db, conversationId, initial,
- BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-
- initial = BugleDatabaseOperations.readDraftMessageData(db,
- conversationId, selfId);
- assertEquals("Initial text mismatch", initialMessage, initial.getMessageText());
-
- // Now update the draft
- final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
- draftMessage);
- WriteDraftMessageAction.writeDraftMessage(conversationId, message);
-
- assertEquals("Failed to start service once for action", calls.size(), 1);
- assertTrue("Action not SaveDraftMessageAction",
- calls.get(0).action instanceof WriteDraftMessageAction);
-
- final Action save = calls.get(0).action;
-
- final Object result = save.executeAction();
-
- assertTrue("Expect row number string as result", result instanceof String);
-
- // Check DB
- final MessageData actual = BugleDatabaseOperations.readDraftMessageData(db,
- conversationId, selfId);
- assertNotNull("Database missing draft", actual);
- assertEquals("Draft text mismatch", draftMessage, actual.getMessageText());
- assertNull("Draft messageId should be null", actual.getMessageId());
- }
-
- public void testBugleDatabaseDraftOperations() {
- final String initialMessage = "initialMessage";
- final String draftMessage = "draftMessage";
- final long threadId = 1234599;
- final boolean senderBlocked = false;
- final String participantNumber = "5553456798";
- final String subject = "subject here";
-
- final DatabaseWrapper db = DataModel.get().getDatabase();
-
- final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
- senderBlocked);
- final String selfId = getOrCreateSelfId(db);
-
- final String text = "This is some text";
- final Uri mOutputUri = MediaScratchFileProvider.buildMediaScratchSpaceUri("txt");
- OutputStream outputStream = null;
- try {
- outputStream = mContext.getContentResolver().openOutputStream(mOutputUri);
- outputStream.write(text.getBytes());
- } catch (final FileNotFoundException e) {
- fail("Cannot open output file");
- } catch (final IOException e) {
- fail("Cannot write output file");
- }
-
- final MessageData initial =
- MessageData.createDraftMmsMessage(conversationId, selfId, initialMessage, subject);
- initial.addPart(MessagePartData.createMediaMessagePart(ContentType.MULTIPART_MIXED,
- mOutputUri, 0, 0));
-
- final String initialMessageId = BugleDatabaseOperations.updateDraftMessageData(db,
- conversationId, initial, BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
- assertNotNull(initialMessageId);
-
- final MessageData initialDraft = BugleDatabaseOperations.readMessage(db, initialMessageId);
- assertNotNull(initialDraft);
- int cnt = 0;
- for(final MessagePartData part : initialDraft.getParts()) {
- if (part.isAttachment()) {
- assertEquals(part.getContentUri(), mOutputUri);
- } else {
- assertEquals(part.getText(), initialMessage);
- }
- cnt++;
- }
- assertEquals("Wrong number of parts", 2, cnt);
-
- InputStream inputStream = null;
- try {
- inputStream = mContext.getContentResolver().openInputStream(mOutputUri);
- final byte[] buffer = new byte[256];
- final int read = inputStream.read(buffer);
- assertEquals(read, text.getBytes().length);
- } catch (final FileNotFoundException e) {
- fail("Cannot open input file");
- } catch (final IOException e) {
- fail("Cannot read input file");
- }
-
- final String moreText = "This is some more text";
- final Uri mAnotherUri = MediaScratchFileProvider.buildMediaScratchSpaceUri("txt");
- outputStream = null;
- try {
- outputStream = mContext.getContentResolver().openOutputStream(mAnotherUri);
- outputStream.write(moreText.getBytes());
- } catch (final FileNotFoundException e) {
- fail("Cannot open output file");
- } catch (final IOException e) {
- fail("Cannot write output file");
- }
-
- final MessageData another =
- MessageData.createDraftMmsMessage(conversationId, selfId, draftMessage, subject);
- another.addPart(MessagePartData.createMediaMessagePart(ContentType.MMS_MULTIPART_MIXED,
- mAnotherUri, 0, 0));
-
- final String anotherMessageId = BugleDatabaseOperations.updateDraftMessageData(db,
- conversationId, another, BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
- assertNotNull(anotherMessageId);
-
- final MessageData anotherDraft = BugleDatabaseOperations.readMessage(db, anotherMessageId);
- assertNotNull(anotherDraft);
- cnt = 0;
- for(final MessagePartData part : anotherDraft.getParts()) {
- if (part.isAttachment()) {
- assertEquals(part.getContentUri(), mAnotherUri);
- } else {
- assertEquals(part.getText(), draftMessage);
- }
- cnt++;
- }
- assertEquals("Wrong number of parts", 2, cnt);
-
- inputStream = null;
- try {
- inputStream = mContext.getContentResolver().openInputStream(mOutputUri);
- assertNull("Original draft content should have been deleted", inputStream);
- } catch (final FileNotFoundException e) {
- }
- inputStream = null;
- try {
- inputStream = mContext.getContentResolver().openInputStream(mAnotherUri);
- final byte[] buffer = new byte[256];
- final int read = inputStream.read(buffer);
- assertEquals(read, moreText.getBytes().length);
- } catch (final FileNotFoundException e) {
- fail("Cannot open input file");
- } catch (final IOException e) {
- fail("Cannot read input file");
- }
-
- final MessageData last = null;
- final String lastPartId = BugleDatabaseOperations.updateDraftMessageData(db,
- conversationId, last, BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
- assertNull(lastPartId);
-
- inputStream = null;
- try {
- inputStream = mContext.getContentResolver().openInputStream(mAnotherUri);
- assertNull("Original draft content should have been deleted", inputStream);
- } catch (final FileNotFoundException e) {
- }
-
- }
-
- private StubActionService mService;
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
-
- final FakeContext context = new FakeContext(getTestContext());
-
- final ContentProvider bugleProvider = new MessagingContentProvider();
- final ProviderInfo bugleProviderInfo = new ProviderInfo();
- bugleProviderInfo.authority = MessagingContentProvider.AUTHORITY;
- bugleProvider.attachInfo(mContext, bugleProviderInfo);
- context.addContentProvider(MessagingContentProvider.AUTHORITY, bugleProvider);
- final ContentProvider mediaProvider = new MediaScratchFileProvider();
- final ProviderInfo mediaProviderInfo = new ProviderInfo();
- mediaProviderInfo.authority = MediaScratchFileProvider.AUTHORITY;
- mediaProvider.attachInfo(mContext, mediaProviderInfo);
- context.addContentProvider(MediaScratchFileProvider.AUTHORITY, mediaProvider);
-
- mService = new StubActionService();
- final FakeDataModel fakeDataModel = new FakeDataModel(context)
- .withActionService(mService)
- .withConnectivityUtil(new StubConnectivityUtil(context));
- FakeFactory.registerWithFakeContext(getTestContext(), context)
- .withDataModel(fakeDataModel);
-
- }
-}