ControllerProviderOpsTests.java revision 6ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6
17c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler/*
27c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Copyright (C) 2009 The Android Open Source Project
37c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler *
47c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Licensed under the Apache License, Version 2.0 (the "License");
57c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * you may not use this file except in compliance with the License.
67c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * You may obtain a copy of the License at
77c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler *
87c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler *      http://www.apache.org/licenses/LICENSE-2.0
97c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler *
107c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Unless required by applicable law or agreed to in writing, software
117c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * distributed under the License is distributed on an "AS IS" BASIS,
127c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * See the License for the specific language governing permissions and
147c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * limitations under the License.
157c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */
167c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
177c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerpackage com.android.email;
187c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
197c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent;
207c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailProvider;
217c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.ProviderTestUtils;
227c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Account;
237c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox;
247c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Message;
257c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
267c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport android.content.Context;
277c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport android.test.ProviderTestCase2;
287c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
297c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler/**
307c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Tests of the Controller class that depend on the underlying provider.
317c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler *
327c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * NOTE:  It would probably make sense to rewrite this using a MockProvider, instead of the
337c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * ProviderTestCase (which is a real provider running on a temp database).  This would be more of
347c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * a true "unit test".
357c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler *
367c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * You can run this entire test case with:
377c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler *   runtest -c com.android.email.ControllerProviderOpsTests email
387c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */
397c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerpublic class ControllerProviderOpsTests extends ProviderTestCase2<EmailProvider> {
407c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
417c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    EmailProvider mProvider;
427c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    Context mProviderContext;
437c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    Context mContext;
447c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
457c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    public ControllerProviderOpsTests() {
467c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY);
477c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    }
487c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
497c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    @Override
507c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    public void setUp() throws Exception {
517c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        super.setUp();
527c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        mProviderContext = getMockContext();
537c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        mContext = getContext();
547c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    }
557c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
567c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    @Override
577c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    public void tearDown() throws Exception {
587c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        super.tearDown();
597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    }
607c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
617c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    /**
627c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     * Lightweight subclass of the Controller class allows injection of mock context
637c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     */
647c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    public static class TestController extends Controller {
657c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
667c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        protected TestController(Context providerContext, Context systemContext) {
677c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler            super(systemContext);
687c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler            setProviderContext(providerContext);
697c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        }
707c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    }
717c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
72c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    public void testGetSpecialMailboxName() {
73c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        Controller ct = new TestController(mProviderContext, mContext);
74c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertEquals("Outbox", ct.getSpecialMailboxDisplayName(Mailbox.TYPE_OUTBOX));
75c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertEquals("", ct.getSpecialMailboxDisplayName(-1));
76c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    }
77c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
78c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    /**
79c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * Test of Controller.createMailbox().
80c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * Sunny day test only - creates a mailbox that does not exist.
81c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * Does not test duplication, bad accountID, or any other bad input.
82c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     */
83c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    public void testCreateMailbox() {
84c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        Account account = ProviderTestUtils.setupAccount("mailboxid", true, mProviderContext);
85c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long accountId = account.mId;
86c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
87c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long oldBoxId = Mailbox.findMailboxOfType(mProviderContext, accountId, Mailbox.TYPE_DRAFTS);
88c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertEquals(Mailbox.NO_MAILBOX, oldBoxId);
89c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
90c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        Controller ct = new TestController(mProviderContext, mContext);
91c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        ct.createMailbox(accountId, Mailbox.TYPE_DRAFTS);
92c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long boxId = Mailbox.findMailboxOfType(mProviderContext, accountId, Mailbox.TYPE_DRAFTS);
93c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
94c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        // check that the drafts mailbox exists
95c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertTrue("mailbox exists", boxId != Mailbox.NO_MAILBOX);
96c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    }
97c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
98c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    /**
99c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * Test of Controller.findOrCreateMailboxOfType().
100c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * Checks:
101c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * - finds correctly the ID of existing mailbox
102c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * - creates non-existing mailbox
103c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * - creates only once a new mailbox
104c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     * - when accountId or mailboxType are -1, returns NO_MAILBOX
105c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda     */
106c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    public void testFindOrCreateMailboxOfType() {
107c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        Account account = ProviderTestUtils.setupAccount("mailboxid", true, mProviderContext);
108c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long accountId = account.mId;
109c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        Mailbox box = ProviderTestUtils.setupMailbox("box", accountId, false, mProviderContext);
110c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        final int boxType = Mailbox.TYPE_TRASH;
111c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        box.mType = boxType;
112c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        box.save(mProviderContext);
113c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long boxId = box.mId;
114c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
115c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        Controller ct = new TestController(mProviderContext, mContext);
116c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long testBoxId = ct.findOrCreateMailboxOfType(accountId, boxType);
117c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
118c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        // check it found the right mailbox id
119c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertEquals(boxId, testBoxId);
120c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
121c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long boxId2 = ct.findOrCreateMailboxOfType(accountId, Mailbox.TYPE_DRAFTS);
122c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertTrue("mailbox created", boxId2 != Mailbox.NO_MAILBOX);
123c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertTrue("with different id", testBoxId != boxId2);
124c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
125c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        // check it doesn't create twice when existing
126c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        long boxId3 = ct.findOrCreateMailboxOfType(accountId, Mailbox.TYPE_DRAFTS);
127c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertEquals("don't create if exists", boxId3, boxId2);
128c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
129c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        // check invalid aruments
130c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertEquals(Mailbox.NO_MAILBOX, ct.findOrCreateMailboxOfType(-1, Mailbox.TYPE_DRAFTS));
131c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        assertEquals(Mailbox.NO_MAILBOX, ct.findOrCreateMailboxOfType(accountId, -1));
132c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    }
133c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
1347c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    /**
1357c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     * Test the "delete message" function.  Sunny day:
1367c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     *    - message/mailbox/account all exist
1377c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     *    - trash mailbox exists
1387c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     */
1397c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    public void testDeleteMessage() {
1407c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mProviderContext);
1417c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long account1Id = account1.mId;
1427c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext);
1437c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long box1Id = box1.mId;
1447c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, false, mProviderContext);
1457c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        box2.mType = EmailContent.Mailbox.TYPE_TRASH;
1467c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        box2.save(mProviderContext);
1477c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long box2Id = box2.mId;
1487c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1497c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false,
1507c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                true, mProviderContext);
1517c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long message1Id = message1.mId;
1527c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1537c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Controller ct = new TestController(mProviderContext, mContext);
1547c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1557c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        ct.deleteMessage(message1Id, account1Id);
1567c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1577c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        // now read back a fresh copy and confirm it's in the trash
1587c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Message message1get = EmailContent.Message.restoreMessageWithId(mProviderContext,
1597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                message1Id);
1607c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        assertEquals(box2Id, message1get.mMailboxKey);
1617c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1627c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        // Now repeat test with accountId "unknown"
1637c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false,
1647c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                true, mProviderContext);
1657c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long message2Id = message2.mId;
1667c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1677c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        ct.deleteMessage(message2Id, -1);
1687c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1697c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        // now read back a fresh copy and confirm it's in the trash
1707c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Message message2get = EmailContent.Message.restoreMessageWithId(mProviderContext,
1717c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                message2Id);
1727c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        assertEquals(box2Id, message2get.mMailboxKey);
1737c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    }
1747c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1757c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    /**
1767c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     * Test deleting message when there is no trash mailbox
1777c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     */
1787c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    public void testDeleteMessageNoTrash() {
1797c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Account account1 =
1807c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                ProviderTestUtils.setupAccount("message-delete-notrash", true, mProviderContext);
1817c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long account1Id = account1.mId;
1827c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext);
1837c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long box1Id = box1.mId;
1847c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1857c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Message message1 =
1867c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true,
1877c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                        mProviderContext);
1887c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        long message1Id = message1.mId;
1897c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1907c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Controller ct = new TestController(mProviderContext, mContext);
1917c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1927c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        ct.deleteMessage(message1Id, account1Id);
1937c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1947c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        // now read back a fresh copy and confirm it's in the trash
1957c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Message message1get =
1967c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                EmailContent.Message.restoreMessageWithId(mProviderContext, message1Id);
1977c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
1987c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        // check the new mailbox and see if it looks right
1997c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        assertFalse(-1 == message1get.mMailboxKey);
2007c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        assertFalse(box1Id == message1get.mMailboxKey);
2017c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        Mailbox mailbox2get = EmailContent.Mailbox.restoreMailboxWithId(mProviderContext,
2027c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler                message1get.mMailboxKey);
2037c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler        assertEquals(EmailContent.Mailbox.TYPE_TRASH, mailbox2get.mType);
2047c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    }
2057c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler
2067c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler    /**
2076ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler     * Test read/unread flag
2086ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler     */
2096ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler    public void testReadUnread() {
2106ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        // No account or mailbox needed for this test
2116ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        long account1Id = 1;
2126ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        long box1Id = 2;
2136ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2146ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        Message message1 =
2156ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler                ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true,
2166ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler                        mProviderContext);
2176ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        long message1Id = message1.mId;
2186ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2196ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        Controller ct = new TestController(mProviderContext, mContext);
2206ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2216ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        // test setting to "read"
2226ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        ct.setMessageRead(message1Id, true);
2236ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id);
2246ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        assertTrue(message1get.mFlagRead);
2256ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2266ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        // test setting to "unread"
2276ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        ct.setMessageRead(message1Id, false);
2286ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        message1get = Message.restoreMessageWithId(mProviderContext, message1Id);
2296ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        assertFalse(message1get.mFlagRead);
2306ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler    }
2316ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2326ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler    /**
2336ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler     * Test favorites flag
2346ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler     */
2356ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler    public void testFavorites() {
2366ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        // No account or mailbox needed for this test
2376ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        long account1Id = 1;
2386ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        long box1Id = 2;
2396ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2406ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        Message message1 =
2416ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler                ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true,
2426ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler                        mProviderContext);
2436ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        long message1Id = message1.mId;
2446ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2456ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        Controller ct = new TestController(mProviderContext, mContext);
2466ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2476ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        // test setting to "favorite"
2486ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        ct.setMessageFavorite(message1Id, true);
2496ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id);
2506ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        assertTrue(message1get.mFlagFavorite);
2516ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2526ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        // test setting to "not favorite"
2536ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        ct.setMessageFavorite(message1Id, false);
2546ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        message1get = Message.restoreMessageWithId(mProviderContext, message1Id);
2556ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler        assertFalse(message1get.mFlagFavorite);
2566ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler    }
2576ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2586ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler    /**
2597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     * TODO: releasing associated data (e.g. attachments, embedded images)
2607c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler     */
2616ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler
2626ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler    /**
2636ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler     * TODO: test isMessagingController()
2646ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler     */
2657c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler}
266