ProviderTests.java revision 41f775bbc731b25854da9f5a80c66a4aa1eb0af9
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 19976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport java.io.File; 20976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport java.io.IOException; 21976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 22976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport java.util.ArrayList; 23976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 2441f775bbc731b25854da9f5a80c66a4aa1eb0af9satokimport com.android.email.activity.AccountFolderList; 2541f775bbc731b25854da9f5a80c66a4aa1eb0af9satokimport com.android.email.provider.EmailContent; 267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Account; 279e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadlerimport com.android.email.provider.EmailContent.AccountColumns; 28976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport com.android.email.provider.EmailContent.Attachment; 297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Body; 307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 3141f775bbc731b25854da9f5a80c66a4aa1eb0af9satokimport com.android.email.provider.EmailContent.MailboxColumns; 327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 33ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport com.android.email.provider.EmailContent.MessageColumns; 347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 35ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentResolver; 367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.ContentUris; 37ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentValues; 387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.Context; 397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.database.Cursor; 407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.net.Uri; 41976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport android.os.Environment; 427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.test.ProviderTestCase2; 437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/** 457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Tests of the Email provider. 467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 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> { 517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailProvider mProvider; 537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Context mMockContext; 547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public ProviderTests() { 567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); 577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 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; 767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Account account2 = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account2); 807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 8141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 8241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static String[] MAILBOX_UNREAD_COUNT_PROJECTION = new String [] { 8341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MailboxColumns.UNREAD_COUNT 8441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok }; 8541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static int MAILBOX_UNREAD_COUNT_COLMUN = 0; 8641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 8741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok /** 8841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * Get the value of the unread count in the mailbox of the account. 8941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * This can be different from the actual number of unread messages in that mailbox. 9041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param accountId 9141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param mailboxId 9241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @return 9341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok */ 9441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private int getUnreadCount(long mailboxId) { 9541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok String text = null; 9641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Cursor c = null; 9741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok try { 9841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c = mMockContext.getContentResolver().query( 9941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Mailbox.CONTENT_URI, 10041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MAILBOX_UNREAD_COUNT_PROJECTION, 10141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok EmailContent.RECORD_ID + "=?", 10241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok new String[] { String.valueOf(mailboxId) }, 10341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok null); 10441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.moveToFirst(); 10541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok text = c.getString(MAILBOX_UNREAD_COUNT_COLMUN); 10641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } finally { 10741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.close(); 10841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 10941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok return Integer.valueOf(text); 11041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 11141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 11241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok public void testUpdateUnreadCount() { 11341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, mMockContext); 11441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok long account1Id = account1.mId; 11541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, false, mMockContext); 11641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok box1.mUnreadCount = 0; 11741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok box1.save(mMockContext); 11841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok long box1Id = box1.mId; 11941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 12041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok false, mMockContext); 12141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message1.mFlagRead = false; 12241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message1.save(mMockContext); 12341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 12441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok false, mMockContext); 12541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message2.mFlagRead = true; 12641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message2.save(mMockContext); 12741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Message message3 = ProviderTestUtils.setupMessage("message3", account1Id, box1Id, false, 12841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok false, mMockContext); 12941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message3.mFlagRead = false; 13041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message3.save(mMockContext); 13141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, false, mMockContext); 13241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok box2.mUnreadCount = 0; 13341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok box2.mType = Mailbox.TYPE_DRAFTS; 13441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok box2.save(mMockContext); 13541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok long box2Id = box2.mId; 13641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Message message4 = ProviderTestUtils.setupMessage("message4", account1Id, box2Id, false, 13741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok false, mMockContext); 13841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message4.mFlagRead = false; 13941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message4.save(mMockContext); 14041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Message message5 = ProviderTestUtils.setupMessage("message5", account1Id, box2Id, false, 14141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok false, mMockContext); 14241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message5.mFlagRead = true; 14341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message5.save(mMockContext); 14441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Message message6 = ProviderTestUtils.setupMessage("message6", account1Id, box2Id, false, 14541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok false, mMockContext); 14641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message6.mFlagRead = false; 14741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok message6.save(mMockContext); 14841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok assertEquals(0, getUnreadCount(box1Id)); 14941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok assertEquals(0, getUnreadCount(box2Id)); 15041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Account.updateUnreadCount(mMockContext, account1Id); 15141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok assertEquals(2, getUnreadCount(box1Id)); 15241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok assertEquals(3, getUnreadCount(box2Id)); 15341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 15441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 1557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: HostAuth tests 1577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple mailbox save/retrieve 1617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxSave() { 16328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, mMockContext); 1647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 16528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, 16628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 1677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 1687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Mailbox box2 = EmailContent.Mailbox.restoreMailboxWithId(mMockContext, box1Id); 1707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 17128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMailboxEqual("testMailboxSave", box1, box2); 1727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 1737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1744119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static String[] expectedAttachmentNames = 175976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] {"attachment1.doc", "attachment2.xls", "attachment3"}; 176976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // The lengths need to be kept in ascending order 1774119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static long[] expectedAttachmentSizes = new long[] {31415L, 97701L, 151213L}; 178976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 1797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple message save/retrieve 1817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 1827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: serverId vs. serverIntId 1837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageSave() { 18528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-save", true, mMockContext); 1867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 18728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 1887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 1897143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a simple message (saved with no body) 19128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 19228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 1937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 1947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message1get = EmailContent.Message.restoreMessageWithId(mMockContext, message1Id); 19528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message1, message1get); 1967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a message saved with a body 1987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Note that it will read back w/o the text & html so we must extract those 19928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 20028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 2017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 2027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String text2 = message2.mText; 2037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String html2 = message2.mHtml; 2047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mText = null; 2057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mHtml = null; 2067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message2get = EmailContent.Message.restoreMessageWithId(mMockContext, message2Id); 20728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message2, message2get); 2087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Now see if there's a body saved with the right stuff 2107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // TODO it might make sense to add a function to restore the body with the message id 2117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Cursor c = null; 2127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler try { 2137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler c = mMockContext.getContentResolver().query( 2147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.Body.CONTENT_URI, 2157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.Body.CONTENT_PROJECTION, 2167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.Body.MESSAGE_KEY + "=?", 2177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler new String[] { 2187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String.valueOf(message2Id) 2197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler }, 2207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler null); 2217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBodies = c.getCount(); 2227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBodies); 2237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler c.moveToFirst(); 2247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Body body2 = EmailContent.getContent(c, Body.class); 2257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals("body text", text2, body2.mTextContent); 2267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals("body html", html2, body2.mHtmlContent); 2277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } finally { 228976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 229976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 230976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 2314119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments and body 232976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Message message3 = ProviderTestUtils.setupMessage("message3", account1Id, box1Id, true, 233976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank false, mMockContext); 234976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank ArrayList<Attachment> atts = new ArrayList<Attachment>(); 235976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < 3; i++) { 2364119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2374119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2384119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 239976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 240976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank message3.mAttachments = atts; 2419e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message3.save(mMockContext); 242976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank long message3Id = message3.mId; 243976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 244976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Now check the attachments; there should be three and they should match name and size 245976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = null; 246976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 247976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Note that there is NO guarantee of the order of returned records in the general case, 248976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 249976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // be kept sorted by size (ascending) for this test to work properly 250976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = mMockContext.getContentResolver().query( 251976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_URI, 252976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_PROJECTION, 253976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.MESSAGE_KEY + "=?", 254976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] { 255976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String.valueOf(message3Id) 256976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank }, 257976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.SIZE); 258976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int numAtts = c.getCount(); 259976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(3, numAtts); 260976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int i = 0; 261976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank while (c.moveToNext()) { 2624119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2634119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message3", atts.get(i), actual); 2644119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler i++; 2654119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2664119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 2674119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 2684119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2694119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2704119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments but no body 2714119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Message message4 = ProviderTestUtils.setupMessage("message4", account1Id, box1Id, false, 2724119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext); 2734119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts = new ArrayList<Attachment>(); 2744119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler for (int i = 0; i < 3; i++) { 2754119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2764119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2774119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 2784119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2794119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler message4.mAttachments = atts; 2809e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message4.save(mMockContext); 2814119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler long message4Id = message4.mId; 2824119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2834119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now check the attachments; there should be three and they should match name and size 2844119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = null; 28541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 2864119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 2874119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note that there is NO guarantee of the order of returned records in the general case, 2884119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 2894119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // be kept sorted by size (ascending) for this test to work properly 2904119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = mMockContext.getContentResolver().query( 2914119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_URI, 2924119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_PROJECTION, 2934119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.MESSAGE_KEY + "=?", 2944119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler new String[] { 2954119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler String.valueOf(message4Id) 2964119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler }, 2974119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.SIZE); 2984119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int numAtts = c.getCount(); 2994119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(3, numAtts); 3004119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int i = 0; 3014119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler while (c.moveToNext()) { 3024119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 3034119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), actual); 304976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank i++; 305976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 306976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 307976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 3087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 3097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 3107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update account 3137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update mailbox 3177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update message 3217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete account 3257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 3267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountDelete() { 32828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-1", true, mMockContext); 3297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 33028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-delete-2", true, mMockContext); 3317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account2Id = account2.mId; 3327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two accounts 3347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 3367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 3387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 3397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one account now 3427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 3447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 3477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts now 3507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 3527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 3537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete mailbox 3567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxDelete() { 35828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete", true, mMockContext); 3597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 36028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 3617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 36228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 3637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box2Id = box2.mId; 3647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MailboxColumns.ACCOUNT_KEY + "=?"; 3667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id) }; 3677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two mailboxes 3697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 3707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 3717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 3737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 3747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one mailbox now 3777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 3787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 3797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id); 3827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no mailboxes now 3857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 3867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 3877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 3887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3897143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete message 3917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 3927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 3937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageDelete() { 39528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mMockContext); 3967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 39728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 3987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 39928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 40028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 4017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 40228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 40328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 4047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 4057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 4077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 4087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 4097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 4117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 4127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 4137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 4157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 4167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 4177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one message now 4197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 4207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numMessages); 4217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 4237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 4247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 4257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no messages now 4277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 4287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 4297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 4307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 432ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test delete synced message 433ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 434ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 435ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 436ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testSyncedMessageDelete() { 43728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("synced-message-delete", true, 43828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 439ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 44028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 441ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 44228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 44328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 444ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 44528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 44628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 447ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 448ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 449ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 450ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 451ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 452ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 453ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 454ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 455ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 456ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 457ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 458ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 459ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure we start with no synced deletions 460ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 461ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 462ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 463ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 464ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete one of them SYNCED 465ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message1Id); 466ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 467ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 468ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's only one message now 469ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 470ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 471ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 472ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one synced deletion now 473ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 474ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 475ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 476ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 477ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete the other one NOT SYNCED 478ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 479ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 480ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 481ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are no messages now 482ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 483ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 484ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 485ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's still one deletion now 486ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 487ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 488ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 489ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 490ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 491ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 492ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test message update 493ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 494ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 495ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 496ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testMessageUpdate() { 49728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-update", true, mMockContext); 498ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 49928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 500ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 50128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 50228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 503ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 50428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 50528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 506ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 507ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentResolver cr = mMockContext.getContentResolver(); 508ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 509ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 510ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 511ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 512ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 513ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 514ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 515ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 516ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 517ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 518ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 519ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the first one 520ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 521ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentValues cv = new ContentValues(); 522ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 523ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 524ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 525ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's no updated message 526ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 527ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 528ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 529ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 530ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck" 531ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message restoredMessage = Message.restoreMessageWithId(mMockContext, message1Id); 532ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 533ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 534ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the second one 535ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id); 536ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv = new ContentValues(); 537ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 538ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 539ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 540ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one updated message 541ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 542ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 543ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 544ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 545ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck", 546ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // as before 547ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler restoredMessage = Message.restoreMessageWithId(mMockContext, message2Id); 548ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 549ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 550ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the original message back from the provider 551ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Cursor c = cr.query(Message.UPDATED_CONTENT_URI, Message.CONTENT_PROJECTION, null, null, 552ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler null); 553ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler try { 554ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertTrue(c.moveToFirst()); 555ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message originalMessage = EmailContent.getContent(c, Message.class); 556ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure this has the original value 557ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from message2", originalMessage.mFrom); 558ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // Should only be one 559ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertFalse(c.moveToNext()); 560ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } finally { 561ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler c.close(); 562ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 563ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 564ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // delete the second message 565ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.delete(ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id), null, null); 566ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 567ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // hey, presto! the change should be gone 568ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 569ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 570ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 571ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 572ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // and there should now be a deleted record 573ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 574ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 575ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 576ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 577ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 578ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 5797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: cascaded delete account 5807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 5817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 5827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 5837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other account, mailbox & messages and confirm the right objects were deleted 5847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteAccount() { 58628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-cascade", true, 58728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 5887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 58928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 5907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 59128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 59228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 59328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 59428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 5957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there is one account, one mailbox, and two messages 5977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 5987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numAccounts); 5997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 6007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 6017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 6027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 6037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // delete the account 6057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 6067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts, mailboxes, or messages 6097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 6107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numAccounts); 6117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 6127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 6137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 6147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 6157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 6167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 6187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test cascaded delete mailbox 6197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 6207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 6217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other mailbox & messages and confirm the right objects were deleted 6227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 6237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteMailbox() { 62428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete-cascade", true, 62528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 6267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 62728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 6287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 62928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 63028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 63128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 63228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 6337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 6357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 6367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 6377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 6397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 6417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the mailbox 6437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 6447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // there should now be zero messages 6477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 6497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 6507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 6527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: Test cascaded delete message 6537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 6547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 6557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 6567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 657976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank /** 658976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * Test that our unique file name algorithm works as expected. Since this test requires an 659976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * SD card, we check the environment first, and return immediately if none is mounted. 660976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * @throws IOException 661976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank */ 662976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank public void testCreateUniqueFile() throws IOException { 663976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Delete existing files, if they exist 664976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 665976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank return; 666976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 667976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 668976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String fileName = "A11achm3n1.doc"; 669976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File uniqueFile = Attachment.createUniqueFile(fileName); 670976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 671976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 672976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 673976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2.doc", uniqueFile.getName()); 674976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 675976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 676976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-3.doc", uniqueFile.getName()); 677976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 678976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 679976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank fileName = "A11achm3n1"; 680976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 681976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 682976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 683976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 684976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2", uniqueFile.getName()); 685976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 686976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 687976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File directory = Environment.getExternalStorageDirectory(); 688976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // These are the files that should be created earlier in the test. Make sure 689976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // they are deleted for the next go-around 690976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String[] fileNames = new String[] {"A11achm3n1.doc", "A11achm3n1-2.doc", "A11achm3n1"}; 691976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int length = fileNames.length; 692976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < length; i++) { 693976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File file = new File(directory, fileNames[i]); 694976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (file.exists()) { 695976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank file.delete(); 696976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 697976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 698976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 699976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 7004119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7014119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler /** 7024119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler * Test retrieving attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 7034119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler */ 7044119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler public void testGetAttachmentByMessageIdUri() { 7054119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7064119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 7074119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1 = ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 7084119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2 = ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 7094119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a3 = ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 7104119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a4 = ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 7114119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7124119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now ask for the attachments of message id=1 7134119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note: Using the "sort by size" trick to bring them back in expected order 7144119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 7154119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Cursor c = mMockContext.getContentResolver().query(uri, Attachment.CONTENT_PROJECTION, 7164119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler null, null, Attachment.SIZE); 7174119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(2, c.getCount()); 7184119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7194119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 7204119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToFirst(); 7214119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1Get = EmailContent.getContent(c, Attachment.class); 7224119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-1", a1, a1Get); 7234119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToNext(); 7244119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2Get = EmailContent.getContent(c, Attachment.class); 7254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-2", a2, a2Get); 7264119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 7274119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 7284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 7294119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 73054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 73154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler /** 73254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * Tests of default account behavior 73354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 73454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 1. Simple set/get 73554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 2. Moving default between 3 accounts 73654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 3. Delete default, make sure another becomes default 73754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler */ 73854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler public void testSetGetDefaultAccount() { 73954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // There should be no default account if there are no accounts 74054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long defaultAccountId = Account.getDefaultAccountId(mMockContext); 74154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler assertEquals(-1, defaultAccountId); 74254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 74354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-default-1", true, mMockContext); 74454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account1Id = account1.mId; 74554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-default-2", true, mMockContext); 74654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account2Id = account2.mId; 74754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account3 = ProviderTestUtils.setupAccount("account-default-3", true, mMockContext); 74854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account3Id = account3.mId; 74954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 7509e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // With three accounts, but none marked default, confirm that some default account 7519e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // is returned. Which one is undefined here. 75254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 7539e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertTrue(defaultAccountId == account1Id 7549e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account2Id 7559e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account3Id); 75654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 7579e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler updateIsDefault(account1, true); 75854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 7599e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(account1Id, defaultAccountId); 76054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 761531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account2, true); 762531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 763531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 764531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank 765531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account3, true); 766531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 767531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 76854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 76954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now delete a non-default account and confirm no change 77054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 77154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 77254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 773531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 774531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 77554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 77654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now confirm deleting the default account and it switches to another one 77754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account3Id); 77854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 77954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 780531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 781531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 7829e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler 7839e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // Now delete the final account and confirm there are no default accounts again 7849e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 7859e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 7869e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler 78754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 7889e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(-1, defaultAccountId); 78954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler } 79054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 7919e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler private void updateIsDefault(Account account, boolean newState) { 7929e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.setDefaultAccount(newState); 7939e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler ContentValues cv = new ContentValues(); 7949e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler cv.put(AccountColumns.IS_DEFAULT, account.mIsDefault); 7959e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.update(mMockContext, cv); 7969e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler } 7977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler} 798