Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 276f8ead authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #6777 from thundernest/fix_DefaultMessageCountsProvider_NPE

Fix crash in `DefaultMessageCountsProvider`
parents 76eeff60 b5964f32
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ internal class DefaultMessageCountsProvider(
        }
    }

    private fun getMessageCounts(account: Account, conditions: ConditionsTreeNode): MessageCounts {
    private fun getMessageCounts(account: Account, conditions: ConditionsTreeNode?): MessageCounts {
        return try {
            val messageStore = messageStoreManager.getMessageStore(account)
            return MessageCounts(
+2 −2
Original line number Diff line number Diff line
@@ -235,12 +235,12 @@ interface MessageStore {
    /**
     * Retrieve the number of unread messages matching [conditions].
     */
    fun getUnreadMessageCount(conditions: ConditionsTreeNode): Int
    fun getUnreadMessageCount(conditions: ConditionsTreeNode?): Int

    /**
     * Retrieve the number of starred messages matching [conditions].
     */
    fun getStarredMessageCount(conditions: ConditionsTreeNode): Int
    fun getStarredMessageCount(conditions: ConditionsTreeNode?): Int

    /**
     * Update a folder's name and type.
+48 −0
Original line number Diff line number Diff line
package com.fsck.k9.controller

import assertk.assertThat
import assertk.assertions.isEqualTo
import com.fsck.k9.Account
import com.fsck.k9.Account.FolderMode
import com.fsck.k9.Preferences
import com.fsck.k9.mailstore.ListenableMessageStore
import com.fsck.k9.mailstore.MessageStoreManager
import com.fsck.k9.search.ConditionsTreeNode
import org.junit.Test
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock

private const val ACCOUNT_UUID = "irrelevant"
private const val UNREAD_COUNT = 2
private const val STARRED_COUNT = 3

class DefaultMessageCountsProviderTest {
    private val preferences = mock<Preferences>()
    private val account = Account(ACCOUNT_UUID)
    private val messageStore = mock<ListenableMessageStore> {
        on { getUnreadMessageCount(anyOrNull<ConditionsTreeNode>()) } doReturn UNREAD_COUNT
        on { getStarredMessageCount(anyOrNull()) } doReturn STARRED_COUNT
    }
    private val messageStoreManager = mock<MessageStoreManager> {
        on { getMessageStore(account) } doReturn messageStore
    }

    private val messageCountsProvider = DefaultMessageCountsProvider(preferences, messageStoreManager)

    @Test
    fun `getMessageCounts() without any special folders and displayMode = ALL`() {
        account.inboxFolderId = null
        account.trashFolderId = null
        account.draftsFolderId = null
        account.spamFolderId = null
        account.outboxFolderId = null
        account.sentFolderId = null
        account.folderDisplayMode = FolderMode.ALL

        val messageCounts = messageCountsProvider.getMessageCounts(account)

        assertThat(messageCounts.unread).isEqualTo(UNREAD_COUNT)
        assertThat(messageCounts.starred).isEqualTo(STARRED_COUNT)
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -185,11 +185,11 @@ class K9MessageStore(
        return retrieveFolderOperations.getUnreadMessageCount(folderId)
    }

    override fun getUnreadMessageCount(conditions: ConditionsTreeNode): Int {
    override fun getUnreadMessageCount(conditions: ConditionsTreeNode?): Int {
        return retrieveFolderOperations.getUnreadMessageCount(conditions)
    }

    override fun getStarredMessageCount(conditions: ConditionsTreeNode): Int {
    override fun getStarredMessageCount(conditions: ConditionsTreeNode?): Int {
        return retrieveFolderOperations.getStarredMessageCount(conditions)
    }

+3 −3
Original line number Diff line number Diff line
@@ -172,15 +172,15 @@ $displayModeSelection
        }
    }

    fun getUnreadMessageCount(conditions: ConditionsTreeNode): Int {
    fun getUnreadMessageCount(conditions: ConditionsTreeNode?): Int {
        return getMessageCount(condition = "messages.read = 0", conditions)
    }

    fun getStarredMessageCount(conditions: ConditionsTreeNode): Int {
    fun getStarredMessageCount(conditions: ConditionsTreeNode?): Int {
        return getMessageCount(condition = "messages.flagged = 1", conditions)
    }

    private fun getMessageCount(condition: String, extraConditions: ConditionsTreeNode): Int {
    private fun getMessageCount(condition: String, extraConditions: ConditionsTreeNode?): Int {
        val whereBuilder = StringBuilder()
        val queryArgs = mutableListOf<String>()
        SqlQueryBuilder.buildWhereClause(extraConditions, whereBuilder, queryArgs)
Loading