forked from github/wulkanowy-mirror
Add mailbox chooser to messages (#2002)
This commit is contained in:
parent
db4f172fb8
commit
51a1097bb4
41 changed files with 3209 additions and 235 deletions
|
@ -27,7 +27,9 @@ fun getMailboxEntity() = Mailbox(
|
|||
globalKey = "v4",
|
||||
fullName = "",
|
||||
userName = "",
|
||||
userLoginId = 0,
|
||||
email = "test",
|
||||
symbol = "powiatwulkanowy",
|
||||
schoolId = "123456",
|
||||
studentName = "",
|
||||
schoolNameShort = "",
|
||||
type = MailboxType.UNKNOWN,
|
||||
|
|
|
@ -3,6 +3,7 @@ package io.github.wulkanowy.data.repositories
|
|||
import android.content.Context
|
||||
import io.github.wulkanowy.data.dataOrNull
|
||||
import io.github.wulkanowy.data.db.SharedPrefProvider
|
||||
import io.github.wulkanowy.data.db.dao.MailboxDao
|
||||
import io.github.wulkanowy.data.db.dao.MessageAttachmentDao
|
||||
import io.github.wulkanowy.data.db.dao.MessagesDao
|
||||
import io.github.wulkanowy.data.db.entities.Message
|
||||
|
@ -10,6 +11,7 @@ import io.github.wulkanowy.data.db.entities.MessageWithAttachment
|
|||
import io.github.wulkanowy.data.enums.MessageFolder
|
||||
import io.github.wulkanowy.data.errorOrNull
|
||||
import io.github.wulkanowy.data.toFirstResult
|
||||
import io.github.wulkanowy.domain.messages.GetMailboxByStudentUseCase
|
||||
import io.github.wulkanowy.getMailboxEntity
|
||||
import io.github.wulkanowy.getStudentEntity
|
||||
import io.github.wulkanowy.sdk.Sdk
|
||||
|
@ -55,6 +57,12 @@ class MessageRepositoryTest {
|
|||
@MockK
|
||||
private lateinit var sharedPrefProvider: SharedPrefProvider
|
||||
|
||||
@MockK
|
||||
private lateinit var mailboxDao: MailboxDao
|
||||
|
||||
@MockK
|
||||
private lateinit var getMailboxByStudentUseCase: GetMailboxByStudentUseCase
|
||||
|
||||
private val student = getStudentEntity()
|
||||
|
||||
private val mailbox = getMailboxEntity()
|
||||
|
@ -74,26 +82,33 @@ class MessageRepositoryTest {
|
|||
refreshHelper = refreshHelper,
|
||||
sharedPrefProvider = sharedPrefProvider,
|
||||
json = Json,
|
||||
mailboxDao = mailboxDao,
|
||||
getMailboxByStudentUseCase = getMailboxByStudentUseCase,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get messages when fetched completely new message without notify`() = runBlocking {
|
||||
every { messageDb.loadAll(any(), any()) } returns flowOf(emptyList())
|
||||
coEvery { mailboxDao.loadAll(any()) } returns listOf(mailbox)
|
||||
every { messageDb.loadAll(mailbox.globalKey, any()) } returns flowOf(emptyList())
|
||||
coEvery { sdk.getMessages(Folder.RECEIVED, any()) } returns listOf(
|
||||
getMessageDto()
|
||||
getMessageDto().copy(
|
||||
unreadBy = 5,
|
||||
readBy = 10,
|
||||
)
|
||||
)
|
||||
coEvery { messageDb.deleteAll(any()) } just Runs
|
||||
coEvery { messageDb.insertAll(any()) } returns listOf()
|
||||
|
||||
repository.getMessages(
|
||||
val res = repository.getMessages(
|
||||
student = student,
|
||||
mailbox = mailbox,
|
||||
folder = MessageFolder.RECEIVED,
|
||||
forceRefresh = true,
|
||||
notify = false,
|
||||
).toFirstResult().dataOrNull.orEmpty()
|
||||
).toFirstResult()
|
||||
|
||||
assertEquals(null, res.errorOrNull)
|
||||
coVerify(exactly = 1) { messageDb.deleteAll(withArg { checkEquals(emptyList<Message>()) }) }
|
||||
coVerify {
|
||||
messageDb.insertAll(withArg {
|
||||
|
@ -187,6 +202,7 @@ class MessageRepositoryTest {
|
|||
) = Message(
|
||||
messageGlobalKey = "v4",
|
||||
mailboxKey = "",
|
||||
email = "",
|
||||
correspondents = "",
|
||||
messageId = messageId,
|
||||
subject = "",
|
||||
|
|
|
@ -1,65 +1,52 @@
|
|||
package io.github.wulkanowy.data.repositories
|
||||
package io.github.wulkanowy.domain
|
||||
|
||||
import io.github.wulkanowy.data.db.dao.MailboxDao
|
||||
import io.github.wulkanowy.data.db.entities.Mailbox
|
||||
import io.github.wulkanowy.data.db.entities.MailboxType
|
||||
import io.github.wulkanowy.data.db.entities.Student
|
||||
import io.github.wulkanowy.domain.messages.GetMailboxByStudentUseCase
|
||||
import io.github.wulkanowy.sdk.Sdk
|
||||
import io.github.wulkanowy.utils.AutoRefreshHelper
|
||||
import io.mockk.MockKAnnotations
|
||||
import io.mockk.Runs
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.impl.annotations.MockK
|
||||
import io.mockk.impl.annotations.SpyK
|
||||
import io.mockk.just
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import java.time.Instant
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNull
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
class MailboxRepositoryTest {
|
||||
|
||||
@SpyK
|
||||
private var sdk = Sdk()
|
||||
class GetMailboxByStudentUseCaseTest {
|
||||
|
||||
@MockK
|
||||
private lateinit var mailboxDao: MailboxDao
|
||||
|
||||
@MockK
|
||||
private lateinit var refreshHelper: AutoRefreshHelper
|
||||
|
||||
private lateinit var systemUnderTest: MailboxRepository
|
||||
private lateinit var systemUnderTest: GetMailboxByStudentUseCase
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
MockKAnnotations.init(this)
|
||||
|
||||
coEvery { refreshHelper.shouldBeRefreshed(any()) } returns false
|
||||
coEvery { refreshHelper.updateLastRefreshTimestamp(any()) } just Runs
|
||||
coEvery { mailboxDao.deleteAll(any()) } just Runs
|
||||
coEvery { mailboxDao.insertAll(any()) } returns emptyList()
|
||||
coEvery { mailboxDao.loadAll(any()) } returns emptyList()
|
||||
coEvery { sdk.getMailboxes() } returns emptyList()
|
||||
|
||||
systemUnderTest = MailboxRepository(
|
||||
mailboxDao = mailboxDao,
|
||||
sdk = sdk,
|
||||
refreshHelper = refreshHelper,
|
||||
)
|
||||
systemUnderTest = GetMailboxByStudentUseCase(mailboxDao = mailboxDao)
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException::class)
|
||||
@Test
|
||||
fun `get mailbox that doesn't exist`() = runTest {
|
||||
val student = getStudentEntity(
|
||||
userName = "Stanisław Kowalski",
|
||||
studentName = "Jan Kowalski",
|
||||
)
|
||||
coEvery { sdk.getMailboxes() } returns emptyList()
|
||||
coEvery { mailboxDao.loadAll(any()) } returns emptyList()
|
||||
|
||||
systemUnderTest.getMailbox(student)
|
||||
assertNull(systemUnderTest(student))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -73,7 +60,7 @@ class MailboxRepositoryTest {
|
|||
expectedMailbox,
|
||||
)
|
||||
|
||||
val selectedMailbox = systemUnderTest.getMailbox(student)
|
||||
val selectedMailbox = systemUnderTest(student)
|
||||
assertEquals(expectedMailbox, selectedMailbox)
|
||||
}
|
||||
|
||||
|
@ -88,7 +75,7 @@ class MailboxRepositoryTest {
|
|||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
assertEquals(expectedMailbox, systemUnderTest(student))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -102,10 +89,10 @@ class MailboxRepositoryTest {
|
|||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
assertEquals(expectedMailbox, systemUnderTest(student))
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException::class)
|
||||
@Test
|
||||
fun `get mailbox for not-unique non-authorized student`() = runTest {
|
||||
val student = getStudentEntity(
|
||||
userName = "Stanisław Kowalski",
|
||||
|
@ -116,7 +103,7 @@ class MailboxRepositoryTest {
|
|||
getMailboxEntity("Jan Kurowski"),
|
||||
)
|
||||
|
||||
systemUnderTest.getMailbox(student)
|
||||
assertNull(systemUnderTest(student))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -130,7 +117,7 @@ class MailboxRepositoryTest {
|
|||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
assertEquals(expectedMailbox, systemUnderTest(student))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -144,7 +131,7 @@ class MailboxRepositoryTest {
|
|||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
assertEquals(expectedMailbox, systemUnderTest(student))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -158,7 +145,7 @@ class MailboxRepositoryTest {
|
|||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
assertEquals(expectedMailbox, systemUnderTest(student))
|
||||
}
|
||||
|
||||
private fun getMailboxEntity(
|
||||
|
@ -167,7 +154,9 @@ class MailboxRepositoryTest {
|
|||
globalKey = "",
|
||||
fullName = "",
|
||||
userName = "",
|
||||
userLoginId = 123,
|
||||
email = "",
|
||||
schoolId = "",
|
||||
symbol = "",
|
||||
studentName = studentName,
|
||||
schoolNameShort = "",
|
||||
type = MailboxType.STUDENT,
|
Loading…
Add table
Add a link
Reference in a new issue