Loading k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java +31 −85 Original line number Diff line number Diff line Loading @@ -741,12 +741,11 @@ public class MessagingController { if (remoteMessageStore != null) { remoteMessageStore.sync(account, folder, listener, providedRemoteFolder); } else { synchronizeMailboxSynchronousLegacy(account, folder, listener, providedRemoteFolder); synchronizeMailboxSynchronousLegacy(account, folder, listener); } } void synchronizeMailboxSynchronousLegacy(final Account account, final String folder, final MessagingListener listener, Folder providedRemoteFolder) { void synchronizeMailboxSynchronousLegacy(Account account, String folder, MessagingListener listener) { Folder remoteFolder = null; LocalFolder tLocalFolder = null; Loading Loading @@ -788,13 +787,8 @@ public class MessagingController { tLocalFolder = localStore.getFolder(folder); final LocalFolder localFolder = tLocalFolder; localFolder.open(Folder.OPEN_MODE_RW); localFolder.updateLastUid(); Map<String, Long> localUidMap = localFolder.getAllMessagesAndEffectiveDates(); if (providedRemoteFolder != null) { Timber.v("SYNC: using providedRemoteFolder %s", folder); remoteFolder = providedRemoteFolder; } else { Store remoteStore = account.getRemoteStore(); Timber.v("SYNC: About to get remote folder %s", folder); Loading Loading @@ -828,14 +822,8 @@ public class MessagingController { */ Timber.v("SYNC: About to open remote folder %s", folder); if (Expunge.EXPUNGE_ON_POLL == account.getExpungePolicy()) { Timber.d("SYNC: Expunging folder %s:%s", account.getDescription(), folder); remoteFolder.expunge(); } remoteFolder.open(Folder.OPEN_MODE_RO); } notificationController.clearAuthenticationErrorNotification(account, true); /* Loading Loading @@ -1002,10 +990,7 @@ public class MessagingController { System.currentTimeMillis()); } finally { if (providedRemoteFolder == null) { closeFolder(remoteFolder); } closeFolder(tLocalFolder); } Loading Loading @@ -1125,12 +1110,6 @@ public class MessagingController { final List<Message> largeMessages = new ArrayList<>(); final List<Message> smallMessages = new ArrayList<>(); if (!unsyncedMessages.isEmpty()) { /* * Reverse the order of the messages. Depending on the server this may get us * fetch results for newest to oldest. If not, no harm done. */ Collections.sort(unsyncedMessages, new UidReverseComparator()); int visibleLimit = localFolder.getVisibleLimit(); int listSize = unsyncedMessages.size(); Loading @@ -1149,15 +1128,6 @@ public class MessagingController { fetchUnsyncedMessages(account, remoteFolder, unsyncedMessages, smallMessages, largeMessages, progress, todo, fp); String updatedPushState = localFolder.getPushState(); for (Message message : unsyncedMessages) { String newPushState = remoteFolder.getNewPushState(updatedPushState, message); if (newPushState != null) { updatedPushState = newPushState; } } localFolder.setPushState(updatedPushState); Timber.d("SYNC: Synced unsynced messages for folder %s", folder); } Loading Loading @@ -1343,16 +1313,6 @@ public class MessagingController { }); } private boolean shouldImportMessage(final Account account, final Message message, final Date earliestDate) { if (account.isSearchByDateCapable() && message.olderThan(earliestDate)) { Timber.d("Message %s is older than %s, hence not saving", message.getUid(), earliestDate); return false; } return true; } private <T extends Message> void downloadSmallMessages(final Account account, final Folder<T> remoteFolder, final LocalFolder localFolder, List<T> smallMessages, Loading @@ -1363,8 +1323,6 @@ public class MessagingController { FetchProfile fp) throws MessagingException { final String folder = remoteFolder.getName(); final Date earliestDate = account.getEarliestPollDate(); Timber.d("SYNC: Fetching %d small messages for folder %s", smallMessages.size(), folder); remoteFolder.fetch(smallMessages, Loading @@ -1373,12 +1331,6 @@ public class MessagingController { public void messageFinished(final T message, int number, int ofTotal) { try { if (!shouldImportMessage(account, message, earliestDate)) { progress.incrementAndGet(); return; } // Store the updated message locally final LocalMessage localMessage = localFolder.storeSmallMessage(message, new Runnable() { @Override Loading Loading @@ -1436,18 +1388,12 @@ public class MessagingController { final int todo, FetchProfile fp) throws MessagingException { final String folder = remoteFolder.getName(); final Date earliestDate = account.getEarliestPollDate(); Timber.d("SYNC: Fetching large messages for folder %s", folder); remoteFolder.fetch(largeMessages, fp, null); for (T message : largeMessages) { if (!shouldImportMessage(account, message, earliestDate)) { progress.incrementAndGet(); continue; } if (message.getBody() == null) { downloadSaneBody(account, remoteFolder, localFolder, message); } else { Loading k9mail/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java +24 −38 Original line number Diff line number Diff line Loading @@ -616,9 +616,10 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withOneMessageInRemoteFolder_shouldFinishWithoutError() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(listener).synchronizeMailboxFinished(account, FOLDER_NAME, 1, 0); } Loading @@ -626,9 +627,10 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withEmptyRemoteFolder_shouldFinishWithoutError() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(0); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(listener).synchronizeMailboxFinished(account, FOLDER_NAME, 0, 0); } Loading @@ -636,9 +638,10 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withNegativeMessageCountInRemoteFolder_shouldFinishWithError() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(-1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(listener).synchronizeMailboxFailed(account, FOLDER_NAME, "Exception: Message count -1 for folder Folder"); Loading @@ -649,7 +652,7 @@ public class MessagingControllerTest { throws Exception { messageCountInRemoteFolder(1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, never()).open(Folder.OPEN_MODE_RW); } Loading @@ -660,7 +663,7 @@ public class MessagingControllerTest { messageCountInRemoteFolder(1); configureRemoteStoreWithFolder(); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder).open(Folder.OPEN_MODE_RO); } Loading @@ -669,7 +672,7 @@ public class MessagingControllerTest { public void synchronizeMailboxSynchronousLegacy_withRemoteFolderProvided_shouldNotCloseRemoteFolder() throws Exception { messageCountInRemoteFolder(1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, never()).close(); } Loading @@ -680,37 +683,15 @@ public class MessagingControllerTest { messageCountInRemoteFolder(1); configureRemoteStoreWithFolder(); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder).close(); } @Test public void synchronizeMailboxSynchronousLegacy_withAccountPolicySetToExpungeOnPoll_shouldExpungeRemoteFolder() throws Exception { messageCountInRemoteFolder(1); when(account.getExpungePolicy()).thenReturn(Account.Expunge.EXPUNGE_ON_POLL); configureRemoteStoreWithFolder(); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); verify(remoteFolder).expunge(); } @Test public void synchronizeMailboxSynchronousLegacy_withAccountPolicySetToExpungeManually_shouldNotExpungeRemoteFolder() throws Exception { messageCountInRemoteFolder(1); when(account.getExpungePolicy()).thenReturn(Account.Expunge.EXPUNGE_MANUALLY); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); verify(remoteFolder, never()).expunge(); } @Test public void synchronizeMailboxSynchronousLegacy_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfDeletedMessages() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(0); LocalMessage localCopyOfRemoteDeletedMessage = mock(LocalMessage.class); when(account.syncRemoteDeletions()).thenReturn(true); Loading @@ -718,7 +699,7 @@ public class MessagingControllerTest { when(localFolder.getMessagesByUids(any(List.class))) .thenReturn(Collections.singletonList(localCopyOfRemoteDeletedMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder).destroyMessages(messageListCaptor.capture()); assertEquals(localCopyOfRemoteDeletedMessage, messageListCaptor.getValue().get(0)); Loading @@ -735,7 +716,7 @@ public class MessagingControllerTest { when(localMessage.olderThan(dateOfEarliestPoll)).thenReturn(false); when(localFolder.getMessages(null)).thenReturn(Collections.singletonList(localMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder, never()).destroyMessages(messageListCaptor.capture()); } Loading @@ -743,6 +724,7 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfExistingMessagesBeforeEarliestPollDate() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); LocalMessage localMessage = localMessageWithCopyOnServer(); Date dateOfEarliestPoll = new Date(); Loading @@ -752,7 +734,7 @@ public class MessagingControllerTest { when(localFolder.getAllMessagesAndEffectiveDates()).thenReturn(Collections.singletonMap(MESSAGE_UID1, 0L)); when(localFolder.getMessagesByUids(any(List.class))).thenReturn(Collections.singletonList(localMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder).destroyMessages(messageListCaptor.capture()); assertEquals(localMessage, messageListCaptor.getValue().get(0)); Loading @@ -766,7 +748,7 @@ public class MessagingControllerTest { when(account.syncRemoteDeletions()).thenReturn(false); when(localFolder.getMessages(null)).thenReturn(Collections.singletonList(remoteDeletedMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder, never()).destroyMessages(messageListCaptor.capture()); } Loading @@ -774,11 +756,12 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withAccountSupportingFetchingFlags_shouldFetchUnsychronizedMessagesListAndFlags() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(true); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, atLeastOnce()).fetch(any(List.class), fetchProfileCaptor.capture(), any(MessageRetrievalListener.class)); Loading @@ -790,11 +773,12 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withAccountNotSupportingFetchingFlags_shouldFetchUnsychronizedMessages() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(false); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, atLeastOnce()).fetch(any(List.class), fetchProfileCaptor.capture(), any(MessageRetrievalListener.class)); Loading @@ -806,12 +790,13 @@ public class MessagingControllerTest { public void synchronizeMailboxSynchronousLegacy_withUnsyncedNewSmallMessage_shouldFetchBodyOfSmallMessage() throws Exception { Message smallMessage = buildSmallNewMessage(); configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(false); respondToFetchEnvelopesWithMessage(smallMessage); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, atLeast(2)).fetch(any(List.class), fetchProfileCaptor.capture(), any(MessageRetrievalListener.class)); Loading @@ -823,12 +808,13 @@ public class MessagingControllerTest { public void synchronizeMailboxSynchronousLegacy_withUnsyncedNewSmallMessage_shouldFetchStructureAndLimitedBodyOfLargeMessage() throws Exception { Message largeMessage = buildLargeNewMessage(); configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(false); respondToFetchEnvelopesWithMessage(largeMessage); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); //TODO: Don't bother fetching messages of a size we don't have verify(remoteFolder, atLeast(4)).fetch(any(List.class), fetchProfileCaptor.capture(), Loading Loading
k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java +31 −85 Original line number Diff line number Diff line Loading @@ -741,12 +741,11 @@ public class MessagingController { if (remoteMessageStore != null) { remoteMessageStore.sync(account, folder, listener, providedRemoteFolder); } else { synchronizeMailboxSynchronousLegacy(account, folder, listener, providedRemoteFolder); synchronizeMailboxSynchronousLegacy(account, folder, listener); } } void synchronizeMailboxSynchronousLegacy(final Account account, final String folder, final MessagingListener listener, Folder providedRemoteFolder) { void synchronizeMailboxSynchronousLegacy(Account account, String folder, MessagingListener listener) { Folder remoteFolder = null; LocalFolder tLocalFolder = null; Loading Loading @@ -788,13 +787,8 @@ public class MessagingController { tLocalFolder = localStore.getFolder(folder); final LocalFolder localFolder = tLocalFolder; localFolder.open(Folder.OPEN_MODE_RW); localFolder.updateLastUid(); Map<String, Long> localUidMap = localFolder.getAllMessagesAndEffectiveDates(); if (providedRemoteFolder != null) { Timber.v("SYNC: using providedRemoteFolder %s", folder); remoteFolder = providedRemoteFolder; } else { Store remoteStore = account.getRemoteStore(); Timber.v("SYNC: About to get remote folder %s", folder); Loading Loading @@ -828,14 +822,8 @@ public class MessagingController { */ Timber.v("SYNC: About to open remote folder %s", folder); if (Expunge.EXPUNGE_ON_POLL == account.getExpungePolicy()) { Timber.d("SYNC: Expunging folder %s:%s", account.getDescription(), folder); remoteFolder.expunge(); } remoteFolder.open(Folder.OPEN_MODE_RO); } notificationController.clearAuthenticationErrorNotification(account, true); /* Loading Loading @@ -1002,10 +990,7 @@ public class MessagingController { System.currentTimeMillis()); } finally { if (providedRemoteFolder == null) { closeFolder(remoteFolder); } closeFolder(tLocalFolder); } Loading Loading @@ -1125,12 +1110,6 @@ public class MessagingController { final List<Message> largeMessages = new ArrayList<>(); final List<Message> smallMessages = new ArrayList<>(); if (!unsyncedMessages.isEmpty()) { /* * Reverse the order of the messages. Depending on the server this may get us * fetch results for newest to oldest. If not, no harm done. */ Collections.sort(unsyncedMessages, new UidReverseComparator()); int visibleLimit = localFolder.getVisibleLimit(); int listSize = unsyncedMessages.size(); Loading @@ -1149,15 +1128,6 @@ public class MessagingController { fetchUnsyncedMessages(account, remoteFolder, unsyncedMessages, smallMessages, largeMessages, progress, todo, fp); String updatedPushState = localFolder.getPushState(); for (Message message : unsyncedMessages) { String newPushState = remoteFolder.getNewPushState(updatedPushState, message); if (newPushState != null) { updatedPushState = newPushState; } } localFolder.setPushState(updatedPushState); Timber.d("SYNC: Synced unsynced messages for folder %s", folder); } Loading Loading @@ -1343,16 +1313,6 @@ public class MessagingController { }); } private boolean shouldImportMessage(final Account account, final Message message, final Date earliestDate) { if (account.isSearchByDateCapable() && message.olderThan(earliestDate)) { Timber.d("Message %s is older than %s, hence not saving", message.getUid(), earliestDate); return false; } return true; } private <T extends Message> void downloadSmallMessages(final Account account, final Folder<T> remoteFolder, final LocalFolder localFolder, List<T> smallMessages, Loading @@ -1363,8 +1323,6 @@ public class MessagingController { FetchProfile fp) throws MessagingException { final String folder = remoteFolder.getName(); final Date earliestDate = account.getEarliestPollDate(); Timber.d("SYNC: Fetching %d small messages for folder %s", smallMessages.size(), folder); remoteFolder.fetch(smallMessages, Loading @@ -1373,12 +1331,6 @@ public class MessagingController { public void messageFinished(final T message, int number, int ofTotal) { try { if (!shouldImportMessage(account, message, earliestDate)) { progress.incrementAndGet(); return; } // Store the updated message locally final LocalMessage localMessage = localFolder.storeSmallMessage(message, new Runnable() { @Override Loading Loading @@ -1436,18 +1388,12 @@ public class MessagingController { final int todo, FetchProfile fp) throws MessagingException { final String folder = remoteFolder.getName(); final Date earliestDate = account.getEarliestPollDate(); Timber.d("SYNC: Fetching large messages for folder %s", folder); remoteFolder.fetch(largeMessages, fp, null); for (T message : largeMessages) { if (!shouldImportMessage(account, message, earliestDate)) { progress.incrementAndGet(); continue; } if (message.getBody() == null) { downloadSaneBody(account, remoteFolder, localFolder, message); } else { Loading
k9mail/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java +24 −38 Original line number Diff line number Diff line Loading @@ -616,9 +616,10 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withOneMessageInRemoteFolder_shouldFinishWithoutError() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(listener).synchronizeMailboxFinished(account, FOLDER_NAME, 1, 0); } Loading @@ -626,9 +627,10 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withEmptyRemoteFolder_shouldFinishWithoutError() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(0); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(listener).synchronizeMailboxFinished(account, FOLDER_NAME, 0, 0); } Loading @@ -636,9 +638,10 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withNegativeMessageCountInRemoteFolder_shouldFinishWithError() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(-1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(listener).synchronizeMailboxFailed(account, FOLDER_NAME, "Exception: Message count -1 for folder Folder"); Loading @@ -649,7 +652,7 @@ public class MessagingControllerTest { throws Exception { messageCountInRemoteFolder(1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, never()).open(Folder.OPEN_MODE_RW); } Loading @@ -660,7 +663,7 @@ public class MessagingControllerTest { messageCountInRemoteFolder(1); configureRemoteStoreWithFolder(); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder).open(Folder.OPEN_MODE_RO); } Loading @@ -669,7 +672,7 @@ public class MessagingControllerTest { public void synchronizeMailboxSynchronousLegacy_withRemoteFolderProvided_shouldNotCloseRemoteFolder() throws Exception { messageCountInRemoteFolder(1); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, never()).close(); } Loading @@ -680,37 +683,15 @@ public class MessagingControllerTest { messageCountInRemoteFolder(1); configureRemoteStoreWithFolder(); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder).close(); } @Test public void synchronizeMailboxSynchronousLegacy_withAccountPolicySetToExpungeOnPoll_shouldExpungeRemoteFolder() throws Exception { messageCountInRemoteFolder(1); when(account.getExpungePolicy()).thenReturn(Account.Expunge.EXPUNGE_ON_POLL); configureRemoteStoreWithFolder(); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); verify(remoteFolder).expunge(); } @Test public void synchronizeMailboxSynchronousLegacy_withAccountPolicySetToExpungeManually_shouldNotExpungeRemoteFolder() throws Exception { messageCountInRemoteFolder(1); when(account.getExpungePolicy()).thenReturn(Account.Expunge.EXPUNGE_MANUALLY); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null); verify(remoteFolder, never()).expunge(); } @Test public void synchronizeMailboxSynchronousLegacy_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfDeletedMessages() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(0); LocalMessage localCopyOfRemoteDeletedMessage = mock(LocalMessage.class); when(account.syncRemoteDeletions()).thenReturn(true); Loading @@ -718,7 +699,7 @@ public class MessagingControllerTest { when(localFolder.getMessagesByUids(any(List.class))) .thenReturn(Collections.singletonList(localCopyOfRemoteDeletedMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder).destroyMessages(messageListCaptor.capture()); assertEquals(localCopyOfRemoteDeletedMessage, messageListCaptor.getValue().get(0)); Loading @@ -735,7 +716,7 @@ public class MessagingControllerTest { when(localMessage.olderThan(dateOfEarliestPoll)).thenReturn(false); when(localFolder.getMessages(null)).thenReturn(Collections.singletonList(localMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder, never()).destroyMessages(messageListCaptor.capture()); } Loading @@ -743,6 +724,7 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfExistingMessagesBeforeEarliestPollDate() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); LocalMessage localMessage = localMessageWithCopyOnServer(); Date dateOfEarliestPoll = new Date(); Loading @@ -752,7 +734,7 @@ public class MessagingControllerTest { when(localFolder.getAllMessagesAndEffectiveDates()).thenReturn(Collections.singletonMap(MESSAGE_UID1, 0L)); when(localFolder.getMessagesByUids(any(List.class))).thenReturn(Collections.singletonList(localMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder).destroyMessages(messageListCaptor.capture()); assertEquals(localMessage, messageListCaptor.getValue().get(0)); Loading @@ -766,7 +748,7 @@ public class MessagingControllerTest { when(account.syncRemoteDeletions()).thenReturn(false); when(localFolder.getMessages(null)).thenReturn(Collections.singletonList(remoteDeletedMessage)); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(localFolder, never()).destroyMessages(messageListCaptor.capture()); } Loading @@ -774,11 +756,12 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withAccountSupportingFetchingFlags_shouldFetchUnsychronizedMessagesListAndFlags() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(true); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, atLeastOnce()).fetch(any(List.class), fetchProfileCaptor.capture(), any(MessageRetrievalListener.class)); Loading @@ -790,11 +773,12 @@ public class MessagingControllerTest { @Test public void synchronizeMailboxSynchronousLegacy_withAccountNotSupportingFetchingFlags_shouldFetchUnsychronizedMessages() throws Exception { configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(false); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, atLeastOnce()).fetch(any(List.class), fetchProfileCaptor.capture(), any(MessageRetrievalListener.class)); Loading @@ -806,12 +790,13 @@ public class MessagingControllerTest { public void synchronizeMailboxSynchronousLegacy_withUnsyncedNewSmallMessage_shouldFetchBodyOfSmallMessage() throws Exception { Message smallMessage = buildSmallNewMessage(); configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(false); respondToFetchEnvelopesWithMessage(smallMessage); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); verify(remoteFolder, atLeast(2)).fetch(any(List.class), fetchProfileCaptor.capture(), any(MessageRetrievalListener.class)); Loading @@ -823,12 +808,13 @@ public class MessagingControllerTest { public void synchronizeMailboxSynchronousLegacy_withUnsyncedNewSmallMessage_shouldFetchStructureAndLimitedBodyOfLargeMessage() throws Exception { Message largeMessage = buildLargeNewMessage(); configureRemoteStoreWithFolder(); messageCountInRemoteFolder(1); hasUnsyncedRemoteMessage(); when(remoteFolder.supportsFetchingFlags()).thenReturn(false); respondToFetchEnvelopesWithMessage(largeMessage); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder); controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener); //TODO: Don't bother fetching messages of a size we don't have verify(remoteFolder, atLeast(4)).fetch(any(List.class), fetchProfileCaptor.capture(), Loading