mirror of
https://github.com/wulkanowy/wulkanowy.git
synced 2025-02-23 00:14:46 +01:00
Merge branch 'release/1.7.4'
This commit is contained in:
commit
1033be4503
@ -23,8 +23,8 @@ android {
|
||||
testApplicationId "io.github.tests.wulkanowy"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 32
|
||||
versionCode 112
|
||||
versionName "1.7.3"
|
||||
versionCode 113
|
||||
versionName "1.7.4"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
resValue "string", "app_name", "Wulkanowy"
|
||||
@ -186,7 +186,7 @@ ext {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "io.github.wulkanowy:sdk:1.7.3"
|
||||
implementation "io.github.wulkanowy:sdk:1.7.4"
|
||||
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.8'
|
||||
|
||||
|
@ -47,7 +47,37 @@ class MailboxRepository @Inject constructor(
|
||||
} else mailbox
|
||||
}
|
||||
|
||||
private fun List<Mailbox>.filterByStudent(student: Student): Mailbox? = find {
|
||||
it.studentName.trim() == student.studentName.trim()
|
||||
private fun List<Mailbox>.filterByStudent(student: Student): Mailbox? {
|
||||
val normalizedStudentName = student.studentName.normalizeStudentName()
|
||||
|
||||
return find {
|
||||
it.studentName.normalizeStudentName() == normalizedStudentName
|
||||
} ?: singleOrNull {
|
||||
it.studentName.getFirstAndLastPart() == normalizedStudentName.getFirstAndLastPart()
|
||||
} ?: singleOrNull {
|
||||
it.studentName.getUnauthorizedVersion() == normalizedStudentName
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.normalizeStudentName(): String {
|
||||
return trim().split(" ").joinToString(" ") { part ->
|
||||
part.lowercase().replaceFirstChar { it.uppercase() }
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.getFirstAndLastPart(): String {
|
||||
val parts = normalizeStudentName().split(" ")
|
||||
|
||||
val endParts = parts.filterIndexed { i, _ ->
|
||||
i == 0 || parts.size == i - 1
|
||||
}
|
||||
return endParts.joinToString(" ")
|
||||
}
|
||||
|
||||
private fun String.getUnauthorizedVersion(): String {
|
||||
return normalizeStudentName().split(" ")
|
||||
.joinToString(" ") {
|
||||
it.first() + "*".repeat(it.length - 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package io.github.wulkanowy.ui.modules.grade.details
|
||||
import io.github.wulkanowy.data.*
|
||||
import io.github.wulkanowy.data.db.entities.Grade
|
||||
import io.github.wulkanowy.data.enums.GradeExpandMode
|
||||
import io.github.wulkanowy.data.enums.GradeSortingMode
|
||||
import io.github.wulkanowy.data.enums.GradeSortingMode.*
|
||||
import io.github.wulkanowy.data.repositories.GradeRepository
|
||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||
@ -132,16 +131,17 @@ class GradeDetailsPresenter @Inject constructor(
|
||||
}
|
||||
.logResourceStatus("load grade details")
|
||||
.onResourceData {
|
||||
val gradeItems = createGradeItems(it)
|
||||
view?.run {
|
||||
enableSwipe(true)
|
||||
showProgress(false)
|
||||
showErrorView(false)
|
||||
showContent(it.isNotEmpty())
|
||||
showEmpty(it.isEmpty())
|
||||
showContent(gradeItems.isNotEmpty())
|
||||
showEmpty(gradeItems.isEmpty())
|
||||
updateNewGradesAmount(it)
|
||||
updateMarkAsDoneButton()
|
||||
updateData(
|
||||
data = createGradeItems(it),
|
||||
data = gradeItems,
|
||||
expandMode = preferencesRepository.gradeExpandMode,
|
||||
preferencesRepository.gradeColorTheme
|
||||
)
|
||||
|
@ -15,5 +15,8 @@ fun List<Semester>.getCurrentOrLast(): Semester {
|
||||
// when there is more than one current semester - find one with higher id
|
||||
singleOrNull { semester -> semester.semesterId == maxByOrNull { it.semesterId }?.semesterId }?.let { return it }
|
||||
|
||||
// when there is no active kindergarten semester - get one from last year
|
||||
singleOrNull { semester -> semester.schoolYear == maxByOrNull { it.schoolYear }?.schoolYear }?.let { return it }
|
||||
|
||||
throw IllegalArgumentException("Duplicated last semester! Semesters: ${joinToString(separator = "\n")}")
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
Wersja 1.7.3
|
||||
Wersja 1.7.4
|
||||
|
||||
- naprawiliśmy kilka błędów w obsłudze nowego modułu wiadomości
|
||||
- naprawiliśmy wyświetlanie napisu "Brak ocen", jesli uczeń nie zdobył w danym semestrze jeszcze żadnych ocen
|
||||
|
||||
Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases
|
||||
|
@ -77,20 +77,76 @@ class MailboxRepositoryTest {
|
||||
assertEquals(expectedMailbox, selectedMailbox)
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException::class)
|
||||
fun `get mailbox for student with strange name`() = runTest {
|
||||
@Test
|
||||
fun `get mailbox for unique non-authorized student`() = runTest {
|
||||
val student = getStudentEntity(
|
||||
userName = "Stanisław Kowalski",
|
||||
studentName = "J**** K*****",
|
||||
studentName = "J** K*******",
|
||||
)
|
||||
val expectedMailbox = getMailboxEntity("Jan Kowalski")
|
||||
coEvery { mailboxDao.loadAll(any()) } returns listOf(
|
||||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException::class)
|
||||
fun `get mailbox for not-unique non-authorized student`() = runTest {
|
||||
val student = getStudentEntity(
|
||||
userName = "Stanisław Kowalski",
|
||||
studentName = "J** K*******",
|
||||
)
|
||||
coEvery { mailboxDao.loadAll(any()) } returns listOf(
|
||||
getMailboxEntity("Jan Kowalski"),
|
||||
getMailboxEntity("Jan Kurowski"),
|
||||
)
|
||||
|
||||
systemUnderTest.getMailbox(student)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get mailbox for student with uppercase name`() = runTest {
|
||||
val student = getStudentEntity(
|
||||
userName = "Mochoń Julia",
|
||||
studentName = "KLAUDIA MOCHOŃ",
|
||||
)
|
||||
val expectedMailbox = getMailboxEntity("Klaudia Mochoń")
|
||||
coEvery { mailboxDao.loadAll(any()) } returns listOf(
|
||||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get mailbox for student with second name`() = runTest {
|
||||
val student = getStudentEntity(
|
||||
userName = "Fistaszek Karolina",
|
||||
studentName = "Julia Fistaszek",
|
||||
)
|
||||
val expectedMailbox = getMailboxEntity("Julia Maria Fistaszek")
|
||||
coEvery { mailboxDao.loadAll(any()) } returns listOf(
|
||||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get mailbox for student with second name and uppercase`() = runTest {
|
||||
val student = getStudentEntity(
|
||||
userName = "BEDNAREK KAMIL",
|
||||
studentName = "ALEKSANDRA BEDNAREK",
|
||||
)
|
||||
val expectedMailbox = getMailboxEntity("Aleksandra Anna Bednarek")
|
||||
coEvery { mailboxDao.loadAll(any()) } returns listOf(
|
||||
expectedMailbox,
|
||||
)
|
||||
|
||||
assertEquals(expectedMailbox, systemUnderTest.getMailbox(student))
|
||||
}
|
||||
|
||||
private fun getMailboxEntity(
|
||||
studentName: String,
|
||||
) = Mailbox(
|
||||
|
@ -0,0 +1,72 @@
|
||||
package io.github.wulkanowy.utils
|
||||
|
||||
import io.github.wulkanowy.data.db.entities.Semester
|
||||
import io.github.wulkanowy.getSemesterEntity
|
||||
import org.junit.Test
|
||||
import java.time.LocalDate
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class SemesterExtensionKtTest {
|
||||
|
||||
@Test(expected = IllegalArgumentException::class)
|
||||
fun `get current semester when current is doubled`() {
|
||||
val semesters = listOf(
|
||||
getSemesterEntity(1, 1, LocalDate.now(), LocalDate.now()),
|
||||
getSemesterEntity(1, 1, LocalDate.now(), LocalDate.now())
|
||||
)
|
||||
|
||||
semesters.getCurrentOrLast()
|
||||
}
|
||||
|
||||
@Test(expected = RuntimeException::class)
|
||||
fun `get current semester when there is empty list`() {
|
||||
val semesters = listOf<Semester>()
|
||||
|
||||
semesters.getCurrentOrLast()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get current kindergarten semester when there is no any current`() {
|
||||
val semesters = listOf(
|
||||
createSemesterEntity(
|
||||
kindergartenDiaryId = 281,
|
||||
schoolYear = 2020,
|
||||
semesterId = 0,
|
||||
start = LocalDate.of(2020, 9, 1),
|
||||
end = LocalDate.of(2021, 8, 31),
|
||||
),
|
||||
createSemesterEntity(
|
||||
kindergartenDiaryId = 342,
|
||||
schoolYear = 2021,
|
||||
semesterId = 0,
|
||||
start = LocalDate.of(2021, 9, 1),
|
||||
end = LocalDate.of(2022, 8, 31),
|
||||
),
|
||||
)
|
||||
|
||||
val res = semesters.getCurrentOrLast()
|
||||
|
||||
assertEquals(2021, res.schoolYear)
|
||||
}
|
||||
|
||||
private fun createSemesterEntity(
|
||||
diaryId: Int = 0,
|
||||
kindergartenDiaryId: Int = 0,
|
||||
semesterId: Int = 0,
|
||||
schoolYear: Int = 0,
|
||||
start: LocalDate = LocalDate.now(),
|
||||
end: LocalDate = LocalDate.now().plusMonths(6),
|
||||
) = Semester(
|
||||
studentId = 1,
|
||||
diaryId = diaryId,
|
||||
kindergartenDiaryId = kindergartenDiaryId,
|
||||
semesterId = semesterId,
|
||||
diaryName = "$semesterId",
|
||||
schoolYear = schoolYear,
|
||||
classId = 0,
|
||||
semesterName = semesterId,
|
||||
unitId = 1,
|
||||
start = start,
|
||||
end = end
|
||||
)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user