ProviderTests.java revision 4a8c70c09be3914ded18031b4cca5a6d867de0d3
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; 227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Body; 239627d014e16235eadf981b9165807dc72a14a383Mihai Predaimport com.android.email.provider.EmailContent.BodyColumns; 247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 2541f775bbc731b25854da9f5a80c66a4aa1eb0af9satokimport com.android.email.provider.EmailContent.MailboxColumns; 267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 27ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport com.android.email.provider.EmailContent.MessageColumns; 287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 29ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentResolver; 307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.ContentUris; 31ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentValues; 327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.Context; 337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.database.Cursor; 347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.net.Uri; 354a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadlerimport android.os.Bundle; 36976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport android.os.Environment; 374a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadlerimport android.os.Parcel; 387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.test.ProviderTestCase2; 397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 40758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.File; 41758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.IOException; 42758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.util.ArrayList; 43758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/** 457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Tests of the Email provider. 46758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You can run this entire test case with: 487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * runtest -c com.android.email.provider.ProviderTests email 497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpublic class ProviderTests extends ProviderTestCase2<EmailProvider> { 51758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailProvider mProvider; 537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Context mMockContext; 547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public ProviderTests() { 567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); 577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 58758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void setUp() throws Exception { 617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.setUp(); 627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext = getMockContext(); 637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void tearDown() throws Exception { 677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.tearDown(); 687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple account save/retrieve 727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountSave() { 7428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-save", true, mMockContext); 757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 76758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Account account2 = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 78758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 7928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account2); 807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 8141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 824a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler /** 834a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler * Simple test of account parceling. The rather tortuous path is to ensure that the 844a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler * account is really flattened all the way down to a parcel and back. 854a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler */ 864a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler public void testAccountParcel() { 874a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Account account1 = ProviderTestUtils.setupAccount("parcel", false, mMockContext); 884a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Bundle b = new Bundle(); 894a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b.putParcelable("account", account1); 904a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Parcel p = Parcel.obtain(); 914a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b.writeToParcel(p, 0); 924a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler p.setDataPosition(0); // rewind it for reading 934a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Bundle b2 = new Bundle(Account.class.getClassLoader()); 944a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b2.readFromParcel(p); 954a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Account account2 = (Account) b2.getParcelable("account"); 964a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler p.recycle(); 974a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler 984a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler ProviderTestUtils.assertAccountEqual("testAccountParcel", account1, account2); 994a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler } 1004a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler 10141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static String[] MAILBOX_UNREAD_COUNT_PROJECTION = new String [] { 10241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MailboxColumns.UNREAD_COUNT 10341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok }; 10441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static int MAILBOX_UNREAD_COUNT_COLMUN = 0; 10541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 10641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok /** 10741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * Get the value of the unread count in the mailbox of the account. 10841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * This can be different from the actual number of unread messages in that mailbox. 10941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param accountId 11041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param mailboxId 11141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @return 11241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok */ 11341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private int getUnreadCount(long mailboxId) { 11441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok String text = null; 11541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Cursor c = null; 11641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok try { 11741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c = mMockContext.getContentResolver().query( 11841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Mailbox.CONTENT_URI, 11941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MAILBOX_UNREAD_COUNT_PROJECTION, 12041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok EmailContent.RECORD_ID + "=?", 12141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok new String[] { String.valueOf(mailboxId) }, 12241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok null); 12341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.moveToFirst(); 12441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok text = c.getString(MAILBOX_UNREAD_COUNT_COLMUN); 12541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } finally { 12641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.close(); 12741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 12841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok return Integer.valueOf(text); 12941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 13041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 1317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: HostAuth tests 1337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 134758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple mailbox save/retrieve 1377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxSave() { 13928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, mMockContext); 1407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 14128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, 14228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 1437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 144758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Mailbox box2 = EmailContent.Mailbox.restoreMailboxWithId(mMockContext, box1Id); 146758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 14728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMailboxEqual("testMailboxSave", box1, box2); 1487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 149758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1504119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static String[] expectedAttachmentNames = 151976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] {"attachment1.doc", "attachment2.xls", "attachment3"}; 152976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // The lengths need to be kept in ascending order 1534119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static long[] expectedAttachmentSizes = new long[] {31415L, 97701L, 151213L}; 154976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 155fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /* 156fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Returns null if the message has no body. 157fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 158fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda private Body loadBodyForMessageId(long messageId) { 159fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 160fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda try { 161fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c = mMockContext.getContentResolver().query( 162fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_URI, 163fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_PROJECTION, 164fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.MESSAGE_KEY + "=?", 165fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda new String[] {String.valueOf(messageId)}, 166fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda null); 167fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda int numBodies = c.getCount(); 168fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertTrue("at most one body", numBodies < 2); 169fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda return c.moveToFirst() ? EmailContent.getContent(c, Body.class) : null; 170fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } finally { 171fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c.close(); 172fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 173fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 174fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 1757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple message save/retrieve 177758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 1787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: serverId vs. serverIntId 1797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageSave() { 18128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-save", true, mMockContext); 1827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 18328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 1847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 1857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a simple message (saved with no body) 18728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 18828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 1897143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 1907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message1get = EmailContent.Message.restoreMessageWithId(mMockContext, message1Id); 19128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message1, message1get); 1927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a message saved with a body 1947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Note that it will read back w/o the text & html so we must extract those 19528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 19628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 1977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 1987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String text2 = message2.mText; 1997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String html2 = message2.mHtml; 2007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mText = null; 2017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mHtml = null; 2027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message2get = EmailContent.Message.restoreMessageWithId(mMockContext, message2Id); 20328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message2, message2get); 204758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Now see if there's a body saved with the right stuff 206fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Body body2 = loadBodyForMessageId(message2Id); 207fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body text", text2, body2.mTextContent); 208fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body html", html2, body2.mHtmlContent); 209976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 2104119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments and body 211976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Message message3 = ProviderTestUtils.setupMessage("message3", account1Id, box1Id, true, 212976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank false, mMockContext); 213976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank ArrayList<Attachment> atts = new ArrayList<Attachment>(); 214976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < 3; i++) { 2154119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2164119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2174119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 218976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 219976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank message3.mAttachments = atts; 2209e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message3.save(mMockContext); 221976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank long message3Id = message3.mId; 222976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 223976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Now check the attachments; there should be three and they should match name and size 224fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 225976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 226976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Note that there is NO guarantee of the order of returned records in the general case, 227976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 228976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // be kept sorted by size (ascending) for this test to work properly 229976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = mMockContext.getContentResolver().query( 230976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_URI, 231976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_PROJECTION, 232976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.MESSAGE_KEY + "=?", 233976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] { 234976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String.valueOf(message3Id) 235976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank }, 236976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.SIZE); 237976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int numAtts = c.getCount(); 238976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(3, numAtts); 239976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int i = 0; 240976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank while (c.moveToNext()) { 2414119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2424119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message3", atts.get(i), actual); 2434119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler i++; 2444119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2454119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 2464119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 2474119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2484119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2494119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments but no body 2504119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Message message4 = ProviderTestUtils.setupMessage("message4", account1Id, box1Id, false, 2514119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext); 2524119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts = new ArrayList<Attachment>(); 2534119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler for (int i = 0; i < 3; i++) { 2544119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2554119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2564119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 2574119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2584119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler message4.mAttachments = atts; 2599e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message4.save(mMockContext); 2604119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler long message4Id = message4.mId; 2614119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2624119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now check the attachments; there should be three and they should match name and size 2634119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = null; 26441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 2654119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 2664119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note that there is NO guarantee of the order of returned records in the general case, 2674119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 2684119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // be kept sorted by size (ascending) for this test to work properly 2694119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = mMockContext.getContentResolver().query( 2704119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_URI, 2714119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_PROJECTION, 2724119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.MESSAGE_KEY + "=?", 2734119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler new String[] { 2744119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler String.valueOf(message4Id) 2754119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler }, 2764119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.SIZE); 2774119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int numAtts = c.getCount(); 2784119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(3, numAtts); 2794119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int i = 0; 2804119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler while (c.moveToNext()) { 2814119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2824119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), actual); 283976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank i++; 284976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 285976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 286976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 2877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 2887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 289758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update account 2927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 293758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update mailbox 2967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 297758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update message 3007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 301758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete account 3047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 3057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountDelete() { 30728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-1", true, mMockContext); 3087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 30928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-delete-2", true, mMockContext); 3107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account2Id = account2.mId; 3117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two accounts 3137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 3157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 3177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 3187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one account now 3217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 3237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 3267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts now 3297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 3317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 332758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3349627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for Body.lookupBodyIdWithMessageId() 3359627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Verifies that: 3369627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - for a message without body, -1 is returned. 3379627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - for a mesage with body, the id matches the one from loadBodyForMessageId. 3389627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 3399627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testLookupBodyIdWithMessageId() { 3409627d014e16235eadf981b9165807dc72a14a383Mihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 3419627d014e16235eadf981b9165807dc72a14a383Mihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 3429627d014e16235eadf981b9165807dc72a14a383Mihai Preda long account1Id = account1.mId; 3439627d014e16235eadf981b9165807dc72a14a383Mihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 3449627d014e16235eadf981b9165807dc72a14a383Mihai Preda long box1Id = box1.mId; 3459627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3469627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 1. create message with no body, check that returned bodyId is -1 3479627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 3489627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 3499627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message1Id = message1.mId; 3509627d014e16235eadf981b9165807dc72a14a383Mihai Preda long bodyId1 = Body.lookupBodyIdWithMessageId(resolver, message1Id); 3519627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(bodyId1, -1); 3529627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3539627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 2. create message with body, check that returned bodyId is correct 3549627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 3559627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 3569627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message2Id = message2.mId; 3579627d014e16235eadf981b9165807dc72a14a383Mihai Preda long bodyId2 = Body.lookupBodyIdWithMessageId(resolver, message2Id); 3589627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body = loadBodyForMessageId(message2Id); 3599627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body); 3609627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body.mId, bodyId2); 3619627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 3629627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3639627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 3649627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for Body.updateBodyWithMessageId(). 3659627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 1. - create message without body, 3669627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - update its body (set TEXT_CONTENT) 3679627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - check correct updated body is read back 3689627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 3699627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 2. - create message with body, 3709627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - update body (set TEXT_CONTENT) 3719627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - check correct updated body is read back 3729627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 3739627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testUpdateBodyWithMessageId() { 3749627d014e16235eadf981b9165807dc72a14a383Mihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 3759627d014e16235eadf981b9165807dc72a14a383Mihai Preda long account1Id = account1.mId; 3769627d014e16235eadf981b9165807dc72a14a383Mihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 3779627d014e16235eadf981b9165807dc72a14a383Mihai Preda long box1Id = box1.mId; 3789627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3799627d014e16235eadf981b9165807dc72a14a383Mihai Preda final String textContent = "foobar some odd text"; 3809627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3819627d014e16235eadf981b9165807dc72a14a383Mihai Preda ContentValues values = new ContentValues(); 3829627d014e16235eadf981b9165807dc72a14a383Mihai Preda values.put(BodyColumns.TEXT_CONTENT, textContent); 3839627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3849627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 1 3859627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 3869627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 3879627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message1Id = message1.mId; 3889627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body1 = loadBodyForMessageId(message1Id); 3899627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNull(body1); 3909627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body.updateBodyWithMessageId(mMockContext, message1Id, values); 3919627d014e16235eadf981b9165807dc72a14a383Mihai Preda body1 = loadBodyForMessageId(message1Id); 3929627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body1); 3939627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body1.mTextContent, textContent); 3949627d014e16235eadf981b9165807dc72a14a383Mihai Preda 3959627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 2 3969627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 3979627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 3989627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message2Id = message2.mId; 3999627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body2 = loadBodyForMessageId(message2Id); 4009627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body2); 4019627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertTrue(!body2.mTextContent.equals(textContent)); 4029627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body.updateBodyWithMessageId(mMockContext, message2Id, values); 4039627d014e16235eadf981b9165807dc72a14a383Mihai Preda body2 = loadBodyForMessageId(message1Id); 4049627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body2); 4059627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body2.mTextContent, textContent); 4069627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 4079627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4089627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 409fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete body. 410fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 411fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. The body has _id 1 and messageKey 2). 412fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 413fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. verify that body for message 2 has not been deleted. 414fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. delete message 2, verify body is deleted. 415fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 416fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteBody() { 417fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 418fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 419fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and mailboxes 420fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 421fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 422fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 423fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 424fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 425fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 426fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 427fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 428fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 429fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 430fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 431fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 432fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 433fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 434fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // verify body is there 435fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 436fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 437fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 438fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 439fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 440fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. verify body for second message wasn't deleted 441fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 442fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 443fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. delete second message, check its body is deleted 444fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message2Id), null, null); 445fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNull(loadBodyForMessageId(message2Id)); 446fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 447fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 448fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 449fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete orphan bodies. 450fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 451fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. Body has _id 1 and messageKey 2). 452fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 453fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. delete some other mailbox -- this triggers delete orphan bodies. 454fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. verify that body for message 2 has not been deleted. 455fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 456fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteOrphanBodies() { 457fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 458fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 459fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and twa mailboxes 460fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 461fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 462fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 463fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 464fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 465fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box2Id = box2.mId; 466fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 467fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 468fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 469fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 470fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 471fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 472fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 473fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 474fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 475fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 476fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda //verify body is there 477fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Body body = loadBodyForMessageId(message2Id); 478fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 479fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 480fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 481fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 482fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 483fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. delete some mailbox (because it triggers "delete orphan bodies") 484fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id), null, null); 485fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 486fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. verify body for second message wasn't deleted during "delete orphan bodies" 487fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 488fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 489fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 490fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 4917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete mailbox 4927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 4937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxDelete() { 49428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete", true, mMockContext); 4957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 49628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 4977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 49828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 4997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box2Id = box2.mId; 500758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 5017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MailboxColumns.ACCOUNT_KEY + "=?"; 5027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id) }; 5037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two mailboxes 5057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 5067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 5077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 5097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 5107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one mailbox now 5137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 5147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 5157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 5177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id); 5187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no mailboxes now 5217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 5227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 5237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 524758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 5257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 5267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete message 5277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 5287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 5297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageDelete() { 53128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mMockContext); 5327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 53328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 5347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 53528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 53628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 5377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 53828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 53928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 5407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 5417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 5437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 5447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 5457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 5477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 5487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 5497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 5517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 5527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one message now 5557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 5567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numMessages); 5577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 5597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 5607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no messages now 5637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 5647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 5657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 566758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 5677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 568ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test delete synced message 569ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 570ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 571ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 572ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testSyncedMessageDelete() { 57328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("synced-message-delete", true, 57428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 575ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 57628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 577ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 57828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 57928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 580ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 58128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 58228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 583ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 584ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 585ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 586ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 587ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 588ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 589ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 590ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 591ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 592ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 593ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 594ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 595ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure we start with no synced deletions 596ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 597ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 598ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 599ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 600ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete one of them SYNCED 601ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message1Id); 602ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 603ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 604ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's only one message now 605ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 606ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 607ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 608ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one synced deletion now 609ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 610ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 611ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 612ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 613ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete the other one NOT SYNCED 614ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 615ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 616ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 617ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are no messages now 618ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 619ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 620ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 621ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's still one deletion now 622ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 623ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 624ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 625ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 626ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 627ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 628ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test message update 629ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 630ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 631ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 632ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testMessageUpdate() { 63328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-update", true, mMockContext); 634ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 63528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 636ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 63728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 63828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 639ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 64028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 64128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 642ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 643ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentResolver cr = mMockContext.getContentResolver(); 644ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 645ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 646ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 647ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 648ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 649ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 650ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 651ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 652ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 653ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 654ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 655ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the first one 656ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 657ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentValues cv = new ContentValues(); 658ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 659ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 660ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 661ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's no updated message 662ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 663ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 664ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 665ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 666ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck" 667ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message restoredMessage = Message.restoreMessageWithId(mMockContext, message1Id); 668ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 669ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 670ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the second one 671ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id); 672ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv = new ContentValues(); 673ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 674ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 675ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 676ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one updated message 677ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 678ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 679ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 680ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 681ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck", 682ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // as before 683ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler restoredMessage = Message.restoreMessageWithId(mMockContext, message2Id); 684ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 685ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 686ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the original message back from the provider 687ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Cursor c = cr.query(Message.UPDATED_CONTENT_URI, Message.CONTENT_PROJECTION, null, null, 688ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler null); 689ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler try { 690ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertTrue(c.moveToFirst()); 691ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message originalMessage = EmailContent.getContent(c, Message.class); 692ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure this has the original value 693ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from message2", originalMessage.mFrom); 694ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // Should only be one 695ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertFalse(c.moveToNext()); 696ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } finally { 697ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler c.close(); 698ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 699ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 700ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // delete the second message 701ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.delete(ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id), null, null); 702ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 703ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // hey, presto! the change should be gone 704ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 705ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 706ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 707ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 708ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // and there should now be a deleted record 709ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 710ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 711ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 712ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 713ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 714ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 7157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: cascaded delete account 7167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 7177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 7187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 7197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other account, mailbox & messages and confirm the right objects were deleted 7207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 7217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteAccount() { 72228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-cascade", true, 72328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 7247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 72528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 7267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 72728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 72828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 72928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 73028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 7317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there is one account, one mailbox, and two messages 7337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 7347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numAccounts); 7357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 7367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 7377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 7387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 7397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // delete the account 7417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 7427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 7437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts, mailboxes, or messages 7457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 7467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numAccounts); 7477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 7487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 7497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 7507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 7517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 752758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 7537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 7547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test cascaded delete mailbox 7557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 7567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 7577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other mailbox & messages and confirm the right objects were deleted 7587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 7597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteMailbox() { 76028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete-cascade", true, 76128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 7627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 76328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 7647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 76528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 76628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 76728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 76828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 7697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 7717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 7727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 7737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 7757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 7767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 777758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 7787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the mailbox 7797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 7807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 781758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 7827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // there should now be zero messages 7837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 7847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 7857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 786758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 7877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 7887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: Test cascaded delete message 7897143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 7907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 7917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 7927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 793976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank /** 794976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * Test that our unique file name algorithm works as expected. Since this test requires an 795976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * SD card, we check the environment first, and return immediately if none is mounted. 796976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * @throws IOException 797976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank */ 798976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank public void testCreateUniqueFile() throws IOException { 799976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Delete existing files, if they exist 800976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 801976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank return; 802976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 803976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 804976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String fileName = "A11achm3n1.doc"; 805976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File uniqueFile = Attachment.createUniqueFile(fileName); 806976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 807976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 808976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 809976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2.doc", uniqueFile.getName()); 810976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 811976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 812976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-3.doc", uniqueFile.getName()); 813976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 814976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 815976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank fileName = "A11achm3n1"; 816976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 817976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 818976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 819976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 820976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2", uniqueFile.getName()); 821976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 822976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 823976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File directory = Environment.getExternalStorageDirectory(); 824976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // These are the files that should be created earlier in the test. Make sure 825976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // they are deleted for the next go-around 826976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String[] fileNames = new String[] {"A11achm3n1.doc", "A11achm3n1-2.doc", "A11achm3n1"}; 827976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int length = fileNames.length; 828976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < length; i++) { 829976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File file = new File(directory, fileNames[i]); 830976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (file.exists()) { 831976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank file.delete(); 832976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 833976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 834976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 835976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 8364119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 8374119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler /** 8384119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler * Test retrieving attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 8394119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler */ 8404119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler public void testGetAttachmentByMessageIdUri() { 8414119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 8424119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 8434119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1 = ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 8444119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2 = ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 845758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 846758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 8474119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 8484119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now ask for the attachments of message id=1 8494119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note: Using the "sort by size" trick to bring them back in expected order 8504119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 8514119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Cursor c = mMockContext.getContentResolver().query(uri, Attachment.CONTENT_PROJECTION, 8524119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler null, null, Attachment.SIZE); 8534119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(2, c.getCount()); 8544119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 8554119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 8564119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToFirst(); 8574119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1Get = EmailContent.getContent(c, Attachment.class); 8584119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-1", a1, a1Get); 8594119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToNext(); 8604119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2Get = EmailContent.getContent(c, Attachment.class); 8614119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-2", a2, a2Get); 8624119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 8634119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 8644119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 8654119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 86654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 86754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler /** 86854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * Tests of default account behavior 869758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 87054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 1. Simple set/get 87154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 2. Moving default between 3 accounts 87254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 3. Delete default, make sure another becomes default 87354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler */ 87454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler public void testSetGetDefaultAccount() { 87554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // There should be no default account if there are no accounts 87654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long defaultAccountId = Account.getDefaultAccountId(mMockContext); 87754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler assertEquals(-1, defaultAccountId); 87854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 87954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-default-1", true, mMockContext); 88054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account1Id = account1.mId; 88154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-default-2", true, mMockContext); 88254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account2Id = account2.mId; 88354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account3 = ProviderTestUtils.setupAccount("account-default-3", true, mMockContext); 88454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account3Id = account3.mId; 88554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 8869e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // With three accounts, but none marked default, confirm that some default account 8879e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // is returned. Which one is undefined here. 88854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 8899e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertTrue(defaultAccountId == account1Id 8909e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account2Id 8919e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account3Id); 89254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 8939e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler updateIsDefault(account1, true); 89454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 8959e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(account1Id, defaultAccountId); 89654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 897531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account2, true); 898531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 899531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 900531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank 901531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account3, true); 902531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 903531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 90454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 90554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now delete a non-default account and confirm no change 90654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 90754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 90854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 909531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 910531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 91154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 91254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now confirm deleting the default account and it switches to another one 91354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account3Id); 91454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 91554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 916531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 917531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 918758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 9199e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // Now delete the final account and confirm there are no default accounts again 9209e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 9219e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 9229e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler 92354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 9249e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(-1, defaultAccountId); 92554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler } 92654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 9279e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler private void updateIsDefault(Account account, boolean newState) { 9289e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.setDefaultAccount(newState); 9299e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler ContentValues cv = new ContentValues(); 9309e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler cv.put(AccountColumns.IS_DEFAULT, account.mIsDefault); 9319e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.update(mMockContext, cv); 9329e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler } 933758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 934758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public static Message setupUnreadMessage(String name, long accountId, long mailboxId, 935758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank boolean addBody, boolean saveIt, Context context) { 936758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message msg = 937758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupMessage(name, accountId, mailboxId, addBody, false, context); 938758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.mFlagRead = false; 939758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank if (saveIt) { 940758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.save(context); 941758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 942758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank return msg; 943758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 944758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 945758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public void testUnreadCountTriggers() { 946758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Start with one account and three mailboxes 947758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Account account = ProviderTestUtils.setupAccount("triggers", true, mMockContext); 948758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxA = ProviderTestUtils.setupMailbox("boxA", account.mId, true, mMockContext); 949758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxB = ProviderTestUtils.setupMailbox("boxB", account.mId, true, mMockContext); 950758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxC = ProviderTestUtils.setupMailbox("boxC", account.mId, true, mMockContext); 951758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 952758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure there are no unreads 953758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 954758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 955758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxC.mId)); 956758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 957758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Create 4 unread messages (only 3 named) in boxA 958758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message1 = setupUnreadMessage("message1", account.mId, boxA.mId, 959758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 960758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message2= setupUnreadMessage("message2", account.mId, boxA.mId, 961758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 962758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message3 = setupUnreadMessage("message3", account.mId, boxA.mId, 963758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 964758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank setupUnreadMessage("message4", account.mId, boxC.mId, false, true, mMockContext); 965758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 966758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure the unreads are where we expect them 967758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(3, getUnreadCount(boxA.mId)); 968758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 969758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 970758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 971758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // After deleting message 1, the count in box A should be decremented (to 2) 972758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentResolver cr = mMockContext.getContentResolver(); 973758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1.mId); 974758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.delete(uri, null, null); 975758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxA.mId)); 976758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 977758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 978758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 979758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 2 to box B, leaving 1 in box A and 1 in box B 980758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message2.mMailboxKey = boxB.mId; 981758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentValues cv = new ContentValues(); 982758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxB.mId); 983758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message2.mId), cv, null, null); 984758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxA.mId)); 985758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 986758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 987758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 988758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 (from box A) read, leaving 0 in box A 989758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 990758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 1); 991758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 992758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 993758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 994758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 995758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 996758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 3 to box C; should be no change (it's read) 997758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message3.mMailboxKey = boxC.mId; 998758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 999758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxC.mId); 1000758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1001758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1002758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1003758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1004758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1005758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 unread; it's now in box C, so that box's count should go up to 3 1006758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 1007758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 0); 1008758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1009758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1010758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1011758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxC.mId)); 1012758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 10139627d014e16235eadf981b9165807dc72a14a383Mihai Preda 10149627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 10159627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for EmailProvider.createIndex(). 10169627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Check that it returns exacly the same string as the one used previously for index creation. 10179627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 10189627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testCreateIndex() { 10199627d014e16235eadf981b9165807dc72a14a383Mihai Preda String oldStr = "create index message_" + MessageColumns.TIMESTAMP 10209627d014e16235eadf981b9165807dc72a14a383Mihai Preda + " on " + Message.TABLE_NAME + " (" + MessageColumns.TIMESTAMP + ");"; 10219627d014e16235eadf981b9165807dc72a14a383Mihai Preda String newStr = EmailProvider.createIndex(Message.TABLE_NAME, MessageColumns.TIMESTAMP); 10229627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(newStr, oldStr); 10239627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 10247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler} 1025