ControllerProviderOpsTests.java revision e29189e3eeea9c629777b3deed6ea2be67caa737
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; 207c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent; 21b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blankimport com.android.email.provider.EmailProvider; 22b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blankimport com.android.email.provider.ProviderTestUtils; 237c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Account; 24391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blankimport com.android.email.provider.EmailContent.Body; 258d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blankimport com.android.email.provider.EmailContent.HostAuth; 267c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 277c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 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() { 547c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_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. 16411aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki * 165b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws ExecutionException 166b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws InterruptedException 167b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank */ 168b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank public void testMoveMessage() throws InterruptedException, ExecutionException { 169b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Account account1 = ProviderTestUtils.setupAccount("message-move", true, mProviderContext); 170b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long account1Id = account1.mId; 171b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 172b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long box1Id = box1.mId; 173b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mProviderContext); 174b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long box2Id = box2.mId; 17511aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki Mailbox boxDest = ProviderTestUtils.setupMailbox("d", account1Id, true, mProviderContext); 17611aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki long boxDestId = boxDest.mId; 177b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 178b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 179b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank true, mProviderContext); 18011aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box2Id, false, 18111aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki true, mProviderContext); 182b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long message1Id = message1.mId; 18311aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki long message2Id = message2.mId; 184b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 185b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // Because moveMessage runs asynchronously, call get() to force it to complete 18611aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki mTestController.moveMessage(new long[] {message1Id, message2Id}, boxDestId).get(); 187b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 188b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // now read back a fresh copy and confirm it's in the trash 18911aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki assertEquals(boxDestId, EmailContent.Message.restoreMessageWithId(mProviderContext, 19011aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki message1Id).mMailboxKey); 19111aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki assertEquals(boxDestId, EmailContent.Message.restoreMessageWithId(mProviderContext, 19211aea1efe45b23c1217b31be029a527c9dc460b8Makoto Onuki message2Id).mMailboxKey); 193b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank } 194b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 195b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank /** 1967c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Test the "delete message" function. Sunny day: 1977c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * - message/mailbox/account all exist 1987c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * - trash mailbox exists 199b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws ExecutionException 200b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws InterruptedException 2017c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 202b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank public void testDeleteMessage() throws InterruptedException, ExecutionException { 2037c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mProviderContext); 2047c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long account1Id = account1.mId; 20577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Mailbox box = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 20677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long boxId = box.mId; 2077c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 20877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Mailbox trashBox = ProviderTestUtils.setupMailbox("box2", account1Id, false, 20977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mProviderContext); 21077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki trashBox.mType = EmailContent.Mailbox.TYPE_TRASH; 21177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki trashBox.save(mProviderContext); 21277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long trashBoxId = trashBox.mId; 21377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 21477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Mailbox draftBox = ProviderTestUtils.setupMailbox("box3", account1Id, false, 21577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mProviderContext); 21677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki draftBox.mType = EmailContent.Mailbox.TYPE_DRAFTS; 21777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki draftBox.save(mProviderContext); 21877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long draftBoxId = draftBox.mId; 21977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 22077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki { 22177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Case 1: Message in a regular mailbox, account known. 22277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message message = ProviderTestUtils.setupMessage("message1", account1Id, boxId, false, 22377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki true, mProviderContext); 22477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long messageId = message.mId; 22577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 22677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mTestController.deleteMessageSync(messageId, account1Id); 22777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 22877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // now read back a fresh copy and confirm it's in the trash 22977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message restored = EmailContent.Message.restoreMessageWithId(mProviderContext, 23077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki messageId); 23177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki assertEquals(trashBoxId, restored.mMailboxKey); 23277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki } 2337c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 23477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki { 23577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Case 2: Message in a regular mailbox, account *un*known. 23677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message message = ProviderTestUtils.setupMessage("message2", account1Id, boxId, false, 23777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki true, mProviderContext); 23877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long messageId = message.mId; 2397c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 24077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mTestController.deleteMessageSync(messageId, -1); 2417c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 24277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // now read back a fresh copy and confirm it's in the trash 24377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message restored = EmailContent.Message.restoreMessageWithId(mProviderContext, 24477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki messageId); 24577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki assertEquals(trashBoxId, restored.mMailboxKey); 24677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki } 2477c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 24877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki { 24977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Case 3: Already in trash 25077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message message = ProviderTestUtils.setupMessage("message3", account1Id, trashBoxId, 25177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki false, true, mProviderContext); 25277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long messageId = message.mId; 2537c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 25477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mTestController.deleteMessageSync(messageId, account1Id); 25577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 25677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Message should be deleted. 25777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki assertNull(EmailContent.Message.restoreMessageWithId(mProviderContext, messageId)); 25877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki } 25977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 26077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki { 26177aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Case 4: Draft 26277aabd951992057a543f1699150971bf1f2d4394Makoto Onuki Message message = ProviderTestUtils.setupMessage("message3", account1Id, draftBoxId, 26377aabd951992057a543f1699150971bf1f2d4394Makoto Onuki false, true, mProviderContext); 26477aabd951992057a543f1699150971bf1f2d4394Makoto Onuki long messageId = message.mId; 26577aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 26677aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mTestController.deleteMessageSync(messageId, account1Id); 26777aabd951992057a543f1699150971bf1f2d4394Makoto Onuki 26877aabd951992057a543f1699150971bf1f2d4394Makoto Onuki // Message should be deleted. 26977aabd951992057a543f1699150971bf1f2d4394Makoto Onuki assertNull(EmailContent.Message.restoreMessageWithId(mProviderContext, messageId)); 27077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki } 2717c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 2727c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2737c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 2747c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Test deleting message when there is no trash mailbox 275b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws ExecutionException 276b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws InterruptedException 2777c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 278b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank public void testDeleteMessageNoTrash() throws InterruptedException, ExecutionException { 2797c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Account account1 = 2807c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler ProviderTestUtils.setupAccount("message-delete-notrash", true, mProviderContext); 2817c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long account1Id = account1.mId; 2827c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 2837c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long box1Id = box1.mId; 2847c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2857c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1 = 2867c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 2877c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler mProviderContext); 2887c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long message1Id = message1.mId; 2897c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 29077aabd951992057a543f1699150971bf1f2d4394Makoto Onuki mTestController.deleteMessageSync(message1Id, account1Id); 2917c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2927c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // now read back a fresh copy and confirm it's in the trash 2937c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1get = 2947c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler EmailContent.Message.restoreMessageWithId(mProviderContext, message1Id); 2957c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2967c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // check the new mailbox and see if it looks right 2977c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertFalse(-1 == message1get.mMailboxKey); 2987c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertFalse(box1Id == message1get.mMailboxKey); 2997c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Mailbox mailbox2get = EmailContent.Mailbox.restoreMailboxWithId(mProviderContext, 3007c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler message1get.mMailboxKey); 3017c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertEquals(EmailContent.Mailbox.TYPE_TRASH, mailbox2get.mType); 3027c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 3037c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 3047c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 3056ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler * Test read/unread flag 3066ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 3076ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler public void testReadUnread() { 308fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("read-unread", false, mProviderContext); 309fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.mHostAuthRecv 310fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler = ProviderTestUtils.setupHostAuth("read-unread", 0, false, mProviderContext); 311fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.save(mProviderContext); 312fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler long account1Id = account1.mId; 3136ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long box1Id = 2; 3146ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3156ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1 = 3166ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 3176ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler mProviderContext); 3186ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long message1Id = message1.mId; 3196ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3206ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "read" 3214be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageRead(message1Id, true); 3226ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3236ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertTrue(message1get.mFlagRead); 3246ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3256ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "unread" 3264be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageRead(message1Id, false); 3276ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3286ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertFalse(message1get.mFlagRead); 3296ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler } 3306ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3316ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 3326ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler * Test favorites flag 3336ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 3346ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler public void testFavorites() { 335fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("favorites", false, mProviderContext); 336fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.mHostAuthRecv 337fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler = ProviderTestUtils.setupHostAuth("favorites", 0, false, mProviderContext); 338fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.save(mProviderContext); 339fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler long account1Id = account1.mId; 3406ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long box1Id = 2; 3416ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3426ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1 = 3436ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 3446ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler mProviderContext); 3456ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long message1Id = message1.mId; 3466ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3476ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "favorite" 3484be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageFavorite(message1Id, true); 3496ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3506ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertTrue(message1get.mFlagFavorite); 3516ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3526ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "not favorite" 3534be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageFavorite(message1Id, false); 3546ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3556ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertFalse(message1get.mFlagFavorite); 3566ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler } 3576ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 358391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank public void testGetAndDeleteAttachmentMailbox() { 3594be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox box = mTestController.getAttachmentMailbox(); 360391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(box); 3614be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox anotherBox = mTestController.getAttachmentMailbox(); 362391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(anotherBox); 363391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // We should always get back the same Mailbox row 364391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(box.mId, anotherBox.mId); 365391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Add two messages to this mailbox 366391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank ProviderTestUtils.setupMessage("message1", 0, box.mId, false, true, 367391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank mProviderContext); 368391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank ProviderTestUtils.setupMessage("message2", 0, box.mId, false, true, 369391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank mProviderContext); 370391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Make sure we can find them where they are expected 371391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(2, EmailContent.count(mProviderContext, Message.CONTENT_URI, 372391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message.MAILBOX_KEY + "=?", new String[] {Long.toString(box.mId)})); 373391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Delete them 3744be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.deleteAttachmentMessages(); 375391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Make sure they're gone 376391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(0, EmailContent.count(mProviderContext, Message.CONTENT_URI, 377391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message.MAILBOX_KEY + "=?", new String[] {Long.toString(box.mId)})); 378391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank } 379391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 380e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler /** 381e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler * Test wiping an account's synced data (but not the account) 382e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler */ 383e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler public void testWipeSyncedData() { 384e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Account account1 = ProviderTestUtils.setupAccount("wipe-synced-1", true, mProviderContext); 385e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long account1Id = account1.mId; 386e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 387e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box1Id = box1.mId; 388e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mProviderContext); 389e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box2Id = box2.mId; 390e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 391e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Account account2 = ProviderTestUtils.setupAccount("wipe-synced-2", true, mProviderContext); 392e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long account2Id = account2.mId; 393e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Mailbox box3 = ProviderTestUtils.setupMailbox("box3", account2Id, true, mProviderContext); 394e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box3Id = box3.mId; 395e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Mailbox box4 = ProviderTestUtils.setupMailbox("box4", account2Id, true, mProviderContext); 396e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long box4Id = box4.mId; 397e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 398e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler // Now populate all 4 with messages 399e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler Message message = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 400e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 401e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message1Id = message.mId; 402e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler message = ProviderTestUtils.setupMessage("message2", account1Id, box2Id, false, 403e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 404e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message2Id = message.mId; 405e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler message = ProviderTestUtils.setupMessage("message3", account2Id, box3Id, false, 406e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 407e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message3Id = message.mId; 408e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler message = ProviderTestUtils.setupMessage("message4", account2Id, box4Id, false, 409e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler true, mProviderContext); 410e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler long message4Id = message.mId; 411e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 412e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler // Now wipe account 1's data 413e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler mTestController.deleteSyncedDataSync(account1Id); 414e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 415e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler // Confirm: Mailboxes gone, messages gone, account survives 416e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNull(Mailbox.restoreMailboxWithId(mProviderContext, box1Id)); 417e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNull(Mailbox.restoreMailboxWithId(mProviderContext, box2Id)); 418e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNull(Message.restoreMessageWithId(mProviderContext, message1Id)); 419e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNull(Message.restoreMessageWithId(mProviderContext, message2Id)); 420e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Account.restoreAccountWithId(mProviderContext, account1Id)); 421e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 422e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler // Confirm: Other account survived 423e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Mailbox.restoreMailboxWithId(mProviderContext, box3Id)); 424e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Mailbox.restoreMailboxWithId(mProviderContext, box4Id)); 425e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Message.restoreMessageWithId(mProviderContext, message3Id)); 426e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Message.restoreMessageWithId(mProviderContext, message4Id)); 427e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler assertNotNull(Account.restoreAccountWithId(mProviderContext, account2Id)); 428e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler } 429e29189e3eeea9c629777b3deed6ea2be67caa737Andy Stadler 430206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki public void testLoadMessageFromUri() throws Exception { 431391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Create a simple message 432391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message msg = new Message(); 433391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String text = "This is some text"; 434391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.mText = text; 435391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String sender = "sender@host.com"; 436391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.mFrom = sender; 437391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Save this away 438391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.save(mProviderContext); 439391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 440206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki Uri fileUri = ProviderTestUtils.createTempEmlFile(mProviderContext, msg, 441206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki mContext.getFilesDir()); 442391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 443391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Load the message via Controller and a Uri 4444be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Message loadedMsg = mTestController.loadMessageFromUri(fileUri); 445391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 446391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Check server id, mailbox key, account key, and from 447391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(loadedMsg); 448391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertTrue(loadedMsg.mServerId.startsWith(Controller.ATTACHMENT_MESSAGE_UID_PREFIX)); 4494be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox box = mTestController.getAttachmentMailbox(); 450391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(box); 451391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(box.mId, loadedMsg.mMailboxKey); 452391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(0, loadedMsg.mAccountKey); 453391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(loadedMsg.mFrom, sender); 454391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Check body text 455391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String loadedMsgText = Body.restoreBodyTextWithMessageId(mProviderContext, loadedMsg.mId); 456391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(text, loadedMsgText); 457391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank } 458391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 4596ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 4608d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank * Create a simple HostAuth with protocol 4617c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 4628d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank private HostAuth setupSimpleHostAuth(String protocol) { 4638d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank HostAuth hostAuth = new HostAuth(); 4648d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank hostAuth.mProtocol = protocol; 4658d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank return hostAuth; 4668d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank } 4678d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank 4688d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank public void testIsMessagingController() { 4698d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account1 = ProviderTestUtils.setupAccount("account1", false, 4708d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4718d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account1.mHostAuthRecv = setupSimpleHostAuth("eas"); 4728d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account1.save(mProviderContext); 4734be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account1)); 4748d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account2 = ProviderTestUtils.setupAccount("account2", false, 4758d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4768d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account2.mHostAuthRecv = setupSimpleHostAuth("imap"); 4778d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account2.save(mProviderContext); 4784be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account2)); 4798d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account3 = ProviderTestUtils.setupAccount("account3", false, 4808d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4818d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account3.mHostAuthRecv = setupSimpleHostAuth("pop3"); 4828d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account3.save(mProviderContext); 4834be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account3)); 4848d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account4 = ProviderTestUtils.setupAccount("account4", false, 4858d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 4868d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account4.mHostAuthRecv = setupSimpleHostAuth("smtp"); 4878d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account4.save(mProviderContext); 4884be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account4)); 4898d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // There should be values for all of these accounts in the legacy map 4904be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account1.mId)); 4914be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account2.mId)); 4924be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account3.mId)); 4934be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account4.mId)); 4948d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // The map should have the expected values 4954be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.mLegacyControllerMap.get(account1.mId)); 4964be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.mLegacyControllerMap.get(account2.mId)); 4974be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.mLegacyControllerMap.get(account3.mId)); 4984be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.mLegacyControllerMap.get(account4.mId)); 4998d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // This second pass should pull values from the cache 5004be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account1)); 5014be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account2)); 5024be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account3)); 5034be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account4)); 5048d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank } 5056ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 5066ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 5078d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank * TODO: releasing associated data (e.g. attachments, embedded images) 5086ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 5097c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler} 510