ProviderTests.java revision da8836a76cd8a6eaa7e3693eeacc6393870b2066
17143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/* 27143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Copyright (C) 2009 The Android Open Source Project 37143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 47143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Licensed under the Apache License, Version 2.0 (the "License"); 57143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * you may not use this file except in compliance with the License. 67143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You may obtain a copy of the License at 77143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 87143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * http://www.apache.org/licenses/LICENSE-2.0 97143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Unless required by applicable law or agreed to in writing, software 117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * distributed under the License is distributed on an "AS IS" BASIS, 127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * See the License for the specific language governing permissions and 147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * limitations under the License. 157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpackage com.android.email.provider; 187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Account; 209e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadlerimport com.android.email.provider.EmailContent.AccountColumns; 21976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport com.android.email.provider.EmailContent.Attachment; 226c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadlerimport com.android.email.provider.EmailContent.AttachmentColumns; 237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Body; 249627d014e16235eadf981b9165807dc72a14a383Mihai Predaimport com.android.email.provider.EmailContent.BodyColumns; 25da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadlerimport com.android.email.provider.EmailContent.HostAuth; 267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 2741f775bbc731b25854da9f5a80c66a4aa1eb0af9satokimport com.android.email.provider.EmailContent.MailboxColumns; 287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 29ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport com.android.email.provider.EmailContent.MessageColumns; 307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 31ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentResolver; 327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.ContentUris; 33ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentValues; 347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.Context; 357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.database.Cursor; 367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.net.Uri; 374a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadlerimport android.os.Bundle; 38976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport android.os.Environment; 394a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadlerimport android.os.Parcel; 407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.test.ProviderTestCase2; 417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 42758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.File; 43758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.IOException; 44758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.util.ArrayList; 45758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/** 477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Tests of the Email provider. 48758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You can run this entire test case with: 507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * runtest -c com.android.email.provider.ProviderTests email 517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpublic class ProviderTests extends ProviderTestCase2<EmailProvider> { 53758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailProvider mProvider; 557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Context mMockContext; 567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public ProviderTests() { 587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); 597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 60758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void setUp() throws Exception { 637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.setUp(); 647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext = getMockContext(); 657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void tearDown() throws Exception { 697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.tearDown(); 707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple account save/retrieve 747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountSave() { 7628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-save", true, mMockContext); 777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 78758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Account account2 = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 80758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account2); 827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 8341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 844a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler /** 85da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler * Test simple account save/retrieve with predefined hostauth records 86da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler */ 87da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler public void testAccountSaveHostAuth() { 88da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-hostauth", false, mMockContext); 89da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler // add hostauth data, which should be saved the first time 90da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthRecv = ProviderTestUtils.setupHostAuth("account-hostauth-recv", -1, false, 91da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler mMockContext); 92da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthSend = ProviderTestUtils.setupHostAuth("account-hostauth-send", -1, false, 93da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler mMockContext); 94da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.save(mMockContext); 95da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler long account1Id = account1.mId; 96da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 97da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler // Confirm account reads back correctly 98da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler Account account1get = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 99da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account1get); 100da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 101da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler // Confirm hostauth fields can be accessed & read back correctly 102da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler HostAuth hostAuth1get = EmailContent.HostAuth.restoreHostAuthWithId(mMockContext, 103da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1get.mHostAuthKeyRecv); 104da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler ProviderTestUtils.assertHostAuthEqual("testAccountSaveHostAuth-recv", 105da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthRecv, hostAuth1get); 106da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler HostAuth hostAuth2get = EmailContent.HostAuth.restoreHostAuthWithId(mMockContext, 107da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1get.mHostAuthKeySend); 108da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler ProviderTestUtils.assertHostAuthEqual("testAccountSaveHostAuth-send", 109da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthSend, hostAuth2get); 110da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } 111da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 112da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler /** 1134a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler * Simple test of account parceling. The rather tortuous path is to ensure that the 1144a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler * account is really flattened all the way down to a parcel and back. 1154a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler */ 1164a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler public void testAccountParcel() { 1174a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Account account1 = ProviderTestUtils.setupAccount("parcel", false, mMockContext); 1184a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Bundle b = new Bundle(); 1194a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b.putParcelable("account", account1); 1204a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Parcel p = Parcel.obtain(); 1214a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b.writeToParcel(p, 0); 1224a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler p.setDataPosition(0); // rewind it for reading 1234a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Bundle b2 = new Bundle(Account.class.getClassLoader()); 1244a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b2.readFromParcel(p); 1254a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Account account2 = (Account) b2.getParcelable("account"); 1264a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler p.recycle(); 1274a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler 1284a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler ProviderTestUtils.assertAccountEqual("testAccountParcel", account1, account2); 1294a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler } 1304a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler 13141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static String[] MAILBOX_UNREAD_COUNT_PROJECTION = new String [] { 13241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MailboxColumns.UNREAD_COUNT 13341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok }; 13441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static int MAILBOX_UNREAD_COUNT_COLMUN = 0; 13541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 13641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok /** 13741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * Get the value of the unread count in the mailbox of the account. 13841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * This can be different from the actual number of unread messages in that mailbox. 13941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param accountId 14041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param mailboxId 14141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @return 14241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok */ 14341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private int getUnreadCount(long mailboxId) { 14441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok String text = null; 14541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Cursor c = null; 14641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok try { 14741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c = mMockContext.getContentResolver().query( 14841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Mailbox.CONTENT_URI, 14941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MAILBOX_UNREAD_COUNT_PROJECTION, 15041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok EmailContent.RECORD_ID + "=?", 15141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok new String[] { String.valueOf(mailboxId) }, 15241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok null); 15341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.moveToFirst(); 15441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok text = c.getString(MAILBOX_UNREAD_COUNT_COLMUN); 15541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } finally { 15641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.close(); 15741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 15841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok return Integer.valueOf(text); 15941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 16041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 1617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: HostAuth tests 1637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 164758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple mailbox save/retrieve 1677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxSave() { 16928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, mMockContext); 1707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 17128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, 17228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 1737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 174758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Mailbox box2 = EmailContent.Mailbox.restoreMailboxWithId(mMockContext, box1Id); 176758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 17728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMailboxEqual("testMailboxSave", box1, box2); 1787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 179758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1804119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static String[] expectedAttachmentNames = 181976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] {"attachment1.doc", "attachment2.xls", "attachment3"}; 182976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // The lengths need to be kept in ascending order 1834119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static long[] expectedAttachmentSizes = new long[] {31415L, 97701L, 151213L}; 184976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 185fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /* 186fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Returns null if the message has no body. 187fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 188fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda private Body loadBodyForMessageId(long messageId) { 189fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 190fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda try { 191fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c = mMockContext.getContentResolver().query( 192fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_URI, 193fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_PROJECTION, 194fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.MESSAGE_KEY + "=?", 195fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda new String[] {String.valueOf(messageId)}, 196fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda null); 197fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda int numBodies = c.getCount(); 198fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertTrue("at most one body", numBodies < 2); 199fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda return c.moveToFirst() ? EmailContent.getContent(c, Body.class) : null; 200fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } finally { 201fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c.close(); 202fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 203fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 204fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 2057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple message save/retrieve 207758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 2087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: serverId vs. serverIntId 2097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageSave() { 21128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-save", true, mMockContext); 2127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 21328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 2147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 2157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a simple message (saved with no body) 21728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 21828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 2197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 2207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message1get = EmailContent.Message.restoreMessageWithId(mMockContext, message1Id); 22128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message1, message1get); 2227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a message saved with a body 2247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Note that it will read back w/o the text & html so we must extract those 22528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 22628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 2277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 2287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String text2 = message2.mText; 2297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String html2 = message2.mHtml; 230936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler String textReply2 = message2.mTextReply; 231936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler String htmlReply2 = message2.mHtmlReply; 2326c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long sourceKey2 = message2.mSourceKey; 2337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mText = null; 2347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mHtml = null; 235936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler message2.mTextReply = null; 236936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler message2.mHtmlReply = null; 237e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank message2.mSourceKey = 0; 2387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message2get = EmailContent.Message.restoreMessageWithId(mMockContext, message2Id); 23928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message2, message2get); 240758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Now see if there's a body saved with the right stuff 242fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Body body2 = loadBodyForMessageId(message2Id); 243fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body text", text2, body2.mTextContent); 244fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body html", html2, body2.mHtmlContent); 245936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals("reply text", textReply2, body2.mTextReply); 246936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals("reply html", htmlReply2, body2.mHtmlReply); 2476c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals("source key", sourceKey2, body2.mSourceKey); 248976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 2494119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments and body 250976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Message message3 = ProviderTestUtils.setupMessage("message3", account1Id, box1Id, true, 251976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank false, mMockContext); 252976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank ArrayList<Attachment> atts = new ArrayList<Attachment>(); 253976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < 3; i++) { 2544119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2554119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2564119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 257976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 258976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank message3.mAttachments = atts; 2599e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message3.save(mMockContext); 260976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank long message3Id = message3.mId; 261976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 262976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Now check the attachments; there should be three and they should match name and size 263fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 264976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 265976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Note that there is NO guarantee of the order of returned records in the general case, 266976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 267976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // be kept sorted by size (ascending) for this test to work properly 268976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = mMockContext.getContentResolver().query( 269976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_URI, 270976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_PROJECTION, 271976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.MESSAGE_KEY + "=?", 272976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] { 273976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String.valueOf(message3Id) 274976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank }, 275976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.SIZE); 276976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int numAtts = c.getCount(); 277976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(3, numAtts); 278976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int i = 0; 279976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank while (c.moveToNext()) { 2804119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2814119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message3", atts.get(i), actual); 2824119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler i++; 2834119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2844119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 2854119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 2864119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2874119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2884119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments but no body 2894119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Message message4 = ProviderTestUtils.setupMessage("message4", account1Id, box1Id, false, 2904119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext); 2914119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts = new ArrayList<Attachment>(); 2924119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler for (int i = 0; i < 3; i++) { 2934119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2944119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2954119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 2964119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2974119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler message4.mAttachments = atts; 2989e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message4.save(mMockContext); 2994119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler long message4Id = message4.mId; 3004119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 3014119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now check the attachments; there should be three and they should match name and size 3024119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = null; 30341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 3044119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 3054119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note that there is NO guarantee of the order of returned records in the general case, 3064119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 3074119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // be kept sorted by size (ascending) for this test to work properly 3084119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = mMockContext.getContentResolver().query( 3094119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_URI, 3104119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_PROJECTION, 3114119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.MESSAGE_KEY + "=?", 3124119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler new String[] { 3134119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler String.valueOf(message4Id) 3144119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler }, 3154119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.SIZE); 3164119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int numAtts = c.getCount(); 3174119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(3, numAtts); 3184119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int i = 0; 3194119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler while (c.moveToNext()) { 3204119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 3214119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), actual); 322976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank i++; 323976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 324976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 325976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 3267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 32744144d0301213536b02f2080237b63d8271b2d0bMihai Preda 32844144d0301213536b02f2080237b63d8271b2d0bMihai Preda // test EmailContent.restoreAttachmentsWitdMessageId() 32944144d0301213536b02f2080237b63d8271b2d0bMihai Preda Attachment[] attachments = 33044144d0301213536b02f2080237b63d8271b2d0bMihai Preda Attachment.restoreAttachmentsWithMessageId(mMockContext, message4Id); 33144144d0301213536b02f2080237b63d8271b2d0bMihai Preda int size = attachments.length; 33244144d0301213536b02f2080237b63d8271b2d0bMihai Preda assertEquals(3, size); 33344144d0301213536b02f2080237b63d8271b2d0bMihai Preda for (int i = 0; i < size; ++i) { 33444144d0301213536b02f2080237b63d8271b2d0bMihai Preda ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), attachments[i]); 33544144d0301213536b02f2080237b63d8271b2d0bMihai Preda } 3367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 337758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update account 3407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 341758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update mailbox 3447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 345758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update message 3487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 349758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete account 3527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 3537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountDelete() { 35528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-1", true, mMockContext); 3567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 35728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-delete-2", true, mMockContext); 3587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account2Id = account2.mId; 3597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two accounts 3617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 3637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 3657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 3667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one account now 3697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 3717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 3747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts now 3777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 3797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 380758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3829627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for Body.lookupBodyIdWithMessageId() 3839627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Verifies that: 3849627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - for a message without body, -1 is returned. 3859627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - for a mesage with body, the id matches the one from loadBodyForMessageId. 3869627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 3879627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testLookupBodyIdWithMessageId() { 3889627d014e16235eadf981b9165807dc72a14a383Mihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 3899627d014e16235eadf981b9165807dc72a14a383Mihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 3909627d014e16235eadf981b9165807dc72a14a383Mihai Preda long account1Id = account1.mId; 3919627d014e16235eadf981b9165807dc72a14a383Mihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 3929627d014e16235eadf981b9165807dc72a14a383Mihai Preda long box1Id = box1.mId; 3939627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3949627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 1. create message with no body, check that returned bodyId is -1 3959627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 3969627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 3979627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message1Id = message1.mId; 3989627d014e16235eadf981b9165807dc72a14a383Mihai Preda long bodyId1 = Body.lookupBodyIdWithMessageId(resolver, message1Id); 3999627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(bodyId1, -1); 4009627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4019627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 2. create message with body, check that returned bodyId is correct 4029627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 4039627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 4049627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message2Id = message2.mId; 4059627d014e16235eadf981b9165807dc72a14a383Mihai Preda long bodyId2 = Body.lookupBodyIdWithMessageId(resolver, message2Id); 4069627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body = loadBodyForMessageId(message2Id); 4079627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body); 4089627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body.mId, bodyId2); 4099627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 4109627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4119627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 4129627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for Body.updateBodyWithMessageId(). 4139627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 1. - create message without body, 4149627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - update its body (set TEXT_CONTENT) 4159627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - check correct updated body is read back 4169627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 4179627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 2. - create message with body, 4189627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - update body (set TEXT_CONTENT) 4199627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - check correct updated body is read back 4209627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 4219627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testUpdateBodyWithMessageId() { 4229627d014e16235eadf981b9165807dc72a14a383Mihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 4239627d014e16235eadf981b9165807dc72a14a383Mihai Preda long account1Id = account1.mId; 4249627d014e16235eadf981b9165807dc72a14a383Mihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 4259627d014e16235eadf981b9165807dc72a14a383Mihai Preda long box1Id = box1.mId; 4269627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4279627d014e16235eadf981b9165807dc72a14a383Mihai Preda final String textContent = "foobar some odd text"; 428936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler final String htmlContent = "and some html"; 429936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler final String textReply = "plain text reply"; 430936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler final String htmlReply = "or the html reply"; 4319627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4329627d014e16235eadf981b9165807dc72a14a383Mihai Preda ContentValues values = new ContentValues(); 4339627d014e16235eadf981b9165807dc72a14a383Mihai Preda values.put(BodyColumns.TEXT_CONTENT, textContent); 434936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler values.put(BodyColumns.HTML_CONTENT, htmlContent); 435936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler values.put(BodyColumns.TEXT_REPLY, textReply); 436936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler values.put(BodyColumns.HTML_REPLY, htmlReply); 437e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank values.put(BodyColumns.SOURCE_MESSAGE_KEY, 17); 4389627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4399627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 1 4409627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 4419627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 4429627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message1Id = message1.mId; 4439627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body1 = loadBodyForMessageId(message1Id); 4449627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNull(body1); 4459627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body.updateBodyWithMessageId(mMockContext, message1Id, values); 4469627d014e16235eadf981b9165807dc72a14a383Mihai Preda body1 = loadBodyForMessageId(message1Id); 4479627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body1); 4489627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body1.mTextContent, textContent); 449936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body1.mHtmlContent, htmlContent); 450936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body1.mTextReply, textReply); 451936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body1.mHtmlReply, htmlReply); 452e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank assertEquals(body1.mSourceKey, 17); 4539627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4549627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 2 4559627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 4569627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 4579627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message2Id = message2.mId; 4589627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body2 = loadBodyForMessageId(message2Id); 4599627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body2); 4609627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertTrue(!body2.mTextContent.equals(textContent)); 4619627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body.updateBodyWithMessageId(mMockContext, message2Id, values); 4629627d014e16235eadf981b9165807dc72a14a383Mihai Preda body2 = loadBodyForMessageId(message1Id); 4639627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body2); 4649627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body2.mTextContent, textContent); 465936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body2.mHtmlContent, htmlContent); 466936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body2.mTextReply, textReply); 467936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body2.mHtmlReply, htmlReply); 468e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank assertEquals(body2.mSourceKey, 17); 4699627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 4709627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4719627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 472fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete body. 473fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 474fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. The body has _id 1 and messageKey 2). 475fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 476fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. verify that body for message 2 has not been deleted. 477fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. delete message 2, verify body is deleted. 478fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 479fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteBody() { 480fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 481fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 482fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and mailboxes 483fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 484fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 485fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 486fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 487fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 488fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 489fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 490fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 491fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 492fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 493fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 494fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 495fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 496fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 497fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // verify body is there 498fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 499fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 500fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 501fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 502c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 503fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. verify body for second message wasn't deleted 504fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 505fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 506fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. delete second message, check its body is deleted 507fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message2Id), null, null); 508fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNull(loadBodyForMessageId(message2Id)); 509fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 510fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 511fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 512fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete orphan bodies. 513fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 514fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. Body has _id 1 and messageKey 2). 515fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 516fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. delete some other mailbox -- this triggers delete orphan bodies. 517fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. verify that body for message 2 has not been deleted. 518fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 519fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteOrphanBodies() { 520fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 521fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 522fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and twa mailboxes 523fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 524fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 525fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 526fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 527fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 528fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box2Id = box2.mId; 529fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 530fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 531fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 532fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 533fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 534fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 535fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 536fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 537fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 538fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 539fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda //verify body is there 540fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 541fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 542fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 543fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 544fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 545fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. delete some mailbox (because it triggers "delete orphan bodies") 546fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id), null, null); 547fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 548fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. verify body for second message wasn't deleted during "delete orphan bodies" 549fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 550fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 551fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 552fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 5537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete mailbox 5547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxDelete() { 55628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete", true, mMockContext); 5577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 55828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 5597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 56028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 5617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box2Id = box2.mId; 562758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 5637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MailboxColumns.ACCOUNT_KEY + "=?"; 5647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id) }; 5657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two mailboxes 5677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 5687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 5697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 5717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 5727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one mailbox now 5757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 5767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 5777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 5797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id); 5807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no mailboxes now 5837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 5847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 5857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 586758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 5877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 5887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete message 5897143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 5907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 5917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageDelete() { 59328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mMockContext); 5947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 59528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 5967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 59728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 59828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 5997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 60028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 60128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 6027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 6037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 6057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 6067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 6077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 6097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 6117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 6137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 6147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one message now 6177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numMessages); 6197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 6217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 6227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no messages now 6257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 6277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 628758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 6297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 630ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test delete synced message 631ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 632ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 633ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 634ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testSyncedMessageDelete() { 63528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("synced-message-delete", true, 63628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 637ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 63828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 639ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 64028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 64128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 642ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 64328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 64428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 645ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 646ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 647ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 648ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 649ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 650ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 651ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 652ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 653ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 654ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 655ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 656ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 657ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure we start with no synced deletions 658ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 659ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 660ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 661ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 662ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete one of them SYNCED 663ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message1Id); 664ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 665ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 666ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's only one message now 667ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 668ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 669ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 670ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one synced deletion now 671ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 672ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 673ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 674ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 675ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete the other one NOT SYNCED 676ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 677ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 678ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 679ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are no messages now 680ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 681ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 682ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 683ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's still one deletion now 684ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 685ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 686ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 687ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 688ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 689ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 690ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test message update 691ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 692ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 693ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 694ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testMessageUpdate() { 69528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-update", true, mMockContext); 696ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 69728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 698ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 69928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 70028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 701ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 70228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 70328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 704ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 705ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentResolver cr = mMockContext.getContentResolver(); 706ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 707ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 708ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 709ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 710ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 711ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 712ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 713ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 714ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 715ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 716ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 717ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the first one 718ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 719ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentValues cv = new ContentValues(); 720ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 721ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 722ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 723ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's no updated message 724ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 725ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 726ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 727ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 728ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck" 729ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message restoredMessage = Message.restoreMessageWithId(mMockContext, message1Id); 730ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 731ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 732ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the second one 733ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id); 734ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv = new ContentValues(); 735ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 736ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 737ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 738ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one updated message 739ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 740ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 741ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 742ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 743ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck", 744ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // as before 745ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler restoredMessage = Message.restoreMessageWithId(mMockContext, message2Id); 746ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 747ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 748ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the original message back from the provider 749ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Cursor c = cr.query(Message.UPDATED_CONTENT_URI, Message.CONTENT_PROJECTION, null, null, 750ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler null); 751ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler try { 752ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertTrue(c.moveToFirst()); 753ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message originalMessage = EmailContent.getContent(c, Message.class); 754ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure this has the original value 755ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from message2", originalMessage.mFrom); 756ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // Should only be one 757ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertFalse(c.moveToNext()); 758ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } finally { 759ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler c.close(); 760ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 761ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 762ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // delete the second message 763ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.delete(ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id), null, null); 764ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 765ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // hey, presto! the change should be gone 766ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 767ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 768ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 769ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 770ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // and there should now be a deleted record 771ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 772ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 773ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 774ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 775ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 776ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 7777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: cascaded delete account 7787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 7797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 7807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 7817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other account, mailbox & messages and confirm the right objects were deleted 7827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 7837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteAccount() { 78428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-cascade", true, 78528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 7867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 78728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 7887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 78928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 79028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 79128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 79228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 7937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there is one account, one mailbox, and two messages 7957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 7967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numAccounts); 7977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 7987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 7997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 8007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 8017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // delete the account 8037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 8047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 8057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts, mailboxes, or messages 8077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 8087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numAccounts); 8097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 8107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 8117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 8127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 8137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 814758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 8167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test cascaded delete mailbox 8177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 8187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 8197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other mailbox & messages and confirm the right objects were deleted 8207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 8217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteMailbox() { 82228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete-cascade", true, 82328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 8247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 82528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 8267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 82728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 82828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 82928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 83028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 8317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 8337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 8347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 8357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 8377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 8387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 839758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the mailbox 8417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 8427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 843758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // there should now be zero messages 8457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 8467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 8477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 848758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 8506c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler * Test cascaded delete message 8516c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler * Confirms that deleting a message will also delete its body & attachments 8527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 8536c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler public void testCascadeMessageDelete() { 8546c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-cascade", true, mMockContext); 8556c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long account1Id = account1.mId; 8566c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 8576c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long box1Id = box1.mId; 8586c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 8596c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Each message has a body, and also give each 2 attachments 8606c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 8616c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext); 8626c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ArrayList<Attachment> atts = new ArrayList<Attachment>(); 8636c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler for (int i = 0; i < 2; i++) { 8646c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 8656c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 8666c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext)); 8676c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 8686c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message1.mAttachments = atts; 8696c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message1.save(mMockContext); 8706c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long message1Id = message1.mId; 8716c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 8726c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, true, 8736c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext); 8746c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler atts = new ArrayList<Attachment>(); 8756c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler for (int i = 0; i < 2; i++) { 8766c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 8776c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 8786c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext)); 8796c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 8806c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message2.mAttachments = atts; 8816c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message2.save(mMockContext); 8826c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long message2Id = message2.mId; 8836c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 8846c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Set up to test total counts of bodies & attachments for our test messages 8856c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler String bodySelection = BodyColumns.MESSAGE_KEY + " IN (?,?)"; 8866c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler String attachmentSelection = AttachmentColumns.MESSAGE_KEY + " IN (?,?)"; 8876c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler String[] selArgs = new String[] { String.valueOf(message1Id), String.valueOf(message2Id) }; 8886c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 8896c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // make sure there are two bodies 8906c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler int numBodies = EmailContent.count(mMockContext, Body.CONTENT_URI, bodySelection, selArgs); 8916c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(2, numBodies); 8926c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 8936c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // make sure there are four attachments 8946c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler int numAttachments = EmailContent.count(mMockContext, Attachment.CONTENT_URI, 8956c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler attachmentSelection, selArgs); 8966c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(4, numAttachments); 8976c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 8986c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // now delete one of the messages 8996c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 9006c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 9016c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9026c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // there should be one body and two attachments 9036c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numBodies = EmailContent.count(mMockContext, Body.CONTENT_URI, bodySelection, selArgs); 9046c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(1, numBodies); 9056c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9066c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numAttachments = EmailContent.count(mMockContext, Attachment.CONTENT_URI, 9076c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler attachmentSelection, selArgs); 9086c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(2, numAttachments); 9096c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9106c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // now delete the other message 9116c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 9126c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 9136c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9146c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // make sure there are no bodies or attachments 9156c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numBodies = EmailContent.count(mMockContext, Body.CONTENT_URI, bodySelection, selArgs); 9166c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(0, numBodies); 9176c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9186c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numAttachments = EmailContent.count(mMockContext, Attachment.CONTENT_URI, 9196c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler attachmentSelection, selArgs); 9206c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(0, numAttachments); 9216c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 9227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 923976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank /** 924976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * Test that our unique file name algorithm works as expected. Since this test requires an 925976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * SD card, we check the environment first, and return immediately if none is mounted. 926976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * @throws IOException 927976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank */ 928976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank public void testCreateUniqueFile() throws IOException { 929976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Delete existing files, if they exist 930976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 931976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank return; 932976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 933976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 934976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String fileName = "A11achm3n1.doc"; 935976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File uniqueFile = Attachment.createUniqueFile(fileName); 936976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 937976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 938976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 939976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2.doc", uniqueFile.getName()); 940976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 941976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 942976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-3.doc", uniqueFile.getName()); 943976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 944976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 945976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank fileName = "A11achm3n1"; 946976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 947976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 948976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 949976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 950976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2", uniqueFile.getName()); 951976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 952976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 953976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File directory = Environment.getExternalStorageDirectory(); 954976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // These are the files that should be created earlier in the test. Make sure 955976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // they are deleted for the next go-around 956976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String[] fileNames = new String[] {"A11achm3n1.doc", "A11achm3n1-2.doc", "A11achm3n1"}; 957976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int length = fileNames.length; 958976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < length; i++) { 959976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File file = new File(directory, fileNames[i]); 960976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (file.exists()) { 961976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank file.delete(); 962976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 963976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 964976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 965976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 9664119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 9674119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler /** 9684119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler * Test retrieving attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 9694119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler */ 9704119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler public void testGetAttachmentByMessageIdUri() { 9714119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 9724119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 9734119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1 = ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 9744119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2 = ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 975758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 976758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 9774119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 9784119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now ask for the attachments of message id=1 9794119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note: Using the "sort by size" trick to bring them back in expected order 9804119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 9814119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Cursor c = mMockContext.getContentResolver().query(uri, Attachment.CONTENT_PROJECTION, 9824119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler null, null, Attachment.SIZE); 9834119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(2, c.getCount()); 9844119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 9854119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 9864119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToFirst(); 9874119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1Get = EmailContent.getContent(c, Attachment.class); 9884119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-1", a1, a1Get); 9894119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToNext(); 9904119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2Get = EmailContent.getContent(c, Attachment.class); 9914119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-2", a2, a2Get); 9924119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 9934119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 9944119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 9954119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 99654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 99754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler /** 9986c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler * Test deleting attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 9996c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler */ 10006c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler public void testDeleteAttachmentByMessageIdUri() { 10016c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ContentResolver mockResolver = mMockContext.getContentResolver(); 10026c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10036c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 10046c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 10056c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 10066c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a3 = ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 10076c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a4 = ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 10086c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10096c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Delete all attachments for message id=1 10106c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 10116c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler mockResolver.delete(uri, null, null); 10126c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10136c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Read back all attachments and confirm that we have the expected remaining attachments 10146c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // (the attachments that are set for message id=2). Note order-by size to simplify test. 10156c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Cursor c = mockResolver.query(Attachment.CONTENT_URI, Attachment.CONTENT_PROJECTION, 10166c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler null, null, Attachment.SIZE); 10176c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(2, c.getCount()); 10186c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10196c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler try { 10206c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler c.moveToFirst(); 10216c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a3Get = EmailContent.getContent(c, Attachment.class); 10226c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-3", a3, a3Get); 10236c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler c.moveToNext(); 10246c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a4Get = EmailContent.getContent(c, Attachment.class); 10256c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-4", a4, a4Get); 10266c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } finally { 10276c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler c.close(); 10286c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 10296c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 10306c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10316c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler /** 103254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * Tests of default account behavior 1033758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 103454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 1. Simple set/get 103554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 2. Moving default between 3 accounts 103654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 3. Delete default, make sure another becomes default 103754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler */ 103854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler public void testSetGetDefaultAccount() { 103954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // There should be no default account if there are no accounts 104054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long defaultAccountId = Account.getDefaultAccountId(mMockContext); 104154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler assertEquals(-1, defaultAccountId); 104254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 104354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-default-1", true, mMockContext); 104454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account1Id = account1.mId; 104554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-default-2", true, mMockContext); 104654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account2Id = account2.mId; 104754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account3 = ProviderTestUtils.setupAccount("account-default-3", true, mMockContext); 104854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account3Id = account3.mId; 104954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 10509e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // With three accounts, but none marked default, confirm that some default account 10519e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // is returned. Which one is undefined here. 105254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 10539e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertTrue(defaultAccountId == account1Id 10549e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account2Id 10559e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account3Id); 105654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 10579e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler updateIsDefault(account1, true); 105854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 10599e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(account1Id, defaultAccountId); 106054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 1061531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account2, true); 1062531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1063531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 1064531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank 1065531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account3, true); 1066531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1067531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 106854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 106954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now delete a non-default account and confirm no change 107054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 107154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 107254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 1073531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1074531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 107554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 107654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now confirm deleting the default account and it switches to another one 107754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account3Id); 107854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 107954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 1080531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1081531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 1082758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 10839e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // Now delete the final account and confirm there are no default accounts again 10849e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 10859e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 10869e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler 108754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 10889e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(-1, defaultAccountId); 108954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler } 109054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 10919e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler private void updateIsDefault(Account account, boolean newState) { 10929e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.setDefaultAccount(newState); 10939e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler ContentValues cv = new ContentValues(); 10949e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler cv.put(AccountColumns.IS_DEFAULT, account.mIsDefault); 10959e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.update(mMockContext, cv); 10969e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler } 1097758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1098758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public static Message setupUnreadMessage(String name, long accountId, long mailboxId, 1099758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank boolean addBody, boolean saveIt, Context context) { 1100758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message msg = 1101758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupMessage(name, accountId, mailboxId, addBody, false, context); 1102758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.mFlagRead = false; 1103758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank if (saveIt) { 1104758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.save(context); 1105758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 1106758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank return msg; 1107758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 1108758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1109758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public void testUnreadCountTriggers() { 1110758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Start with one account and three mailboxes 1111758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Account account = ProviderTestUtils.setupAccount("triggers", true, mMockContext); 1112758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxA = ProviderTestUtils.setupMailbox("boxA", account.mId, true, mMockContext); 1113758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxB = ProviderTestUtils.setupMailbox("boxB", account.mId, true, mMockContext); 1114758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxC = ProviderTestUtils.setupMailbox("boxC", account.mId, true, mMockContext); 1115758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1116758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure there are no unreads 1117758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1118758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 1119758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxC.mId)); 1120758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1121758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Create 4 unread messages (only 3 named) in boxA 1122758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message1 = setupUnreadMessage("message1", account.mId, boxA.mId, 1123758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 1124758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message2= setupUnreadMessage("message2", account.mId, boxA.mId, 1125758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 1126758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message3 = setupUnreadMessage("message3", account.mId, boxA.mId, 1127758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 1128758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank setupUnreadMessage("message4", account.mId, boxC.mId, false, true, mMockContext); 1129758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1130758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure the unreads are where we expect them 1131758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(3, getUnreadCount(boxA.mId)); 1132758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 1133758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1134758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1135758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // After deleting message 1, the count in box A should be decremented (to 2) 1136758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentResolver cr = mMockContext.getContentResolver(); 1137758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1.mId); 1138758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.delete(uri, null, null); 1139758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxA.mId)); 1140758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 1141758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1142758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1143758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 2 to box B, leaving 1 in box A and 1 in box B 1144758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message2.mMailboxKey = boxB.mId; 1145758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentValues cv = new ContentValues(); 1146758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxB.mId); 1147758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message2.mId), cv, null, null); 1148758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxA.mId)); 1149758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1150758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1151758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1152758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 (from box A) read, leaving 0 in box A 1153758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 1154758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 1); 1155758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1156758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1157758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1158758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1159758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1160758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 3 to box C; should be no change (it's read) 1161758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message3.mMailboxKey = boxC.mId; 1162758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 1163758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxC.mId); 1164758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1165758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1166758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1167758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1168758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1169758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 unread; it's now in box C, so that box's count should go up to 3 1170758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 1171758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 0); 1172758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1173758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1174758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1175758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxC.mId)); 1176758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 11779627d014e16235eadf981b9165807dc72a14a383Mihai Preda 11789627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 11799627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for EmailProvider.createIndex(). 11809627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Check that it returns exacly the same string as the one used previously for index creation. 11819627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 11829627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testCreateIndex() { 11839627d014e16235eadf981b9165807dc72a14a383Mihai Preda String oldStr = "create index message_" + MessageColumns.TIMESTAMP 11849627d014e16235eadf981b9165807dc72a14a383Mihai Preda + " on " + Message.TABLE_NAME + " (" + MessageColumns.TIMESTAMP + ");"; 11859627d014e16235eadf981b9165807dc72a14a383Mihai Preda String newStr = EmailProvider.createIndex(Message.TABLE_NAME, MessageColumns.TIMESTAMP); 11869627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(newStr, oldStr); 11879627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 1188c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 1189c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank public void testIdAddToField() { 1190c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank ContentResolver cr = mMockContext.getContentResolver(); 1191c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank ContentValues cv = new ContentValues(); 1192c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 1193c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank // Try changing the newMessageCount of an account 1194c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Account account = ProviderTestUtils.setupAccount("field-add", true, mMockContext); 1195c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank int startCount = account.mNewMessageCount; 1196c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank // "field" and "add" are the two required elements 1197c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.FIELD_COLUMN_NAME, AccountColumns.NEW_MESSAGE_COUNT); 1198c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.ADD_COLUMN_NAME, 17); 1199c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cr.update(ContentUris.withAppendedId(Account.ADD_TO_FIELD_URI, account.mId), 1200c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv, null, null); 1201c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Account restoredAccount = Account.restoreAccountWithId(mMockContext, account.mId); 1202c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(17 + startCount, restoredAccount.mNewMessageCount); 1203c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.ADD_COLUMN_NAME, -11); 1204c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cr.update(ContentUris.withAppendedId(Account.ADD_TO_FIELD_URI, account.mId), 1205c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv, null, null); 1206c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank restoredAccount = Account.restoreAccountWithId(mMockContext, account.mId); 1207c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(17 - 11 + startCount, restoredAccount.mNewMessageCount); 1208c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 1209c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank // Now try with a mailbox 1210c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Mailbox boxA = ProviderTestUtils.setupMailbox("boxA", account.mId, true, mMockContext); 1211c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(0, boxA.mUnreadCount); 1212c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.FIELD_COLUMN_NAME, MailboxColumns.UNREAD_COUNT); 1213c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.ADD_COLUMN_NAME, 11); 1214c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cr.update(ContentUris.withAppendedId(Mailbox.ADD_TO_FIELD_URI, boxA.mId), cv, null, null); 1215c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Mailbox restoredBoxA = Mailbox.restoreMailboxWithId(mMockContext, boxA.mId); 1216c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(11, restoredBoxA.mUnreadCount); 1217c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank } 12187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler} 1219