ControllerProviderOpsTests.java revision 3096b4ae18f55c9ebf04d83c534da4d5e3370932
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 19e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadlerimport com.android.email.provider.ContentCache; 2069af769688acc28a20cdbad046cea2565456801cMarc Blankimport com.android.email.provider.EmailProvider; 2169af769688acc28a20cdbad046cea2565456801cMarc Blankimport com.android.email.provider.ProviderTestUtils; 22a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent; 23a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Account; 24a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Body; 25a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Message; 2612b82d9374947c9268217f45befe8a74bd9b60d7Ben Komaloimport com.android.emailcommon.provider.HostAuth; 2753ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komaloimport com.android.emailcommon.provider.Mailbox; 287c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 297c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport android.content.Context; 30391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blankimport android.net.Uri; 317c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport android.test.ProviderTestCase2; 327c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 33fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadlerimport java.util.Locale; 34b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blankimport java.util.concurrent.ExecutionException; 35fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler 367c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler/** 377c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Tests of the Controller class that depend on the underlying provider. 38206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki * 397c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * NOTE: It would probably make sense to rewrite this using a MockProvider, instead of the 407c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * ProviderTestCase (which is a real provider running on a temp database). This would be more of 417c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * a true "unit test". 42206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki * 437c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * You can run this entire test case with: 447c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * runtest -c com.android.email.ControllerProviderOpsTests email 457c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 467c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerpublic class ControllerProviderOpsTests extends ProviderTestCase2<EmailProvider> { 477c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 484be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki private Context mProviderContext; 494be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki private Context mContext; 504be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki private TestController mTestController; 514be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki 527c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 537c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public ControllerProviderOpsTests() { 5431d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank super(EmailProvider.class, EmailContent.AUTHORITY); 557c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 567c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 577c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler @Override 587c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public void setUp() throws Exception { 597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler super.setUp(); 607c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler mProviderContext = getMockContext(); 617c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler mContext = getContext(); 624be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController = new TestController(mProviderContext, mContext); 63e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler // Invalidate all caches, since we reset the database for each test 64e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler ContentCache.invalidateAllCachesForTest(); 657c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 667c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 677c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler @Override 687c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public void tearDown() throws Exception { 697c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler super.tearDown(); 704be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.cleanupForTest(); 717c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 727c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 737c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 747c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Lightweight subclass of the Controller class allows injection of mock context 757c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 767c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public static class TestController extends Controller { 777c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 787c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler protected TestController(Context providerContext, Context systemContext) { 79c184f36c2df16431693d7709e28ded593efc3da7Marc Blank super(systemContext); 807c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler setProviderContext(providerContext); 817c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 827c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 837c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 84fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler /** 85fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler * These are strings that should not change per locale. 86fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler */ 87fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler public void testGetMailboxServerName() { 884be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("", mTestController.getMailboxServerName(-1)); 89fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler 904be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Inbox", mTestController.getMailboxServerName(Mailbox.TYPE_INBOX)); 914be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Outbox", mTestController.getMailboxServerName(Mailbox.TYPE_OUTBOX)); 924be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Trash", mTestController.getMailboxServerName(Mailbox.TYPE_TRASH)); 934be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Sent", mTestController.getMailboxServerName(Mailbox.TYPE_SENT)); 944be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Junk", mTestController.getMailboxServerName(Mailbox.TYPE_JUNK)); 95fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler 96fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler // Now try again with translation 97fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Locale savedLocale = Locale.getDefault(); 98fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Locale.setDefault(Locale.FRANCE); 994be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Inbox", mTestController.getMailboxServerName(Mailbox.TYPE_INBOX)); 1004be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Outbox", mTestController.getMailboxServerName(Mailbox.TYPE_OUTBOX)); 1014be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Trash", mTestController.getMailboxServerName(Mailbox.TYPE_TRASH)); 1024be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Sent", mTestController.getMailboxServerName(Mailbox.TYPE_SENT)); 1034be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Junk", mTestController.getMailboxServerName(Mailbox.TYPE_JUNK)); 104fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Locale.setDefault(savedLocale); 105c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 106c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 107c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda /** 108c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Test of Controller.createMailbox(). 109c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Sunny day test only - creates a mailbox that does not exist. 110c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Does not test duplication, bad accountID, or any other bad input. 111c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda */ 112c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda public void testCreateMailbox() { 113c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda Account account = ProviderTestUtils.setupAccount("mailboxid", true, mProviderContext); 114c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long accountId = account.mId; 115c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 116c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long oldBoxId = Mailbox.findMailboxOfType(mProviderContext, accountId, Mailbox.TYPE_DRAFTS); 117c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertEquals(Mailbox.NO_MAILBOX, oldBoxId); 118c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1194be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.createMailbox(accountId, Mailbox.TYPE_DRAFTS); 120c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long boxId = Mailbox.findMailboxOfType(mProviderContext, accountId, Mailbox.TYPE_DRAFTS); 121206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki 122c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check that the drafts mailbox exists 123c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertTrue("mailbox exists", boxId != Mailbox.NO_MAILBOX); 124c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 125206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki 126206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki /** 127c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Test of Controller.findOrCreateMailboxOfType(). 128c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Checks: 129c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - finds correctly the ID of existing mailbox 130c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - creates non-existing mailbox 131c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - creates only once a new mailbox 132c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - when accountId or mailboxType are -1, returns NO_MAILBOX 133c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda */ 134c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda public void testFindOrCreateMailboxOfType() { 135c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda Account account = ProviderTestUtils.setupAccount("mailboxid", true, mProviderContext); 136c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long accountId = account.mId; 137c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda Mailbox box = ProviderTestUtils.setupMailbox("box", accountId, false, mProviderContext); 138c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda final int boxType = Mailbox.TYPE_TRASH; 139c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda box.mType = boxType; 140c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda box.save(mProviderContext); 141c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long boxId = box.mId; 142c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1434be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki long testBoxId = mTestController.findOrCreateMailboxOfType(accountId, boxType); 144c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 145c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check it found the right mailbox id 146c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertEquals(boxId, testBoxId); 147c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1484be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki long boxId2 = mTestController.findOrCreateMailboxOfType(accountId, Mailbox.TYPE_DRAFTS); 149c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertTrue("mailbox created", boxId2 != Mailbox.NO_MAILBOX); 150c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertTrue("with different id", testBoxId != boxId2); 151c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 152c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check it doesn't create twice when existing 1534be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki long boxId3 = mTestController.findOrCreateMailboxOfType(accountId, Mailbox.TYPE_DRAFTS); 154c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertEquals("don't create if exists", boxId3, boxId2); 155206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki 156c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check invalid aruments 1574be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals(Mailbox.NO_MAILBOX, 1584be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.findOrCreateMailboxOfType(-1, Mailbox.TYPE_DRAFTS)); 1594be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals(Mailbox.NO_MAILBOX, mTestController.findOrCreateMailboxOfType(accountId, -1)); 160c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 161c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1627c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 163b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * Test the "move message" function. 164b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank */ 165b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank public void testMoveMessage() throws InterruptedException, ExecutionException { 166b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Account account1 = ProviderTestUtils.setupAccount("message-move", true, mProviderContext); 167b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long account1Id = account1.mId; 168b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 169b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long box1Id = box1.mId; 170b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mProviderContext); 171b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long box2Id = box2.mId; 17211aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki Mailbox boxDest = ProviderTestUtils.setupMailbox("d", account1Id, true, mProviderContext); 17311aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki long boxDestId = boxDest.mId; 174b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 175b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 176b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank true, mProviderContext); 17711aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box2Id, false, 17811aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki true, mProviderContext); 179b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long message1Id = message1.mId; 18011aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki long message2Id = message2.mId; 181b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 182b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // Because moveMessage runs asynchronously, call get() to force it to complete 1830bb7f1c37c99beb2a91bd98e64fcc9656877e034Ben Komalo mTestController.moveMessages(new long[] { message1Id, message2Id }, boxDestId).get(); 184b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 185b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // now read back a fresh copy and confirm it's in the trash 18611aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki assertEquals(boxDestId, EmailContent.Message.restoreMessageWithId(mProviderContext, 18711aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki message1Id).mMailboxKey); 18811aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki assertEquals(boxDestId, EmailContent.Message.restoreMessageWithId(mProviderContext, 18911aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki message2Id).mMailboxKey); 190b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank } 191b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 192b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank /** 1937c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Test the "delete message" function. Sunny day: 1947c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * - message/mailbox/account all exist 1957c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * - trash mailbox exists 1967c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 197e87ff6c3cbbfc5e3636f9827b58820652e3ea1c5Todd Kennedy public void testDeleteMessage() { 1987c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mProviderContext); 1997c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long account1Id = account1.mId; 20077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Mailbox box = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 20177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long boxId = box.mId; 2027c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 20377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Mailbox trashBox = ProviderTestUtils.setupMailbox("box2", account1Id, false, 20477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mProviderContext); 20553ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komalo trashBox.mType = Mailbox.TYPE_TRASH; 20677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki trashBox.save(mProviderContext); 20777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long trashBoxId = trashBox.mId; 20877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 20977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Mailbox draftBox = ProviderTestUtils.setupMailbox("box3", account1Id, false, 21077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mProviderContext); 21153ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komalo draftBox.mType = Mailbox.TYPE_DRAFTS; 21277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki draftBox.save(mProviderContext); 21377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long draftBoxId = draftBox.mId; 21477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 21577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki { 21677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Case 1: Message in a regular mailbox, account known. 21777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message message = ProviderTestUtils.setupMessage("message1", account1Id, boxId, false, 21877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki true, mProviderContext); 21977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long messageId = message.mId; 22077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 2213096b4ae18f55c9ebf04d83c534da4d5e3370932Makoto Onuki mTestController.deleteMessageSync(messageId); 22277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 22377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // now read back a fresh copy and confirm it's in the trash 22477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message restored = EmailContent.Message.restoreMessageWithId(mProviderContext, 22577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki messageId); 22677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki assertEquals(trashBoxId, restored.mMailboxKey); 22777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki } 2287c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 22977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki { 2303096b4ae18f55c9ebf04d83c534da4d5e3370932Makoto Onuki // Case 2: Already in trash 23177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message message = ProviderTestUtils.setupMessage("message3", account1Id, trashBoxId, 23277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki false, true, mProviderContext); 23377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long messageId = message.mId; 2347c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2353096b4ae18f55c9ebf04d83c534da4d5e3370932Makoto Onuki mTestController.deleteMessageSync(messageId); 23677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 23777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Message should be deleted. 23877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki assertNull(EmailContent.Message.restoreMessageWithId(mProviderContext, messageId)); 23977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki } 24077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 24177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki { 2423096b4ae18f55c9ebf04d83c534da4d5e3370932Makoto Onuki // Case 3: Draft 24377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message message = ProviderTestUtils.setupMessage("message3", account1Id, draftBoxId, 24477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki false, true, mProviderContext); 24577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long messageId = message.mId; 24677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 2473096b4ae18f55c9ebf04d83c534da4d5e3370932Makoto Onuki mTestController.deleteMessageSync(messageId); 24877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 24977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Message should be deleted. 25077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki assertNull(EmailContent.Message.restoreMessageWithId(mProviderContext, messageId)); 25177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki } 2527c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 2537c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2547c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 2557c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Test deleting message when there is no trash mailbox 2567c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 257e87ff6c3cbbfc5e3636f9827b58820652e3ea1c5Todd Kennedy public void testDeleteMessageNoTrash() { 2587c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Account account1 = 2597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler ProviderTestUtils.setupAccount("message-delete-notrash", true, mProviderContext); 2607c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long account1Id = account1.mId; 2617c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 2627c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long box1Id = box1.mId; 2637c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2647c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1 = 2657c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 2667c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler mProviderContext); 2677c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long message1Id = message1.mId; 2687c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2693096b4ae18f55c9ebf04d83c534da4d5e3370932Makoto Onuki mTestController.deleteMessageSync(message1Id); 2707c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2717c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // now read back a fresh copy and confirm it's in the trash 2727c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1get = 2737c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler EmailContent.Message.restoreMessageWithId(mProviderContext, message1Id); 2747c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2757c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // check the new mailbox and see if it looks right 2767c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertFalse(-1 == message1get.mMailboxKey); 2777c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertFalse(box1Id == message1get.mMailboxKey); 27853ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komalo Mailbox mailbox2get = Mailbox.restoreMailboxWithId(mProviderContext, 2797c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler message1get.mMailboxKey); 28053ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komalo assertEquals(Mailbox.TYPE_TRASH, mailbox2get.mType); 2817c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 2827c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2837c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 2846ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler * Test read/unread flag 2856ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 2863b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler public void testReadUnread() throws InterruptedException, ExecutionException { 287fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("read-unread", false, mProviderContext); 288fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.mHostAuthRecv 289fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler = ProviderTestUtils.setupHostAuth("read-unread", 0, false, mProviderContext); 290fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.save(mProviderContext); 291fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler long account1Id = account1.mId; 2926ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long box1Id = 2; 2936ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 2946ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1 = 2956ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 2966ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler mProviderContext); 2976ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long message1Id = message1.mId; 2986ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 2996ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "read" 3003b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler mTestController.setMessageRead(message1Id, true).get(); 3016ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3026ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertTrue(message1get.mFlagRead); 3036ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3046ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "unread" 3053b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler mTestController.setMessageRead(message1Id, false).get(); 3066ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3076ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertFalse(message1get.mFlagRead); 3083b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler 3093b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler // test setting to "read" 3103b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler mTestController.setMessageRead(message1Id, true).get(); 3113b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3123b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler assertTrue(message1get.mFlagRead); 3136ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler } 3146ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3156ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 3166ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler * Test favorites flag 3176ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 3183b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler public void testFavorites() throws InterruptedException, ExecutionException { 319fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("favorites", false, mProviderContext); 320fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.mHostAuthRecv 321fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler = ProviderTestUtils.setupHostAuth("favorites", 0, false, mProviderContext); 322fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.save(mProviderContext); 323fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler long account1Id = account1.mId; 3246ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long box1Id = 2; 3256ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3266ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1 = 3276ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 3286ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler mProviderContext); 3296ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long message1Id = message1.mId; 3306ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3316ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "favorite" 3323b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler mTestController.setMessageFavorite(message1Id, true).get(); 3336ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3346ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertTrue(message1get.mFlagFavorite); 3356ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3366ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "not favorite" 3373b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler mTestController.setMessageFavorite(message1Id, false).get(); 3386ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3396ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertFalse(message1get.mFlagFavorite); 3403b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler 3413b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler // test setting to "favorite" 3423b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler mTestController.setMessageFavorite(message1Id, true).get(); 3433b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3443b1cccf234cd95c3e1c4c568bc588ab06b06d3aaAndy Stadler assertTrue(message1get.mFlagFavorite); 3456ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler } 3466ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 347391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank public void testGetAndDeleteAttachmentMailbox() { 3484be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox box = mTestController.getAttachmentMailbox(); 349391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(box); 3504be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox anotherBox = mTestController.getAttachmentMailbox(); 351391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(anotherBox); 352391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // We should always get back the same Mailbox row 353391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(box.mId, anotherBox.mId); 354391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Add two messages to this mailbox 355391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank ProviderTestUtils.setupMessage("message1", 0, box.mId, false, true, 356391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank mProviderContext); 357391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank ProviderTestUtils.setupMessage("message2", 0, box.mId, false, true, 358391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank mProviderContext); 359391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Make sure we can find them where they are expected 360391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(2, EmailContent.count(mProviderContext, Message.CONTENT_URI, 361391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message.MAILBOX_KEY + "=?", new String[] {Long.toString(box.mId)})); 362391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Delete them 3634be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.deleteAttachmentMessages(); 364391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Make sure they're gone 365391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(0, EmailContent.count(mProviderContext, Message.CONTENT_URI, 366391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message.MAILBOX_KEY + "=?", new String[] {Long.toString(box.mId)})); 367391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank } 368391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 369e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler /** 370d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler * Test wiping an account's synced data. Everything should go, but account & empty inbox. 371d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler * Also ensures that the remaining account and the remaining inbox have cleared their 372d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler * server sync keys, to force refresh eventually. 373e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler */ 374e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler public void testWipeSyncedData() { 375d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler Account account1 = ProviderTestUtils.setupAccount("wipe-synced-1", false, mProviderContext); 376d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler account1.mSyncKey = "account-1-sync-key"; 377d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler account1.save(mProviderContext); 378e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long account1Id = account1.mId; 379d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, false, mProviderContext); 380d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler box1.mType = Mailbox.TYPE_INBOX; 381d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler box1.mSyncKey = "box-1-sync-key"; 382d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler box1.save(mProviderContext); 383e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box1Id = box1.mId; 384e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mProviderContext); 385e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box2Id = box2.mId; 38669af769688acc28a20cdbad046cea2565456801cMarc Blank // An EAS account mailbox 38769af769688acc28a20cdbad046cea2565456801cMarc Blank Mailbox eas = ProviderTestUtils.setupMailbox("eas", account1Id, false, mProviderContext); 38869af769688acc28a20cdbad046cea2565456801cMarc Blank eas.mType = Mailbox.TYPE_EAS_ACCOUNT_MAILBOX; 38969af769688acc28a20cdbad046cea2565456801cMarc Blank eas.save(mProviderContext); 390e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 391d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler Account account2 = ProviderTestUtils.setupAccount("wipe-synced-2", false, mProviderContext); 392d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler account2.mSyncKey = "account-2-sync-key"; 393d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler account2.save(mProviderContext); 394e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long account2Id = account2.mId; 395d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler Mailbox box3 = ProviderTestUtils.setupMailbox("box3", account2Id, false, mProviderContext); 396d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler box3.mSyncKey = "box-3-sync-key"; 397d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler box3.mType = Mailbox.TYPE_INBOX; 398d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler box3.save(mProviderContext); 399e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box3Id = box3.mId; 400e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Mailbox box4 = ProviderTestUtils.setupMailbox("box4", account2Id, true, mProviderContext); 401e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box4Id = box4.mId; 402e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 40369af769688acc28a20cdbad046cea2565456801cMarc Blank // Now populate the 4 non-account boxes with messages 404e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Message message = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 405e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 406e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message1Id = message.mId; 407e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler message = ProviderTestUtils.setupMessage("message2", account1Id, box2Id, false, 408e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 409e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message2Id = message.mId; 410e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler message = ProviderTestUtils.setupMessage("message3", account2Id, box3Id, false, 411e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 412e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message3Id = message.mId; 413e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler message = ProviderTestUtils.setupMessage("message4", account2Id, box4Id, false, 414e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 415e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message4Id = message.mId; 416e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 417e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler // Now wipe account 1's data 418e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler mTestController.deleteSyncedDataSync(account1Id); 419e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 42069af769688acc28a20cdbad046cea2565456801cMarc Blank // Confirm: Mailboxes gone (except account box), all messages gone, account survives 42169af769688acc28a20cdbad046cea2565456801cMarc Blank assertNull(Mailbox.restoreMailboxWithId(mProviderContext, box1Id)); 422e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNull(Mailbox.restoreMailboxWithId(mProviderContext, box2Id)); 42369af769688acc28a20cdbad046cea2565456801cMarc Blank assertNotNull(Mailbox.restoreMailboxWithId(mProviderContext, eas.mId)); 424e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNull(Message.restoreMessageWithId(mProviderContext, message1Id)); 425e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNull(Message.restoreMessageWithId(mProviderContext, message2Id)); 426d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler account1 = Account.restoreAccountWithId(mProviderContext, account1Id); 427d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler assertNotNull(account1); 428d3a9ab946caef4cdc8ef81f7fd8f445fdba3782fAndy Stadler assertNull(account1.mSyncKey); 429e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 430e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler // Confirm: Other account survived 431e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Mailbox.restoreMailboxWithId(mProviderContext, box3Id)); 432e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Mailbox.restoreMailboxWithId(mProviderContext, box4Id)); 433e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Message.restoreMessageWithId(mProviderContext, message3Id)); 434e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Message.restoreMessageWithId(mProviderContext, message4Id)); 435e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Account.restoreAccountWithId(mProviderContext, account2Id)); 436e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler } 437e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 438206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki public void testLoadMessageFromUri() throws Exception { 439391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Create a simple message 440391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message msg = new Message(); 441391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String text = "This is some text"; 442391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.mText = text; 443391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String sender = "sender@host.com"; 444391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.mFrom = sender; 445391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Save this away 446391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.save(mProviderContext); 447391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 448206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki Uri fileUri = ProviderTestUtils.createTempEmlFile(mProviderContext, msg, 449206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki mContext.getFilesDir()); 450391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 451391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Load the message via Controller and a Uri 4524be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Message loadedMsg = mTestController.loadMessageFromUri(fileUri); 453391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 454391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Check server id, mailbox key, account key, and from 455391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(loadedMsg); 456391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertTrue(loadedMsg.mServerId.startsWith(Controller.ATTACHMENT_MESSAGE_UID_PREFIX)); 4574be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox box = mTestController.getAttachmentMailbox(); 458391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(box); 459391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(box.mId, loadedMsg.mMailboxKey); 460391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(0, loadedMsg.mAccountKey); 461391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(loadedMsg.mFrom, sender); 462391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Check body text 463391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String loadedMsgText = Body.restoreBodyTextWithMessageId(mProviderContext, loadedMsg.mId); 464391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(text, loadedMsgText); 465391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank } 466391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 4676ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 4688d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank * Create a simple HostAuth with protocol 4697c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 4708d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank private HostAuth setupSimpleHostAuth(String protocol) { 4718d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank HostAuth hostAuth = new HostAuth(); 4728d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank hostAuth.mProtocol = protocol; 4738d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank return hostAuth; 4748d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank } 4758d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank 4768d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank public void testIsMessagingController() { 4778d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account1 = ProviderTestUtils.setupAccount("account1", false, 4788d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4798d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account1.mHostAuthRecv = setupSimpleHostAuth("eas"); 4808d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account1.save(mProviderContext); 4814be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account1)); 4828d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account2 = ProviderTestUtils.setupAccount("account2", false, 4838d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4848d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account2.mHostAuthRecv = setupSimpleHostAuth("imap"); 4858d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account2.save(mProviderContext); 4864be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account2)); 4878d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account3 = ProviderTestUtils.setupAccount("account3", false, 4888d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4898d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account3.mHostAuthRecv = setupSimpleHostAuth("pop3"); 4908d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account3.save(mProviderContext); 4914be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account3)); 4928d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account4 = ProviderTestUtils.setupAccount("account4", false, 4938d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4948d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account4.mHostAuthRecv = setupSimpleHostAuth("smtp"); 4958d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account4.save(mProviderContext); 4964be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account4)); 4978d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // There should be values for all of these accounts in the legacy map 4984be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account1.mId)); 4994be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account2.mId)); 5004be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account3.mId)); 5014be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account4.mId)); 5028d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // The map should have the expected values 5034be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.mLegacyControllerMap.get(account1.mId)); 5044be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.mLegacyControllerMap.get(account2.mId)); 5054be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.mLegacyControllerMap.get(account3.mId)); 5064be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.mLegacyControllerMap.get(account4.mId)); 5078d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // This second pass should pull values from the cache 5084be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account1)); 5094be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account2)); 5104be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account3)); 5114be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account4)); 5128d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank } 5136ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 5146ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 5158d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank * TODO: releasing associated data (e.g. attachments, embedded images) 5166ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 5177c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler} 518