ProviderTests.java revision fb7974f5bfb6275fb856b0f7ff386ef10680c83a
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; 237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 2441f775bbc731b25854da9f5a80c66a4aa1eb0af9satokimport com.android.email.provider.EmailContent.MailboxColumns; 257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 26ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport com.android.email.provider.EmailContent.MessageColumns; 277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 28ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentResolver; 297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.ContentUris; 30ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentValues; 317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.Context; 327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.database.Cursor; 337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.net.Uri; 34976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport android.os.Environment; 357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.test.ProviderTestCase2; 367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 37758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.File; 38758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.IOException; 39758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.util.ArrayList; 40758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/** 427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Tests of the Email provider. 43758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You can run this entire test case with: 457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * runtest -c com.android.email.provider.ProviderTests email 467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpublic class ProviderTests extends ProviderTestCase2<EmailProvider> { 48758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailProvider mProvider; 507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Context mMockContext; 517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public ProviderTests() { 537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); 547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 55758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void setUp() throws Exception { 587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.setUp(); 597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext = getMockContext(); 607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void tearDown() throws Exception { 647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.tearDown(); 657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple account save/retrieve 697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountSave() { 7128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-save", true, mMockContext); 727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 73758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Account account2 = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 75758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 7628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account2); 777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 7841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 7941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static String[] MAILBOX_UNREAD_COUNT_PROJECTION = new String [] { 8041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MailboxColumns.UNREAD_COUNT 8141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok }; 8241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static int MAILBOX_UNREAD_COUNT_COLMUN = 0; 8341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 8441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok /** 8541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * Get the value of the unread count in the mailbox of the account. 8641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * This can be different from the actual number of unread messages in that mailbox. 8741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param accountId 8841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param mailboxId 8941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @return 9041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok */ 9141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private int getUnreadCount(long mailboxId) { 9241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok String text = null; 9341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Cursor c = null; 9441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok try { 9541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c = mMockContext.getContentResolver().query( 9641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Mailbox.CONTENT_URI, 9741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MAILBOX_UNREAD_COUNT_PROJECTION, 9841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok EmailContent.RECORD_ID + "=?", 9941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok new String[] { String.valueOf(mailboxId) }, 10041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok null); 10141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.moveToFirst(); 10241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok text = c.getString(MAILBOX_UNREAD_COUNT_COLMUN); 10341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } finally { 10441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.close(); 10541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 10641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok return Integer.valueOf(text); 10741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 10841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 1097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: HostAuth tests 1117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 112758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple mailbox save/retrieve 1157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxSave() { 11728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, mMockContext); 1187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 11928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, 12028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 1217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 122758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Mailbox box2 = EmailContent.Mailbox.restoreMailboxWithId(mMockContext, box1Id); 124758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 12528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMailboxEqual("testMailboxSave", box1, box2); 1267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 127758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static String[] expectedAttachmentNames = 129976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] {"attachment1.doc", "attachment2.xls", "attachment3"}; 130976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // The lengths need to be kept in ascending order 1314119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static long[] expectedAttachmentSizes = new long[] {31415L, 97701L, 151213L}; 132976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 133fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /* 134fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Returns null if the message has no body. 135fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 136fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda private Body loadBodyForMessageId(long messageId) { 137fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 138fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda try { 139fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c = mMockContext.getContentResolver().query( 140fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_URI, 141fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_PROJECTION, 142fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.MESSAGE_KEY + "=?", 143fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda new String[] {String.valueOf(messageId)}, 144fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda null); 145fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda int numBodies = c.getCount(); 146fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertTrue("at most one body", numBodies < 2); 147fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda return c.moveToFirst() ? EmailContent.getContent(c, Body.class) : null; 148fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } finally { 149fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c.close(); 150fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 151fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 152fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 1537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple message save/retrieve 155758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 1567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: serverId vs. serverIntId 1577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageSave() { 15928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-save", true, mMockContext); 1607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 16128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 1627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 1637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a simple message (saved with no body) 16528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 16628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 1677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 1687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message1get = EmailContent.Message.restoreMessageWithId(mMockContext, message1Id); 16928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message1, message1get); 1707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a message saved with a body 1727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Note that it will read back w/o the text & html so we must extract those 17328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 17428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 1757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 1767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String text2 = message2.mText; 1777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String html2 = message2.mHtml; 1787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mText = null; 1797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mHtml = null; 1807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message2get = EmailContent.Message.restoreMessageWithId(mMockContext, message2Id); 18128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message2, message2get); 182758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Now see if there's a body saved with the right stuff 184fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Body body2 = loadBodyForMessageId(message2Id); 185fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body text", text2, body2.mTextContent); 186fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body html", html2, body2.mHtmlContent); 187976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 1884119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments and body 189976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Message message3 = ProviderTestUtils.setupMessage("message3", account1Id, box1Id, true, 190976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank false, mMockContext); 191976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank ArrayList<Attachment> atts = new ArrayList<Attachment>(); 192976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < 3; i++) { 1934119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 1944119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 1954119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 196976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 197976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank message3.mAttachments = atts; 1989e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message3.save(mMockContext); 199976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank long message3Id = message3.mId; 200976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 201976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Now check the attachments; there should be three and they should match name and size 202fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 203976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 204976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Note that there is NO guarantee of the order of returned records in the general case, 205976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 206976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // be kept sorted by size (ascending) for this test to work properly 207976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = mMockContext.getContentResolver().query( 208976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_URI, 209976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_PROJECTION, 210976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.MESSAGE_KEY + "=?", 211976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] { 212976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String.valueOf(message3Id) 213976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank }, 214976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.SIZE); 215976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int numAtts = c.getCount(); 216976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(3, numAtts); 217976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int i = 0; 218976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank while (c.moveToNext()) { 2194119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2204119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message3", atts.get(i), actual); 2214119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler i++; 2224119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2234119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 2244119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 2254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2264119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2274119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments but no body 2284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Message message4 = ProviderTestUtils.setupMessage("message4", account1Id, box1Id, false, 2294119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext); 2304119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts = new ArrayList<Attachment>(); 2314119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler for (int i = 0; i < 3; i++) { 2324119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2334119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2344119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 2354119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2364119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler message4.mAttachments = atts; 2379e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message4.save(mMockContext); 2384119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler long message4Id = message4.mId; 2394119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2404119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now check the attachments; there should be three and they should match name and size 2414119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = null; 24241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 2434119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 2444119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note that there is NO guarantee of the order of returned records in the general case, 2454119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 2464119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // be kept sorted by size (ascending) for this test to work properly 2474119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = mMockContext.getContentResolver().query( 2484119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_URI, 2494119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_PROJECTION, 2504119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.MESSAGE_KEY + "=?", 2514119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler new String[] { 2524119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler String.valueOf(message4Id) 2534119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler }, 2544119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.SIZE); 2554119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int numAtts = c.getCount(); 2564119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(3, numAtts); 2574119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int i = 0; 2584119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler while (c.moveToNext()) { 2594119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2604119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), actual); 261976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank i++; 262976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 263976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 264976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 2657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 2667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 267758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update account 2707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 271758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update mailbox 2747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 275758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update message 2787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 279758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete account 2827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 2837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountDelete() { 28528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-1", true, mMockContext); 2867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 28728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-delete-2", true, mMockContext); 2887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account2Id = account2.mId; 2897143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two accounts 2917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 2927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 2937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 2957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 2967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 2977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one account now 2997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 3017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 3047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts now 3077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 3097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 310758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 312fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete body. 313fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 314fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. The body has _id 1 and messageKey 2). 315fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 316fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. verify that body for message 2 has not been deleted. 317fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. delete message 2, verify body is deleted. 318fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 319fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteBody() { 320fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 321fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 322fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and mailboxes 323fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 324fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 325fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 326fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 327fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 328fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 329fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 330fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 331fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 332fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 333fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 334fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 335fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 336fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 337fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // verify body is there 338fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 339fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 340fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 341fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 342fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 343fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. verify body for second message wasn't deleted 344fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 345fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 346fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. delete second message, check its body is deleted 347fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message2Id), null, null); 348fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNull(loadBodyForMessageId(message2Id)); 349fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 350fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 351fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 352fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete orphan bodies. 353fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 354fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. Body has _id 1 and messageKey 2). 355fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 356fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. delete some other mailbox -- this triggers delete orphan bodies. 357fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. verify that body for message 2 has not been deleted. 358fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 359fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteOrphanBodies() { 360fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 361fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 362fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and twa mailboxes 363fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 364fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 365fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 366fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 367fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 368fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box2Id = box2.mId; 369fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 370fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 371fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 372fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 373fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 374fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 375fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 376fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 377fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 378fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 379fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda //verify body is there 380fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Body body = loadBodyForMessageId(message2Id); 381fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 382fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 383fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 384fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 385fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 386fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. delete some mailbox (because it triggers "delete orphan bodies") 387fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id), null, null); 388fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 389fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. verify body for second message wasn't deleted during "delete orphan bodies" 390fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 391fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 392fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 393fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 3947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete mailbox 3957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxDelete() { 39728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete", true, mMockContext); 3987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 39928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 4007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 40128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 4027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box2Id = box2.mId; 403758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 4047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MailboxColumns.ACCOUNT_KEY + "=?"; 4057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id) }; 4067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two mailboxes 4087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 4097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 4107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 4127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 4137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 4147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one mailbox now 4167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 4177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 4187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 4207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id); 4217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 4227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no mailboxes now 4247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 4257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 4267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 427758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 4287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 4297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete message 4307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 4317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 4327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 4337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageDelete() { 43428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mMockContext); 4357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 43628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 4377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 43828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 43928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 4407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 44128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 44228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 4437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 4447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 4467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 4477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 4487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 4507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 4517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 4527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 4547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 4557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 4567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one message now 4587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 4597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numMessages); 4607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 4627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 4637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 4647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 4657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no messages now 4667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 4677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 4687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 469758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 4707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 471ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test delete synced message 472ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 473ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 474ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 475ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testSyncedMessageDelete() { 47628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("synced-message-delete", true, 47728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 478ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 47928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 480ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 48128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 48228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 483ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 48428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 48528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 486ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 487ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 488ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 489ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 490ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 491ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 492ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 493ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 494ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 495ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 496ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 497ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 498ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure we start with no synced deletions 499ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 500ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 501ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 502ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 503ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete one of them SYNCED 504ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message1Id); 505ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 506ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 507ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's only one message now 508ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 509ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 510ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 511ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one synced deletion now 512ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 513ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 514ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 515ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 516ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete the other one NOT SYNCED 517ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 518ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 519ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 520ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are no messages now 521ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 522ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 523ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 524ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's still one deletion now 525ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 526ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 527ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 528ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 529ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 530ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 531ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test message update 532ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 533ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 534ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 535ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testMessageUpdate() { 53628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-update", true, mMockContext); 537ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 53828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 539ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 54028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 54128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 542ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 54328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 54428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 545ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 546ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentResolver cr = mMockContext.getContentResolver(); 547ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 548ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 549ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 550ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 551ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 552ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 553ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 554ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 555ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 556ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 557ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 558ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the first one 559ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 560ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentValues cv = new ContentValues(); 561ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 562ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 563ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 564ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's no updated message 565ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 566ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 567ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 568ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 569ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck" 570ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message restoredMessage = Message.restoreMessageWithId(mMockContext, message1Id); 571ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 572ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 573ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the second one 574ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id); 575ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv = new ContentValues(); 576ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 577ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 578ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 579ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one updated message 580ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 581ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 582ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 583ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 584ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck", 585ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // as before 586ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler restoredMessage = Message.restoreMessageWithId(mMockContext, message2Id); 587ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 588ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 589ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the original message back from the provider 590ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Cursor c = cr.query(Message.UPDATED_CONTENT_URI, Message.CONTENT_PROJECTION, null, null, 591ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler null); 592ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler try { 593ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertTrue(c.moveToFirst()); 594ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message originalMessage = EmailContent.getContent(c, Message.class); 595ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure this has the original value 596ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from message2", originalMessage.mFrom); 597ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // Should only be one 598ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertFalse(c.moveToNext()); 599ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } finally { 600ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler c.close(); 601ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 602ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 603ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // delete the second message 604ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.delete(ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id), null, null); 605ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 606ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // hey, presto! the change should be gone 607ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 608ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 609ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 610ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 611ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // and there should now be a deleted record 612ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 613ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 614ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 615ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 616ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 617ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 6187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: cascaded delete account 6197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 6207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 6217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 6227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other account, mailbox & messages and confirm the right objects were deleted 6237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 6247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteAccount() { 62528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-cascade", true, 62628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 6277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 62828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 6297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 63028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 63128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 63228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 63328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 6347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there is one account, one mailbox, and two messages 6367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 6377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numAccounts); 6387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 6397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 6407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 6417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 6427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // delete the account 6447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 6457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts, mailboxes, or messages 6487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 6497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numAccounts); 6507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 6517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 6527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 6537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 6547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 655758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 6567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 6577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test cascaded delete mailbox 6587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 6597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 6607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other mailbox & messages and confirm the right objects were deleted 6617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 6627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteMailbox() { 66328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete-cascade", true, 66428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 6657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 66628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 6677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 66828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 66928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 67028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 67128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 6727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 6747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 6757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 6767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 6787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 680758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 6817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the mailbox 6827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 6837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 684758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 6857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // there should now be zero messages 6867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 6887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 689758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 6907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 6917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: Test cascaded delete message 6927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 6937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 6947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 6957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 696976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank /** 697976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * Test that our unique file name algorithm works as expected. Since this test requires an 698976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * SD card, we check the environment first, and return immediately if none is mounted. 699976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * @throws IOException 700976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank */ 701976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank public void testCreateUniqueFile() throws IOException { 702976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Delete existing files, if they exist 703976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 704976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank return; 705976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 706976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 707976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String fileName = "A11achm3n1.doc"; 708976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File uniqueFile = Attachment.createUniqueFile(fileName); 709976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 710976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 711976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 712976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2.doc", uniqueFile.getName()); 713976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 714976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 715976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-3.doc", uniqueFile.getName()); 716976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 717976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 718976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank fileName = "A11achm3n1"; 719976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 720976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 721976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 722976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 723976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2", uniqueFile.getName()); 724976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 725976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 726976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File directory = Environment.getExternalStorageDirectory(); 727976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // These are the files that should be created earlier in the test. Make sure 728976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // they are deleted for the next go-around 729976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String[] fileNames = new String[] {"A11achm3n1.doc", "A11achm3n1-2.doc", "A11achm3n1"}; 730976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int length = fileNames.length; 731976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < length; i++) { 732976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File file = new File(directory, fileNames[i]); 733976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (file.exists()) { 734976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank file.delete(); 735976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 736976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 737976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 738976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 7394119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7404119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler /** 7414119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler * Test retrieving attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 7424119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler */ 7434119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler public void testGetAttachmentByMessageIdUri() { 7444119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7454119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 7464119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1 = ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 7474119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2 = ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 748758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 749758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 7504119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7514119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now ask for the attachments of message id=1 7524119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note: Using the "sort by size" trick to bring them back in expected order 7534119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 7544119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Cursor c = mMockContext.getContentResolver().query(uri, Attachment.CONTENT_PROJECTION, 7554119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler null, null, Attachment.SIZE); 7564119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(2, c.getCount()); 7574119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 7584119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 7594119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToFirst(); 7604119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1Get = EmailContent.getContent(c, Attachment.class); 7614119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-1", a1, a1Get); 7624119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToNext(); 7634119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2Get = EmailContent.getContent(c, Attachment.class); 7644119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-2", a2, a2Get); 7654119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 7664119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 7674119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 7684119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 76954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 77054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler /** 77154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * Tests of default account behavior 772758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 77354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 1. Simple set/get 77454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 2. Moving default between 3 accounts 77554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 3. Delete default, make sure another becomes default 77654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler */ 77754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler public void testSetGetDefaultAccount() { 77854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // There should be no default account if there are no accounts 77954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long defaultAccountId = Account.getDefaultAccountId(mMockContext); 78054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler assertEquals(-1, defaultAccountId); 78154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 78254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-default-1", true, mMockContext); 78354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account1Id = account1.mId; 78454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-default-2", true, mMockContext); 78554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account2Id = account2.mId; 78654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account3 = ProviderTestUtils.setupAccount("account-default-3", true, mMockContext); 78754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account3Id = account3.mId; 78854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 7899e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // With three accounts, but none marked default, confirm that some default account 7909e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // is returned. Which one is undefined here. 79154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 7929e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertTrue(defaultAccountId == account1Id 7939e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account2Id 7949e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account3Id); 79554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 7969e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler updateIsDefault(account1, true); 79754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 7989e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(account1Id, defaultAccountId); 79954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 800531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account2, true); 801531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 802531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 803531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank 804531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account3, true); 805531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 806531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 80754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 80854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now delete a non-default account and confirm no change 80954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 81054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 81154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 812531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 813531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 81454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 81554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now confirm deleting the default account and it switches to another one 81654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account3Id); 81754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 81854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 819531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 820531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 821758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8229e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // Now delete the final account and confirm there are no default accounts again 8239e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 8249e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 8259e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler 82654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 8279e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(-1, defaultAccountId); 82854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler } 82954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 8309e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler private void updateIsDefault(Account account, boolean newState) { 8319e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.setDefaultAccount(newState); 8329e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler ContentValues cv = new ContentValues(); 8339e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler cv.put(AccountColumns.IS_DEFAULT, account.mIsDefault); 8349e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.update(mMockContext, cv); 8359e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler } 836758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 837758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public static Message setupUnreadMessage(String name, long accountId, long mailboxId, 838758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank boolean addBody, boolean saveIt, Context context) { 839758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message msg = 840758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupMessage(name, accountId, mailboxId, addBody, false, context); 841758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.mFlagRead = false; 842758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank if (saveIt) { 843758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.save(context); 844758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 845758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank return msg; 846758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 847758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 848758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public void testUnreadCountTriggers() { 849758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Start with one account and three mailboxes 850758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Account account = ProviderTestUtils.setupAccount("triggers", true, mMockContext); 851758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxA = ProviderTestUtils.setupMailbox("boxA", account.mId, true, mMockContext); 852758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxB = ProviderTestUtils.setupMailbox("boxB", account.mId, true, mMockContext); 853758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxC = ProviderTestUtils.setupMailbox("boxC", account.mId, true, mMockContext); 854758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 855758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure there are no unreads 856758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 857758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 858758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxC.mId)); 859758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 860758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Create 4 unread messages (only 3 named) in boxA 861758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message1 = setupUnreadMessage("message1", account.mId, boxA.mId, 862758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 863758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message2= setupUnreadMessage("message2", account.mId, boxA.mId, 864758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 865758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message3 = setupUnreadMessage("message3", account.mId, boxA.mId, 866758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 867758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank setupUnreadMessage("message4", account.mId, boxC.mId, false, true, mMockContext); 868758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 869758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure the unreads are where we expect them 870758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(3, getUnreadCount(boxA.mId)); 871758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 872758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 873758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 874758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // After deleting message 1, the count in box A should be decremented (to 2) 875758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentResolver cr = mMockContext.getContentResolver(); 876758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1.mId); 877758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.delete(uri, null, null); 878758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxA.mId)); 879758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 880758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 881758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 882758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 2 to box B, leaving 1 in box A and 1 in box B 883758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message2.mMailboxKey = boxB.mId; 884758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentValues cv = new ContentValues(); 885758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxB.mId); 886758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message2.mId), cv, null, null); 887758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxA.mId)); 888758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 889758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 890758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 891758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 (from box A) read, leaving 0 in box A 892758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 893758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 1); 894758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 895758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 896758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 897758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 898758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 899758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 3 to box C; should be no change (it's read) 900758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message3.mMailboxKey = boxC.mId; 901758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 902758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxC.mId); 903758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 904758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 905758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 906758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 907758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 908758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 unread; it's now in box C, so that box's count should go up to 3 909758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 910758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 0); 911758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 912758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 913758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 914758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxC.mId)); 915758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 9167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler} 917