Add mailbox chooser to messages (#2002)

This commit is contained in:
Mikołaj Pich 2022-11-16 13:46:47 +01:00 committed by GitHub
parent db4f172fb8
commit 51a1097bb4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
41 changed files with 3209 additions and 235 deletions

View file

@ -27,7 +27,9 @@ fun getMailboxEntity() = Mailbox(
globalKey = "v4",
fullName = "",
userName = "",
userLoginId = 0,
email = "test",
symbol = "powiatwulkanowy",
schoolId = "123456",
studentName = "",
schoolNameShort = "",
type = MailboxType.UNKNOWN,

View file

@ -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 = "",

View file

@ -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,