Move UnreadWidgetDataProviderTest
to :app:common
This commit is contained in:
parent
6bc1633897
commit
02b1940bac
3 changed files with 109 additions and 153 deletions
|
@ -1,150 +0,0 @@
|
||||||
package net.thunderbird.android.unread
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import assertk.assertThat
|
|
||||||
import assertk.assertions.isEqualTo
|
|
||||||
import assertk.assertions.isNull
|
|
||||||
import com.fsck.k9.Account
|
|
||||||
import com.fsck.k9.Preferences
|
|
||||||
import com.fsck.k9.controller.MessageCounts
|
|
||||||
import com.fsck.k9.controller.MessageCountsProvider
|
|
||||||
import com.fsck.k9.mailstore.Folder
|
|
||||||
import com.fsck.k9.mailstore.FolderRepository
|
|
||||||
import com.fsck.k9.mailstore.FolderType
|
|
||||||
import com.fsck.k9.search.SearchAccount
|
|
||||||
import com.fsck.k9.ui.folders.FolderNameFormatter
|
|
||||||
import com.fsck.k9.ui.messagelist.DefaultFolderProvider
|
|
||||||
import com.fsck.k9.widget.unread.UnreadWidgetConfiguration
|
|
||||||
import com.fsck.k9.widget.unread.UnreadWidgetDataProvider
|
|
||||||
import org.junit.Test
|
|
||||||
import org.junit.runner.RunWith
|
|
||||||
import org.koin.test.AutoCloseKoinTest
|
|
||||||
import org.mockito.kotlin.doReturn
|
|
||||||
import org.mockito.kotlin.mock
|
|
||||||
import org.robolectric.RobolectricTestRunner
|
|
||||||
import org.robolectric.RuntimeEnvironment
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner::class)
|
|
||||||
class UnreadWidgetDataProviderTest : AutoCloseKoinTest() {
|
|
||||||
private val context: Context = RuntimeEnvironment.getApplication()
|
|
||||||
private val account = createAccount()
|
|
||||||
private val preferences = createPreferences()
|
|
||||||
private val messageCountsProvider = createMessageCountsProvider()
|
|
||||||
private val defaultFolderStrategy = createDefaultFolderStrategy()
|
|
||||||
private val folderRepository = createFolderRepository()
|
|
||||||
private val folderNameFormatter = createFolderNameFormatter()
|
|
||||||
private val provider = UnreadWidgetDataProvider(
|
|
||||||
context,
|
|
||||||
preferences,
|
|
||||||
messageCountsProvider,
|
|
||||||
defaultFolderStrategy,
|
|
||||||
folderRepository,
|
|
||||||
folderNameFormatter,
|
|
||||||
)
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun unifiedInbox() {
|
|
||||||
val configuration = UnreadWidgetConfiguration(
|
|
||||||
appWidgetId = 1,
|
|
||||||
accountUuid = SearchAccount.UNIFIED_INBOX,
|
|
||||||
folderId = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
val widgetData = provider.loadUnreadWidgetData(configuration)
|
|
||||||
|
|
||||||
with(widgetData!!) {
|
|
||||||
assertThat(title).isEqualTo("Unified Inbox")
|
|
||||||
assertThat(unreadCount).isEqualTo(SEARCH_ACCOUNT_UNREAD_COUNT)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun regularAccount() {
|
|
||||||
val configuration = UnreadWidgetConfiguration(
|
|
||||||
appWidgetId = 3,
|
|
||||||
accountUuid = ACCOUNT_UUID,
|
|
||||||
folderId = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
val widgetData = provider.loadUnreadWidgetData(configuration)
|
|
||||||
|
|
||||||
with(widgetData!!) {
|
|
||||||
assertThat(title).isEqualTo(ACCOUNT_NAME)
|
|
||||||
assertThat(unreadCount).isEqualTo(ACCOUNT_UNREAD_COUNT)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun folder() {
|
|
||||||
val configuration = UnreadWidgetConfiguration(appWidgetId = 4, accountUuid = ACCOUNT_UUID, folderId = FOLDER_ID)
|
|
||||||
|
|
||||||
val widgetData = provider.loadUnreadWidgetData(configuration)
|
|
||||||
|
|
||||||
with(widgetData!!) {
|
|
||||||
assertThat(title).isEqualTo("$ACCOUNT_NAME - $LOCALIZED_FOLDER_NAME")
|
|
||||||
assertThat(unreadCount).isEqualTo(FOLDER_UNREAD_COUNT)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun nonExistentAccount_shouldReturnNull() {
|
|
||||||
val configuration = UnreadWidgetConfiguration(appWidgetId = 3, accountUuid = "invalid", folderId = null)
|
|
||||||
|
|
||||||
val widgetData = provider.loadUnreadWidgetData(configuration)
|
|
||||||
|
|
||||||
assertThat(widgetData).isNull()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createAccount(): Account = mock {
|
|
||||||
on { uuid } doReturn ACCOUNT_UUID
|
|
||||||
on { displayName } doReturn ACCOUNT_NAME
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createPreferences(): Preferences = mock {
|
|
||||||
on { getAccount(ACCOUNT_UUID) } doReturn account
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createMessageCountsProvider() = object : MessageCountsProvider {
|
|
||||||
override fun getMessageCounts(account: Account): MessageCounts {
|
|
||||||
return MessageCounts(unread = ACCOUNT_UNREAD_COUNT, starred = 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getMessageCounts(searchAccount: SearchAccount): MessageCounts {
|
|
||||||
return MessageCounts(unread = SEARCH_ACCOUNT_UNREAD_COUNT, starred = 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getUnreadMessageCount(account: Account, folderId: Long): Int {
|
|
||||||
return FOLDER_UNREAD_COUNT
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createDefaultFolderStrategy(): DefaultFolderProvider = mock {
|
|
||||||
on { getDefaultFolder(account) } doReturn FOLDER_ID
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createFolderRepository(): FolderRepository {
|
|
||||||
return mock {
|
|
||||||
on { getFolder(account, FOLDER_ID) } doReturn FOLDER
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createFolderNameFormatter(): FolderNameFormatter = mock {
|
|
||||||
on { displayName(FOLDER) } doReturn LOCALIZED_FOLDER_NAME
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
const val ACCOUNT_UUID = "00000000-0000-0000-0000-000000000000"
|
|
||||||
const val ACCOUNT_NAME = "Test account"
|
|
||||||
const val FOLDER_ID = 23L
|
|
||||||
const val SEARCH_ACCOUNT_UNREAD_COUNT = 1
|
|
||||||
const val ACCOUNT_UNREAD_COUNT = 2
|
|
||||||
const val FOLDER_UNREAD_COUNT = 3
|
|
||||||
const val LOCALIZED_FOLDER_NAME = "Posteingang"
|
|
||||||
val FOLDER = Folder(
|
|
||||||
id = FOLDER_ID,
|
|
||||||
name = "INBOX",
|
|
||||||
type = FolderType.INBOX,
|
|
||||||
isLocalOnly = false,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
package com.fsck.k9.widget.unread
|
||||||
|
|
||||||
|
import com.fsck.k9.CoreResourceProvider
|
||||||
|
import com.fsck.k9.notification.PushNotificationState
|
||||||
|
|
||||||
|
class FakeCoreResourceProvider : CoreResourceProvider {
|
||||||
|
override fun searchUnifiedInboxTitle(): String = "Unified Inbox"
|
||||||
|
|
||||||
|
override fun searchUnifiedInboxDetail(): String = "All messages in unified folders"
|
||||||
|
|
||||||
|
override fun defaultSignature(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun defaultIdentityDescription(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun contactDisplayNamePrefix(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun contactUnknownSender(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun contactUnknownRecipient(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun messageHeaderFrom(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun messageHeaderTo(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun messageHeaderCc(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun messageHeaderDate(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun messageHeaderSubject(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun messageHeaderSeparator(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun noSubject(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun userAgent(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun encryptedSubject(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replyHeader(sender: String): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replyHeader(sender: String, sentDate: String): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun outboxFolderName(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override val iconPushNotification: Int
|
||||||
|
get() = throw UnsupportedOperationException("not implemented")
|
||||||
|
|
||||||
|
override fun pushNotificationText(notificationState: PushNotificationState): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun pushNotificationInfoText(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun pushNotificationGrantAlarmPermissionText(): String {
|
||||||
|
throw UnsupportedOperationException("not implemented")
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,11 @@
|
||||||
package app.k9mail.unread
|
package com.fsck.k9.widget.unread
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import assertk.assertThat
|
import assertk.assertThat
|
||||||
import assertk.assertions.isEqualTo
|
import assertk.assertions.isEqualTo
|
||||||
import assertk.assertions.isNull
|
import assertk.assertions.isNull
|
||||||
import com.fsck.k9.Account
|
import com.fsck.k9.Account
|
||||||
|
import com.fsck.k9.CoreResourceProvider
|
||||||
import com.fsck.k9.Preferences
|
import com.fsck.k9.Preferences
|
||||||
import com.fsck.k9.controller.MessageCounts
|
import com.fsck.k9.controller.MessageCounts
|
||||||
import com.fsck.k9.controller.MessageCountsProvider
|
import com.fsck.k9.controller.MessageCountsProvider
|
||||||
|
@ -14,10 +15,11 @@ import com.fsck.k9.mailstore.FolderType
|
||||||
import com.fsck.k9.search.SearchAccount
|
import com.fsck.k9.search.SearchAccount
|
||||||
import com.fsck.k9.ui.folders.FolderNameFormatter
|
import com.fsck.k9.ui.folders.FolderNameFormatter
|
||||||
import com.fsck.k9.ui.messagelist.DefaultFolderProvider
|
import com.fsck.k9.ui.messagelist.DefaultFolderProvider
|
||||||
import com.fsck.k9.widget.unread.UnreadWidgetConfiguration
|
import org.junit.Before
|
||||||
import com.fsck.k9.widget.unread.UnreadWidgetDataProvider
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
import org.koin.core.context.startKoin
|
||||||
|
import org.koin.dsl.module
|
||||||
import org.koin.test.AutoCloseKoinTest
|
import org.koin.test.AutoCloseKoinTest
|
||||||
import org.mockito.kotlin.doReturn
|
import org.mockito.kotlin.doReturn
|
||||||
import org.mockito.kotlin.mock
|
import org.mockito.kotlin.mock
|
||||||
|
@ -42,6 +44,17 @@ class UnreadWidgetDataProviderTest : AutoCloseKoinTest() {
|
||||||
folderNameFormatter,
|
folderNameFormatter,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
startKoin {
|
||||||
|
modules(
|
||||||
|
module {
|
||||||
|
factory<CoreResourceProvider> { FakeCoreResourceProvider() }
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun unifiedInbox() {
|
fun unifiedInbox() {
|
||||||
val configuration = UnreadWidgetConfiguration(
|
val configuration = UnreadWidgetConfiguration(
|
Loading…
Reference in a new issue