Automatically show current student mailbox only when there is only one mailbox available (#2085)

* Automatically show current student mailbox only when there is only one mailbox for this student available

* Fallback to 'unknown' mailbox key if there is no matching mailbox to message
This commit is contained in:
Mikołaj Pich 2022-12-21 00:31:29 +01:00 committed by GitHub
parent 09c968f273
commit ede5914d70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 4 deletions

View File

@ -2,6 +2,7 @@ package io.github.wulkanowy.data.mappers
import io.github.wulkanowy.data.db.entities.*
import io.github.wulkanowy.sdk.pojo.MailboxType
import timber.log.Timber
import io.github.wulkanowy.sdk.pojo.Message as SdkMessage
import io.github.wulkanowy.sdk.pojo.MessageAttachment as SdkMessageAttachment
import io.github.wulkanowy.sdk.pojo.Recipient as SdkRecipient
@ -16,7 +17,10 @@ fun List<SdkMessage>.mapToEntities(
mailboxKey = mailbox?.globalKey ?: allMailboxes.find { box ->
box.fullName == it.mailbox
}?.globalKey.let { mailboxKey ->
requireNotNull(mailboxKey) { "Can't find ${it.mailbox} in $allMailboxes" }
if (mailboxKey == null) {
Timber.e("Can't find ${it.mailbox} in $allMailboxes")
"unknown"
} else mailboxKey
},
email = student.email,
messageId = it.id,

View File

@ -17,8 +17,11 @@ class GetMailboxByStudentUseCase @Inject constructor(
private fun List<Mailbox>.filterByStudent(student: Student): Mailbox? {
val normalizedStudentName = student.studentName.normalizeStudentName()
return find {
return singleOrNull {
it.studentName.normalizeStudentName() == normalizedStudentName
} ?: singleOrNull {
it.studentName.normalizeStudentName() == normalizedStudentName
&& it.schoolNameShort == student.schoolShortName
} ?: singleOrNull {
it.studentName.getFirstAndLastPart() == normalizedStudentName.getFirstAndLastPart()
} ?: singleOrNull {

View File

@ -160,8 +160,29 @@ class GetMailboxByStudentUseCaseTest {
assertEquals(expectedMailbox, systemUnderTest(student))
}
@Test
fun `get mailbox for student with mailboxes from two different schools`() = runTest {
val student = getStudentEntity(
userName = "Kamil Bednarek",
studentName = "Kamil Bednarek",
schoolShortName = "CKZiU",
)
val mailbox1 = getMailboxEntity(
studentName = "Kamil Bednarek",
schoolShortName = "ZSTiO",
)
val mailbox2 = getMailboxEntity(
studentName = "Kamil Bednarek",
schoolShortName = "CKZiU",
)
coEvery { mailboxDao.loadAll(any()) } returns listOf(mailbox1, mailbox2)
assertEquals(mailbox2, systemUnderTest(student))
}
private fun getMailboxEntity(
studentName: String,
schoolShortName: String = "test",
) = Mailbox(
globalKey = "",
fullName = "",
@ -170,13 +191,14 @@ class GetMailboxByStudentUseCaseTest {
schoolId = "",
symbol = "",
studentName = studentName,
schoolNameShort = "",
schoolNameShort = schoolShortName,
type = MailboxType.STUDENT,
)
private fun getStudentEntity(
studentName: String,
userName: String,
schoolShortName: String = "test",
) = Student(
scrapperBaseUrl = "http://fakelog.cf",
email = "jan@fakelog.cf",
@ -192,7 +214,7 @@ class GetMailboxByStudentUseCaseTest {
privateKey = "",
registrationDate = Instant.now(),
schoolName = "",
schoolShortName = "test",
schoolShortName = schoolShortName,
schoolSymbol = "",
studentId = 1,
studentName = studentName,