ProviderTests.java revision c41c47fa07a22f8a7612fb0191f152a36d95b7a5
17143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/* 27143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Copyright (C) 2009 The Android Open Source Project 37143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 47143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Licensed under the Apache License, Version 2.0 (the "License"); 57143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * you may not use this file except in compliance with the License. 67143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You may obtain a copy of the License at 77143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 87143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * http://www.apache.org/licenses/LICENSE-2.0 97143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Unless required by applicable law or agreed to in writing, software 117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * distributed under the License is distributed on an "AS IS" BASIS, 127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * See the License for the specific language governing permissions and 147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * limitations under the License. 157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpackage com.android.email.provider; 187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Account; 209e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadlerimport com.android.email.provider.EmailContent.AccountColumns; 21976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport com.android.email.provider.EmailContent.Attachment; 226c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadlerimport com.android.email.provider.EmailContent.AttachmentColumns; 237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Body; 249627d014e16235eadf981b9165807dc72a14a383Mihai Predaimport com.android.email.provider.EmailContent.BodyColumns; 25da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadlerimport com.android.email.provider.EmailContent.HostAuth; 267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 2741f775bbc731b25854da9f5a80c66a4aa1eb0af9satokimport com.android.email.provider.EmailContent.MailboxColumns; 287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 29ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport com.android.email.provider.EmailContent.MessageColumns; 307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 31ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentResolver; 327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.ContentUris; 33ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentValues; 347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.Context; 357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.database.Cursor; 367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.net.Uri; 374a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadlerimport android.os.Bundle; 38976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport android.os.Environment; 394a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadlerimport android.os.Parcel; 407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.test.ProviderTestCase2; 417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 42758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.File; 43758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.io.IOException; 44758a532fce2f672673d38b2daa5f67eb757b118bMarc Blankimport java.util.ArrayList; 45758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/** 477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Tests of the Email provider. 48758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You can run this entire test case with: 507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * runtest -c com.android.email.provider.ProviderTests email 517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpublic class ProviderTests extends ProviderTestCase2<EmailProvider> { 53758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailProvider mProvider; 557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Context mMockContext; 567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public ProviderTests() { 587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); 597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 60758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void setUp() throws Exception { 637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.setUp(); 647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext = getMockContext(); 657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void tearDown() throws Exception { 697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.tearDown(); 707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 730d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler * TODO: Database upgrade tests 740d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler */ 750d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler 760d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler /** 777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple account save/retrieve 787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountSave() { 8028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-save", true, mMockContext); 817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 82758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Account account2 = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 84758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account2); 867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 8741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 884a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler /** 89da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler * Test simple account save/retrieve with predefined hostauth records 90da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler */ 91da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler public void testAccountSaveHostAuth() { 92da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-hostauth", false, mMockContext); 93da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler // add hostauth data, which should be saved the first time 94da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthRecv = ProviderTestUtils.setupHostAuth("account-hostauth-recv", -1, false, 95da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler mMockContext); 96da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthSend = ProviderTestUtils.setupHostAuth("account-hostauth-send", -1, false, 97da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler mMockContext); 98da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.save(mMockContext); 99da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler long account1Id = account1.mId; 100da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 101da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler // Confirm account reads back correctly 102da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler Account account1get = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 103da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account1get); 104da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 105da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler // Confirm hostauth fields can be accessed & read back correctly 106da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler HostAuth hostAuth1get = EmailContent.HostAuth.restoreHostAuthWithId(mMockContext, 107da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1get.mHostAuthKeyRecv); 108da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler ProviderTestUtils.assertHostAuthEqual("testAccountSaveHostAuth-recv", 109da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthRecv, hostAuth1get); 110da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler HostAuth hostAuth2get = EmailContent.HostAuth.restoreHostAuthWithId(mMockContext, 111da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1get.mHostAuthKeySend); 112da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler ProviderTestUtils.assertHostAuthEqual("testAccountSaveHostAuth-send", 113da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler account1.mHostAuthSend, hostAuth2get); 114da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } 115da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 116da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler /** 1174a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler * Simple test of account parceling. The rather tortuous path is to ensure that the 1184a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler * account is really flattened all the way down to a parcel and back. 1194a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler */ 1204a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler public void testAccountParcel() { 1214a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Account account1 = ProviderTestUtils.setupAccount("parcel", false, mMockContext); 1224a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Bundle b = new Bundle(); 1234a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b.putParcelable("account", account1); 1244a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Parcel p = Parcel.obtain(); 1254a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b.writeToParcel(p, 0); 1264a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler p.setDataPosition(0); // rewind it for reading 1274a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Bundle b2 = new Bundle(Account.class.getClassLoader()); 1284a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler b2.readFromParcel(p); 1294a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler Account account2 = (Account) b2.getParcelable("account"); 1304a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler p.recycle(); 1314a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler 1324a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler ProviderTestUtils.assertAccountEqual("testAccountParcel", account1, account2); 1334a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler } 1344a8c70c09be3914ded18031b4cca5a6d867de0d3Andrew Stadler 13541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static String[] MAILBOX_UNREAD_COUNT_PROJECTION = new String [] { 13641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MailboxColumns.UNREAD_COUNT 13741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok }; 13841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private final static int MAILBOX_UNREAD_COUNT_COLMUN = 0; 13941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 14041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok /** 14141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * Get the value of the unread count in the mailbox of the account. 14241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * This can be different from the actual number of unread messages in that mailbox. 14341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param accountId 14441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @param mailboxId 14541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok * @return 14641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok */ 14741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok private int getUnreadCount(long mailboxId) { 14841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok String text = null; 14941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Cursor c = null; 15041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok try { 15141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c = mMockContext.getContentResolver().query( 15241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok Mailbox.CONTENT_URI, 15341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok MAILBOX_UNREAD_COUNT_PROJECTION, 15441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok EmailContent.RECORD_ID + "=?", 15541f775bbc731b25854da9f5a80c66a4aa1eb0af9satok new String[] { String.valueOf(mailboxId) }, 15641f775bbc731b25854da9f5a80c66a4aa1eb0af9satok null); 15741f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.moveToFirst(); 15841f775bbc731b25854da9f5a80c66a4aa1eb0af9satok text = c.getString(MAILBOX_UNREAD_COUNT_COLMUN); 15941f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } finally { 16041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok c.close(); 16141f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 16241f775bbc731b25854da9f5a80c66a4aa1eb0af9satok return Integer.valueOf(text); 16341f775bbc731b25854da9f5a80c66a4aa1eb0af9satok } 16441f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 1657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: HostAuth tests 1677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 168758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple mailbox save/retrieve 1717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxSave() { 17328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, mMockContext); 1747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 17528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, 17628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 1777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 178758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Mailbox box2 = EmailContent.Mailbox.restoreMailboxWithId(mMockContext, box1Id); 180758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 18128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMailboxEqual("testMailboxSave", box1, box2); 1827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 183758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1844119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static String[] expectedAttachmentNames = 185976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] {"attachment1.doc", "attachment2.xls", "attachment3"}; 186976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // The lengths need to be kept in ascending order 1874119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static long[] expectedAttachmentSizes = new long[] {31415L, 97701L, 151213L}; 188976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 189fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /* 190fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Returns null if the message has no body. 191fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 192fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda private Body loadBodyForMessageId(long messageId) { 193fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 194fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda try { 195fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c = mMockContext.getContentResolver().query( 196fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_URI, 197fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.CONTENT_PROJECTION, 198fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda EmailContent.Body.MESSAGE_KEY + "=?", 199fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda new String[] {String.valueOf(messageId)}, 200fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda null); 201fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda int numBodies = c.getCount(); 202fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertTrue("at most one body", numBodies < 2); 203fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda return c.moveToFirst() ? EmailContent.getContent(c, Body.class) : null; 204fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } finally { 205fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda c.close(); 206fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 207fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 208fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 2097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple message save/retrieve 211758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 2127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: serverId vs. serverIntId 2137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageSave() { 21528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-save", true, mMockContext); 2167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 21728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 2187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 2197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a simple message (saved with no body) 22128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 22228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 2237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 2247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message1get = EmailContent.Message.restoreMessageWithId(mMockContext, message1Id); 22528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message1, message1get); 2267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a message saved with a body 2287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Note that it will read back w/o the text & html so we must extract those 22928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 23028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 2317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 2327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String text2 = message2.mText; 2337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String html2 = message2.mHtml; 234936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler String textReply2 = message2.mTextReply; 235936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler String htmlReply2 = message2.mHtmlReply; 2366c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long sourceKey2 = message2.mSourceKey; 2375fc57eccefeba517fe5e6f093786f37c6c4d50e6Marc Blank String introText2 = message2.mIntroText; 2387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mText = null; 2397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mHtml = null; 240936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler message2.mTextReply = null; 241936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler message2.mHtmlReply = null; 242e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank message2.mSourceKey = 0; 2435fc57eccefeba517fe5e6f093786f37c6c4d50e6Marc Blank message2.mIntroText = null; 2447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message2get = EmailContent.Message.restoreMessageWithId(mMockContext, message2Id); 24528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message2, message2get); 246758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 2477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Now see if there's a body saved with the right stuff 248fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Body body2 = loadBodyForMessageId(message2Id); 249fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body text", text2, body2.mTextContent); 250fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertEquals("body html", html2, body2.mHtmlContent); 251936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals("reply text", textReply2, body2.mTextReply); 252936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals("reply html", htmlReply2, body2.mHtmlReply); 2536c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals("source key", sourceKey2, body2.mSourceKey); 2545fc57eccefeba517fe5e6f093786f37c6c4d50e6Marc Blank assertEquals("intro text", introText2, body2.mIntroText); 255976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 2564119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments and body 257976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Message message3 = ProviderTestUtils.setupMessage("message3", account1Id, box1Id, true, 258976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank false, mMockContext); 259976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank ArrayList<Attachment> atts = new ArrayList<Attachment>(); 260976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < 3; i++) { 2614119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 2624119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2634119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 264976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 265976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank message3.mAttachments = atts; 2669e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message3.save(mMockContext); 267976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank long message3Id = message3.mId; 268976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 269976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Now check the attachments; there should be three and they should match name and size 270fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Cursor c = null; 271976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 272976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Note that there is NO guarantee of the order of returned records in the general case, 273976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 274976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // be kept sorted by size (ascending) for this test to work properly 275976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = mMockContext.getContentResolver().query( 276976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_URI, 277976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_PROJECTION, 278976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.MESSAGE_KEY + "=?", 279976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] { 280976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String.valueOf(message3Id) 281976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank }, 282976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.SIZE); 283976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int numAtts = c.getCount(); 284976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(3, numAtts); 285976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int i = 0; 286976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank while (c.moveToNext()) { 2874119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2884119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message3", atts.get(i), actual); 2894119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler i++; 2904119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2914119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 2924119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 2934119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2944119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2954119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments but no body 2964119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Message message4 = ProviderTestUtils.setupMessage("message4", account1Id, box1Id, false, 2974119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext); 2984119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts = new ArrayList<Attachment>(); 2994119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler for (int i = 0; i < 3; i++) { 3004119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 3014119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 3024119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 3034119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 3044119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler message4.mAttachments = atts; 3059e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler message4.save(mMockContext); 3064119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler long message4Id = message4.mId; 3074119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 3084119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now check the attachments; there should be three and they should match name and size 3094119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = null; 31041f775bbc731b25854da9f5a80c66a4aa1eb0af9satok 3114119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 3124119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note that there is NO guarantee of the order of returned records in the general case, 3134119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 3144119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // be kept sorted by size (ascending) for this test to work properly 3154119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = mMockContext.getContentResolver().query( 3164119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_URI, 3174119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_PROJECTION, 3184119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.MESSAGE_KEY + "=?", 3194119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler new String[] { 3204119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler String.valueOf(message4Id) 3214119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler }, 3224119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.SIZE); 3234119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int numAtts = c.getCount(); 3244119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(3, numAtts); 3254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int i = 0; 3264119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler while (c.moveToNext()) { 3274119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 3284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), actual); 329976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank i++; 330976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 331976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 332976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 3337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 33444144d0301213536b02f2080237b63d8271b2d0bMihai Preda 33544144d0301213536b02f2080237b63d8271b2d0bMihai Preda // test EmailContent.restoreAttachmentsWitdMessageId() 33644144d0301213536b02f2080237b63d8271b2d0bMihai Preda Attachment[] attachments = 33744144d0301213536b02f2080237b63d8271b2d0bMihai Preda Attachment.restoreAttachmentsWithMessageId(mMockContext, message4Id); 33844144d0301213536b02f2080237b63d8271b2d0bMihai Preda int size = attachments.length; 33944144d0301213536b02f2080237b63d8271b2d0bMihai Preda assertEquals(3, size); 34044144d0301213536b02f2080237b63d8271b2d0bMihai Preda for (int i = 0; i < size; ++i) { 34144144d0301213536b02f2080237b63d8271b2d0bMihai Preda ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), attachments[i]); 34244144d0301213536b02f2080237b63d8271b2d0bMihai Preda } 3437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 344758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update account 3477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 348758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update mailbox 3517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 352758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update message 3557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 356758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete account 3597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 3607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountDelete() { 36228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-1", true, mMockContext); 3637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 36428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-delete-2", true, mMockContext); 3657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account2Id = account2.mId; 3667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two accounts 3687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 3707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 3727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 3737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one account now 3767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 3787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 3817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts now 3847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 3857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 3867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 387758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 3887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3899627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for Body.lookupBodyIdWithMessageId() 3909627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Verifies that: 3919627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - for a message without body, -1 is returned. 3929627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - for a mesage with body, the id matches the one from loadBodyForMessageId. 3939627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 3949627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testLookupBodyIdWithMessageId() { 3959627d014e16235eadf981b9165807dc72a14a383Mihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 3969627d014e16235eadf981b9165807dc72a14a383Mihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 3979627d014e16235eadf981b9165807dc72a14a383Mihai Preda long account1Id = account1.mId; 3989627d014e16235eadf981b9165807dc72a14a383Mihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 3999627d014e16235eadf981b9165807dc72a14a383Mihai Preda long box1Id = box1.mId; 4009627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4019627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 1. create message with no body, check that returned bodyId is -1 4029627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 4039627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 4049627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message1Id = message1.mId; 4059627d014e16235eadf981b9165807dc72a14a383Mihai Preda long bodyId1 = Body.lookupBodyIdWithMessageId(resolver, message1Id); 4069627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(bodyId1, -1); 4079627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4089627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 2. create message with body, check that returned bodyId is correct 4099627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 4109627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 4119627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message2Id = message2.mId; 4129627d014e16235eadf981b9165807dc72a14a383Mihai Preda long bodyId2 = Body.lookupBodyIdWithMessageId(resolver, message2Id); 4139627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body = loadBodyForMessageId(message2Id); 4149627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body); 4159627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body.mId, bodyId2); 4169627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 4179627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4189627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 4199627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for Body.updateBodyWithMessageId(). 4209627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 1. - create message without body, 4219627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - update its body (set TEXT_CONTENT) 4229627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - check correct updated body is read back 4239627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 4249627d014e16235eadf981b9165807dc72a14a383Mihai Preda * 2. - create message with body, 4259627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - update body (set TEXT_CONTENT) 4269627d014e16235eadf981b9165807dc72a14a383Mihai Preda * - check correct updated body is read back 4279627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 4289627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testUpdateBodyWithMessageId() { 4299627d014e16235eadf981b9165807dc72a14a383Mihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 4309627d014e16235eadf981b9165807dc72a14a383Mihai Preda long account1Id = account1.mId; 4319627d014e16235eadf981b9165807dc72a14a383Mihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 4329627d014e16235eadf981b9165807dc72a14a383Mihai Preda long box1Id = box1.mId; 4339627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4349627d014e16235eadf981b9165807dc72a14a383Mihai Preda final String textContent = "foobar some odd text"; 435936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler final String htmlContent = "and some html"; 436936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler final String textReply = "plain text reply"; 437936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler final String htmlReply = "or the html reply"; 4385fc57eccefeba517fe5e6f093786f37c6c4d50e6Marc Blank final String introText = "fred wrote:"; 4399627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4409627d014e16235eadf981b9165807dc72a14a383Mihai Preda ContentValues values = new ContentValues(); 4419627d014e16235eadf981b9165807dc72a14a383Mihai Preda values.put(BodyColumns.TEXT_CONTENT, textContent); 442936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler values.put(BodyColumns.HTML_CONTENT, htmlContent); 443936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler values.put(BodyColumns.TEXT_REPLY, textReply); 444936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler values.put(BodyColumns.HTML_REPLY, htmlReply); 445e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank values.put(BodyColumns.SOURCE_MESSAGE_KEY, 17); 4465fc57eccefeba517fe5e6f093786f37c6c4d50e6Marc Blank values.put(BodyColumns.INTRO_TEXT, introText); 4479627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4489627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 1 4499627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 4509627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 4519627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message1Id = message1.mId; 4529627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body1 = loadBodyForMessageId(message1Id); 4539627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNull(body1); 4549627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body.updateBodyWithMessageId(mMockContext, message1Id, values); 4559627d014e16235eadf981b9165807dc72a14a383Mihai Preda body1 = loadBodyForMessageId(message1Id); 4569627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body1); 4579627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body1.mTextContent, textContent); 458936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body1.mHtmlContent, htmlContent); 459936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body1.mTextReply, textReply); 460936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body1.mHtmlReply, htmlReply); 461e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank assertEquals(body1.mSourceKey, 17); 4625fc57eccefeba517fe5e6f093786f37c6c4d50e6Marc Blank assertEquals(body1.mIntroText, introText); 4639627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4649627d014e16235eadf981b9165807dc72a14a383Mihai Preda // 2 4659627d014e16235eadf981b9165807dc72a14a383Mihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 4669627d014e16235eadf981b9165807dc72a14a383Mihai Preda true, mMockContext); 4679627d014e16235eadf981b9165807dc72a14a383Mihai Preda long message2Id = message2.mId; 4689627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body body2 = loadBodyForMessageId(message2Id); 4699627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body2); 4709627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertTrue(!body2.mTextContent.equals(textContent)); 4719627d014e16235eadf981b9165807dc72a14a383Mihai Preda Body.updateBodyWithMessageId(mMockContext, message2Id, values); 4729627d014e16235eadf981b9165807dc72a14a383Mihai Preda body2 = loadBodyForMessageId(message1Id); 4739627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertNotNull(body2); 4749627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(body2.mTextContent, textContent); 475936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body2.mHtmlContent, htmlContent); 476936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body2.mTextReply, textReply); 477936babc145e2e6eb2e222f2ce5e3da8f9e4fb9f2Andrew Stadler assertEquals(body2.mHtmlReply, htmlReply); 478e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank assertEquals(body2.mSourceKey, 17); 4795fc57eccefeba517fe5e6f093786f37c6c4d50e6Marc Blank assertEquals(body2.mIntroText, introText); 4809627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 4819627d014e16235eadf981b9165807dc72a14a383Mihai Preda 4829627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 483c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler * Test body retrieve methods 484c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler */ 485c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler public void testBodyRetrieve() { 486c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler // No account needed 487c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler // No mailbox needed 488c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler Message message1 = ProviderTestUtils.setupMessage("bodyretrieve", 1, 1, true, 489c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler true, mMockContext); 490c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler long messageId = message1.mId; 491c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler 492c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler assertEquals(message1.mText, 493c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler Body.restoreBodyTextWithMessageId(mMockContext, messageId)); 494c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler assertEquals(message1.mHtml, 495c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler Body.restoreBodyHtmlWithMessageId(mMockContext, messageId)); 496c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler assertEquals(message1.mTextReply, 497c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler Body.restoreReplyTextWithMessageId(mMockContext, messageId)); 498c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler assertEquals(message1.mHtmlReply, 499c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler Body.restoreReplyHtmlWithMessageId(mMockContext, messageId)); 500c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler assertEquals(message1.mIntroText, 501c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler Body.restoreIntroTextWithMessageId(mMockContext, messageId)); 502c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler } 503c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler 504c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler /** 505fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete body. 506fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 507fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. The body has _id 1 and messageKey 2). 508fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 509fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. verify that body for message 2 has not been deleted. 510fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. delete message 2, verify body is deleted. 511fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 512fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteBody() { 513fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 514fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 515fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and mailboxes 516fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 517fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 518fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 519fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 520fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 521fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 522fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 523fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 524fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 525fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 526fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 527fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 528fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 529fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 530fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // verify body is there 531fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 532fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 533fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 534fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 535c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 536fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. verify body for second message wasn't deleted 537fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 538fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 539fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. delete second message, check its body is deleted 540fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message2Id), null, null); 541fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNull(loadBodyForMessageId(message2Id)); 542fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 543fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 544fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 545fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * Test delete orphan bodies. 546fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 1. create message without body (message id 1) 547fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 2. create message with body (message id 2. Body has _id 1 and messageKey 2). 548fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 3. delete first message. 549fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 4. delete some other mailbox -- this triggers delete orphan bodies. 550fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda * 5. verify that body for message 2 has not been deleted. 551fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda */ 552fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda public void testDeleteOrphanBodies() { 553fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda final ContentResolver resolver = mMockContext.getContentResolver(); 554fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 555fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // Create account and twa mailboxes 556fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Account account1 = ProviderTestUtils.setupAccount("orphaned body", true, mMockContext); 557fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long account1Id = account1.mId; 558fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 559fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box1Id = box1.mId; 560fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 561fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long box2Id = box2.mId; 562fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 563fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 1. create message without body 564fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 565fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 566fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message1Id = message1.mId; 567fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 568fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 2. create message with body 569fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 570fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda true, mMockContext); 571fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda long message2Id = message2.mId; 572fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda //verify body is there 573fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 574fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 575fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 3. delete first message 576fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Message.CONTENT_URI, message1Id), null, null); 577fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 578fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 4. delete some mailbox (because it triggers "delete orphan bodies") 579fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda resolver.delete(ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id), null, null); 580fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 581fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda // 5. verify body for second message wasn't deleted during "delete orphan bodies" 582fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda assertNotNull(loadBodyForMessageId(message2Id)); 583fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda } 584fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda 585fb7974f5bfb6275fb856b0f7ff386ef10680c83aMihai Preda /** 5867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete mailbox 5877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxDelete() { 58928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete", true, mMockContext); 5907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 59128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 5927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 59328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 5947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box2Id = box2.mId; 595758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 5967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MailboxColumns.ACCOUNT_KEY + "=?"; 5977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id) }; 5987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two mailboxes 6007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 6017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 6027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 6047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 6057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one mailbox now 6087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 6097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 6107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 6127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id); 6137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no mailboxes now 6167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 6177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 6187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 619758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 6207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 6217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete message 6227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 6237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 6247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 6257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageDelete() { 62628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, 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, false, 63128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 6327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 63328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 63428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 6357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 6367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 6387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 6397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 6407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 6427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 6447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 6467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 6477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one message now 6507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numMessages); 6527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 6547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 6557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 6567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 6577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no messages now 6587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 6597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 6607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 661758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 6627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 663ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test delete synced message 664ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 665ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 666ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 667ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testSyncedMessageDelete() { 66828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("synced-message-delete", true, 66928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 670ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 67128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 672ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 67328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 67428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 675ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 67628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 67728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 678ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 679ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 680ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 681ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 682ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 683ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 684ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 685ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 686ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 687ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 688ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 689ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 690ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure we start with no synced deletions 691ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 692ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 693ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 694ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 695ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete one of them SYNCED 696ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message1Id); 697ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 698ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 699ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's only one message now 700ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 701ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 702ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 703ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one synced deletion now 704ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 705ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 706ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 707ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 708ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete the other one NOT SYNCED 709ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 710ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 711ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 712ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are no messages now 713ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 714ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 715ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 716ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's still one deletion now 717ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 718ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 719ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 720ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 721ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 722ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 723ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test message update 724ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 725ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 726ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 727ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testMessageUpdate() { 72828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-update", true, mMockContext); 729ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 73028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 731ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 73228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 73328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 734ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 73528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 73628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 737ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 738ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentResolver cr = mMockContext.getContentResolver(); 739ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 740ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 741ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 742ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 743ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 744ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 745ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 746ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 747ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 748ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 749ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 750ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the first one 751ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 752ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentValues cv = new ContentValues(); 753ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 754ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 755ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 756ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's no updated message 757ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 758ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 759ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 760ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 761ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck" 762ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message restoredMessage = Message.restoreMessageWithId(mMockContext, message1Id); 763ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 764ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 765ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the second one 766ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id); 767ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv = new ContentValues(); 768ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 769ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 770ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 771ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one updated message 772ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 773ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 774ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 775ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 776ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck", 777ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // as before 778ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler restoredMessage = Message.restoreMessageWithId(mMockContext, message2Id); 779ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 780ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 781ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the original message back from the provider 782ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Cursor c = cr.query(Message.UPDATED_CONTENT_URI, Message.CONTENT_PROJECTION, null, null, 783ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler null); 784ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler try { 785ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertTrue(c.moveToFirst()); 786ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message originalMessage = EmailContent.getContent(c, Message.class); 787ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure this has the original value 788ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from message2", originalMessage.mFrom); 789ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // Should only be one 790ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertFalse(c.moveToNext()); 791ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } finally { 792ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler c.close(); 793ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 794ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 795ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // delete the second message 796ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.delete(ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id), null, null); 797ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 798ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // hey, presto! the change should be gone 799ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 800ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 801ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 802ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 803ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // and there should now be a deleted record 804ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 805ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 806ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 807ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 808ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 809ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 8107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: cascaded delete account 8117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 8127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 8137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 8147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other account, mailbox & messages and confirm the right objects were deleted 8157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 8167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteAccount() { 81728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-cascade", true, 81828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 8197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 82028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 8217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 82228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 82328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 82428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 82528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 8267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there is one account, one mailbox, and two messages 8287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 8297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numAccounts); 8307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 8317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 8327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 8337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 8347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // delete the account 8367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 8377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 8387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts, mailboxes, or messages 8407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 8417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numAccounts); 8427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 8437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 8447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 8457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 8467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 847758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 8497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test cascaded delete mailbox 8507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 8517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 8527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other mailbox & messages and confirm the right objects were deleted 8537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 8547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteMailbox() { 85528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete-cascade", true, 85628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 8577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 85828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 8597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 86028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 86128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 86228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 86328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 8647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 8667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 8677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 8687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 8697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 8707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 8717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 872758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the mailbox 8747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 8757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 876758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // there should now be zero messages 8787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 8797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 8807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 881758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 8827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 8836c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler * Test cascaded delete message 8846c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler * Confirms that deleting a message will also delete its body & attachments 8857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 8866c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler public void testCascadeMessageDelete() { 8876c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-cascade", true, mMockContext); 8886c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long account1Id = account1.mId; 8896c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 8906c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long box1Id = box1.mId; 8916c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 8926c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Each message has a body, and also give each 2 attachments 8936c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 8946c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext); 8956c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ArrayList<Attachment> atts = new ArrayList<Attachment>(); 8966c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler for (int i = 0; i < 2; i++) { 8976c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 8986c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 8996c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext)); 9006c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 9016c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message1.mAttachments = atts; 9026c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message1.save(mMockContext); 9036c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long message1Id = message1.mId; 9046c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9056c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, true, 9066c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext); 9076c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler atts = new ArrayList<Attachment>(); 9086c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler for (int i = 0; i < 2; i++) { 9096c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 9106c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 9116c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler false, mMockContext)); 9126c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 9136c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message2.mAttachments = atts; 9146c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler message2.save(mMockContext); 9156c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler long message2Id = message2.mId; 9166c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9176c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Set up to test total counts of bodies & attachments for our test messages 9186c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler String bodySelection = BodyColumns.MESSAGE_KEY + " IN (?,?)"; 9196c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler String attachmentSelection = AttachmentColumns.MESSAGE_KEY + " IN (?,?)"; 9206c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler String[] selArgs = new String[] { String.valueOf(message1Id), String.valueOf(message2Id) }; 9216c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9226c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // make sure there are two bodies 9236c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler int numBodies = EmailContent.count(mMockContext, Body.CONTENT_URI, bodySelection, selArgs); 9246c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(2, numBodies); 9256c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9266c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // make sure there are four attachments 9276c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler int numAttachments = EmailContent.count(mMockContext, Attachment.CONTENT_URI, 9286c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler attachmentSelection, selArgs); 9296c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(4, numAttachments); 9306c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9316c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // now delete one of the messages 9326c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 9336c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 9346c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9356c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // there should be one body and two attachments 9366c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numBodies = EmailContent.count(mMockContext, Body.CONTENT_URI, bodySelection, selArgs); 9376c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(1, numBodies); 9386c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9396c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numAttachments = EmailContent.count(mMockContext, Attachment.CONTENT_URI, 9406c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler attachmentSelection, selArgs); 9416c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(2, numAttachments); 9426c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9436c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // now delete the other message 9446c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 9456c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 9466c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9476c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // make sure there are no bodies or attachments 9486c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numBodies = EmailContent.count(mMockContext, Body.CONTENT_URI, bodySelection, selArgs); 9496c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(0, numBodies); 9506c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 9516c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler numAttachments = EmailContent.count(mMockContext, Attachment.CONTENT_URI, 9526c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler attachmentSelection, selArgs); 9536c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(0, numAttachments); 9546c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 9557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 956976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank /** 957976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * Test that our unique file name algorithm works as expected. Since this test requires an 958976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * SD card, we check the environment first, and return immediately if none is mounted. 959976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * @throws IOException 960976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank */ 961976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank public void testCreateUniqueFile() throws IOException { 962976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Delete existing files, if they exist 963976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 964976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank return; 965976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 966976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 967976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String fileName = "A11achm3n1.doc"; 968976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File uniqueFile = Attachment.createUniqueFile(fileName); 969976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 970976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 971976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 972976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2.doc", uniqueFile.getName()); 973976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 974976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 975976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-3.doc", uniqueFile.getName()); 976976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 977976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 978976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank fileName = "A11achm3n1"; 979976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 980976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 981976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 982976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 983976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2", uniqueFile.getName()); 984976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 985976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 986976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File directory = Environment.getExternalStorageDirectory(); 987976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // These are the files that should be created earlier in the test. Make sure 988976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // they are deleted for the next go-around 989976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String[] fileNames = new String[] {"A11achm3n1.doc", "A11achm3n1-2.doc", "A11achm3n1"}; 990976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int length = fileNames.length; 991976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < length; i++) { 992976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File file = new File(directory, fileNames[i]); 993976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (file.exists()) { 994976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank file.delete(); 995976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 996976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 997976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 998976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 9994119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 10004119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler /** 10014119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler * Test retrieving attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 10024119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler */ 10034119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler public void testGetAttachmentByMessageIdUri() { 10044119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 10054119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 10064119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1 = ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 10074119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2 = ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 1008758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 1009758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 10104119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 10114119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now ask for the attachments of message id=1 10124119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note: Using the "sort by size" trick to bring them back in expected order 10134119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 10144119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Cursor c = mMockContext.getContentResolver().query(uri, Attachment.CONTENT_PROJECTION, 10154119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler null, null, Attachment.SIZE); 10164119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(2, c.getCount()); 10174119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 10184119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 10194119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToFirst(); 10204119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1Get = EmailContent.getContent(c, Attachment.class); 10214119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-1", a1, a1Get); 10224119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToNext(); 10234119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2Get = EmailContent.getContent(c, Attachment.class); 10244119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-2", a2, a2Get); 10254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 10264119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 10274119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 10284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 102954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 103054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler /** 10316c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler * Test deleting attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 10326c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler */ 10336c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler public void testDeleteAttachmentByMessageIdUri() { 10346c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ContentResolver mockResolver = mMockContext.getContentResolver(); 10356c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10366c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 10376c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 10386c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 10396c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a3 = ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 10406c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a4 = ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 10416c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10426c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Delete all attachments for message id=1 10436c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 10446c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler mockResolver.delete(uri, null, null); 10456c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10466c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // Read back all attachments and confirm that we have the expected remaining attachments 10476c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler // (the attachments that are set for message id=2). Note order-by size to simplify test. 10486c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Cursor c = mockResolver.query(Attachment.CONTENT_URI, Attachment.CONTENT_PROJECTION, 10496c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler null, null, Attachment.SIZE); 10506c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler assertEquals(2, c.getCount()); 10516c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10526c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler try { 10536c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler c.moveToFirst(); 10546c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a3Get = EmailContent.getContent(c, Attachment.class); 10556c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-3", a3, a3Get); 10566c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler c.moveToNext(); 10576c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler Attachment a4Get = EmailContent.getContent(c, Attachment.class); 10586c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-4", a4, a4Get); 10596c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } finally { 10606c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler c.close(); 10616c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 10626c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler } 10636c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler 10646c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler /** 106554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * Tests of default account behavior 1066758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank * 106754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 1. Simple set/get 106854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 2. Moving default between 3 accounts 106954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler * 3. Delete default, make sure another becomes default 107054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler */ 107154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler public void testSetGetDefaultAccount() { 107254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // There should be no default account if there are no accounts 107354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long defaultAccountId = Account.getDefaultAccountId(mMockContext); 107454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler assertEquals(-1, defaultAccountId); 107554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 107654c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-default-1", true, mMockContext); 107754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account1Id = account1.mId; 107854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-default-2", true, mMockContext); 107954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account2Id = account2.mId; 108054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account3 = ProviderTestUtils.setupAccount("account-default-3", true, mMockContext); 108154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long account3Id = account3.mId; 108254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 10839e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // With three accounts, but none marked default, confirm that some default account 10849e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // is returned. Which one is undefined here. 108554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 10869e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertTrue(defaultAccountId == account1Id 10879e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account2Id 10889e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler || defaultAccountId == account3Id); 108954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 10909e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler updateIsDefault(account1, true); 109154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 10929e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(account1Id, defaultAccountId); 109354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 1094531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account2, true); 1095531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1096531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 1097531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank 1098531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank updateIsDefault(account3, true); 1099531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1100531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 110154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 110254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now delete a non-default account and confirm no change 110354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 110454c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 110554c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 1106531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1107531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account3Id, defaultAccountId); 110854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 110954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler // Now confirm deleting the default account and it switches to another one 111054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account3Id); 111154c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 111254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 1113531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank defaultAccountId = Account.getDefaultAccountId(mMockContext); 1114531ae9d25f4310e4774e136ed74ed9749f940861Marc Blank assertEquals(account2Id, defaultAccountId); 1115758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 11169e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler // Now delete the final account and confirm there are no default accounts again 11179e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 11189e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 11199e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler 112054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler defaultAccountId = Account.getDefaultAccountId(mMockContext); 11219e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler assertEquals(-1, defaultAccountId); 112254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler } 112354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler 11249e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler private void updateIsDefault(Account account, boolean newState) { 11259e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.setDefaultAccount(newState); 11269e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler ContentValues cv = new ContentValues(); 11279e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler cv.put(AccountColumns.IS_DEFAULT, account.mIsDefault); 11289e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.update(mMockContext, cv); 11299e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler } 1130758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1131758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public static Message setupUnreadMessage(String name, long accountId, long mailboxId, 1132758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank boolean addBody, boolean saveIt, Context context) { 1133758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message msg = 1134758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ProviderTestUtils.setupMessage(name, accountId, mailboxId, addBody, false, context); 1135758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.mFlagRead = false; 1136758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank if (saveIt) { 1137758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank msg.save(context); 1138758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 1139758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank return msg; 1140758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 1141758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1142758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank public void testUnreadCountTriggers() { 1143758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Start with one account and three mailboxes 1144758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Account account = ProviderTestUtils.setupAccount("triggers", true, mMockContext); 1145758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxA = ProviderTestUtils.setupMailbox("boxA", account.mId, true, mMockContext); 1146758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxB = ProviderTestUtils.setupMailbox("boxB", account.mId, true, mMockContext); 1147758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Mailbox boxC = ProviderTestUtils.setupMailbox("boxC", account.mId, true, mMockContext); 1148758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1149758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure there are no unreads 1150758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1151758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 1152758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxC.mId)); 1153758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1154758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Create 4 unread messages (only 3 named) in boxA 1155758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message1 = setupUnreadMessage("message1", account.mId, boxA.mId, 1156758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 1157758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message2= setupUnreadMessage("message2", account.mId, boxA.mId, 1158758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 1159758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Message message3 = setupUnreadMessage("message3", account.mId, boxA.mId, 1160758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank false, true, mMockContext); 1161758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank setupUnreadMessage("message4", account.mId, boxC.mId, false, true, mMockContext); 1162758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1163758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Make sure the unreads are where we expect them 1164758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(3, getUnreadCount(boxA.mId)); 1165758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 1166758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1167758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1168758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // After deleting message 1, the count in box A should be decremented (to 2) 1169758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentResolver cr = mMockContext.getContentResolver(); 1170758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1.mId); 1171758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.delete(uri, null, null); 1172758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxA.mId)); 1173758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxB.mId)); 1174758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1175758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1176758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 2 to box B, leaving 1 in box A and 1 in box B 1177758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message2.mMailboxKey = boxB.mId; 1178758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank ContentValues cv = new ContentValues(); 1179758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxB.mId); 1180758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message2.mId), cv, null, null); 1181758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxA.mId)); 1182758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1183758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1184758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1185758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 (from box A) read, leaving 0 in box A 1186758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 1187758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 1); 1188758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1189758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1190758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1191758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1192758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1193758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Move message 3 to box C; should be no change (it's read) 1194758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank message3.mMailboxKey = boxC.mId; 1195758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 1196758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.MAILBOX_KEY, boxC.mId); 1197758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1198758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1199758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1200758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxC.mId)); 1201758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank 1202758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank // Mark message 3 unread; it's now in box C, so that box's count should go up to 3 1203758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.clear(); 1204758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cv.put(MessageColumns.FLAG_READ, 0); 1205758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank cr.update(ContentUris.withAppendedId(Message.CONTENT_URI, message3.mId), cv, null, null); 1206758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(0, getUnreadCount(boxA.mId)); 1207758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(1, getUnreadCount(boxB.mId)); 1208758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank assertEquals(2, getUnreadCount(boxC.mId)); 1209758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank } 12109627d014e16235eadf981b9165807dc72a14a383Mihai Preda 12119627d014e16235eadf981b9165807dc72a14a383Mihai Preda /** 12129627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Test for EmailProvider.createIndex(). 12139627d014e16235eadf981b9165807dc72a14a383Mihai Preda * Check that it returns exacly the same string as the one used previously for index creation. 12149627d014e16235eadf981b9165807dc72a14a383Mihai Preda */ 12159627d014e16235eadf981b9165807dc72a14a383Mihai Preda public void testCreateIndex() { 12169627d014e16235eadf981b9165807dc72a14a383Mihai Preda String oldStr = "create index message_" + MessageColumns.TIMESTAMP 12179627d014e16235eadf981b9165807dc72a14a383Mihai Preda + " on " + Message.TABLE_NAME + " (" + MessageColumns.TIMESTAMP + ");"; 12189627d014e16235eadf981b9165807dc72a14a383Mihai Preda String newStr = EmailProvider.createIndex(Message.TABLE_NAME, MessageColumns.TIMESTAMP); 12199627d014e16235eadf981b9165807dc72a14a383Mihai Preda assertEquals(newStr, oldStr); 12209627d014e16235eadf981b9165807dc72a14a383Mihai Preda } 1221c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 1222c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank public void testIdAddToField() { 1223c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank ContentResolver cr = mMockContext.getContentResolver(); 1224c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank ContentValues cv = new ContentValues(); 1225c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 1226c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank // Try changing the newMessageCount of an account 1227c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Account account = ProviderTestUtils.setupAccount("field-add", true, mMockContext); 1228c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank int startCount = account.mNewMessageCount; 1229c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank // "field" and "add" are the two required elements 1230c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.FIELD_COLUMN_NAME, AccountColumns.NEW_MESSAGE_COUNT); 1231c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.ADD_COLUMN_NAME, 17); 1232c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cr.update(ContentUris.withAppendedId(Account.ADD_TO_FIELD_URI, account.mId), 1233c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv, null, null); 1234c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Account restoredAccount = Account.restoreAccountWithId(mMockContext, account.mId); 1235c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(17 + startCount, restoredAccount.mNewMessageCount); 1236c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.ADD_COLUMN_NAME, -11); 1237c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cr.update(ContentUris.withAppendedId(Account.ADD_TO_FIELD_URI, account.mId), 1238c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv, null, null); 1239c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank restoredAccount = Account.restoreAccountWithId(mMockContext, account.mId); 1240c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(17 - 11 + startCount, restoredAccount.mNewMessageCount); 1241c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank 1242c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank // Now try with a mailbox 1243c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Mailbox boxA = ProviderTestUtils.setupMailbox("boxA", account.mId, true, mMockContext); 1244c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(0, boxA.mUnreadCount); 1245c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.FIELD_COLUMN_NAME, MailboxColumns.UNREAD_COUNT); 1246c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cv.put(EmailContent.ADD_COLUMN_NAME, 11); 1247c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank cr.update(ContentUris.withAppendedId(Mailbox.ADD_TO_FIELD_URI, boxA.mId), cv, null, null); 1248c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank Mailbox restoredBoxA = Mailbox.restoreMailboxWithId(mMockContext, boxA.mId); 1249c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank assertEquals(11, restoredBoxA.mUnreadCount); 1250c0c9c33322deecace00a32766e0a1b355aad4b31Marc Blank } 12517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler} 1252