forked from github/wulkanowy-mirror
Remove disappearing teachers workaround from timetable repository (#1545)
This commit is contained in:
parent
9711cc868c
commit
0b83a66b85
@ -123,17 +123,7 @@ class TimetableRepository @Inject constructor(
|
|||||||
lessonsNew: List<Timetable>,
|
lessonsNew: List<Timetable>,
|
||||||
) {
|
) {
|
||||||
val lessonsToRemove = lessonsOld uniqueSubtract lessonsNew
|
val lessonsToRemove = lessonsOld uniqueSubtract lessonsNew
|
||||||
val lessonsToAdd = (lessonsNew uniqueSubtract lessonsOld).map { new ->
|
val lessonsToAdd = lessonsNew uniqueSubtract lessonsOld
|
||||||
val matchingOld = lessonsOld.singleOrNull { new.start == it.start }
|
|
||||||
if (matchingOld != null) {
|
|
||||||
val useOldTeacher = new.teacher.isEmpty() && !new.changes && !matchingOld.changes
|
|
||||||
new.copy(
|
|
||||||
room = if (new.room.isEmpty()) matchingOld.room else new.room,
|
|
||||||
teacher = if (useOldTeacher) matchingOld.teacher
|
|
||||||
else new.teacher
|
|
||||||
)
|
|
||||||
} else new
|
|
||||||
}
|
|
||||||
|
|
||||||
timetableDb.deleteAll(lessonsToRemove)
|
timetableDb.deleteAll(lessonsToRemove)
|
||||||
timetableDb.insertAll(lessonsToAdd)
|
timetableDb.insertAll(lessonsToAdd)
|
||||||
|
@ -67,136 +67,11 @@ class TimetableRepositoryTest {
|
|||||||
timetableRepository = TimetableRepository(timetableDb, timetableAdditionalDao, timetableHeaderDao, sdk, timetableNotificationSchedulerHelper, refreshHelper)
|
timetableRepository = TimetableRepository(timetableDb, timetableAdditionalDao, timetableHeaderDao, sdk, timetableNotificationSchedulerHelper, refreshHelper)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun copyRoomToCompletedFromPrevious() {
|
|
||||||
// prepare
|
|
||||||
val remoteList = listOf(
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 0), 1, "", "Przyroda"),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 50), 2, "", "Religia"),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 9, 40), 3, "", "W-F"),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 10, 30), 4, "", "W-F")
|
|
||||||
)
|
|
||||||
coEvery { sdk.getTimetableFull(any(), any()) } returns TimetableFull(emptyList(), remoteList, emptyList())
|
|
||||||
|
|
||||||
val localList = listOf(
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 0), 1, "123", "Przyroda"),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 50), 2, "321", "Religia"),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 9, 40), 3, "213", "W-F"),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 10, 30), 3, "213", "W-F", "Jan Kowalski")
|
|
||||||
)
|
|
||||||
coEvery { timetableDb.loadAll(semester.diaryId, semester.studentId, startDate, endDate) } returns flowOf(localList.mapToEntities(semester))
|
|
||||||
coEvery { timetableDb.insertAll(any()) } returns listOf(1, 2, 3)
|
|
||||||
coEvery { timetableDb.deleteAll(any()) } just Runs
|
|
||||||
|
|
||||||
coEvery { timetableAdditionalDao.loadAll(1, 1, startDate, endDate) } returns flowOf(listOf())
|
|
||||||
coEvery { timetableAdditionalDao.insertAll(emptyList()) } returns listOf(1, 2, 3)
|
|
||||||
coEvery { timetableAdditionalDao.deleteAll(emptyList()) } just Runs
|
|
||||||
|
|
||||||
coEvery { timetableHeaderDao.loadAll(1, 1, startDate, endDate) } returns flowOf(listOf())
|
|
||||||
coEvery { timetableHeaderDao.insertAll(emptyList()) } returns listOf(1, 2, 3)
|
|
||||||
coEvery { timetableHeaderDao.deleteAll(emptyList()) } just Runs
|
|
||||||
|
|
||||||
// execute
|
|
||||||
val res = runBlocking {
|
|
||||||
timetableRepository.getTimetable(student, semester, startDate, endDate, true).toFirstResult()
|
|
||||||
}
|
|
||||||
|
|
||||||
// verify
|
|
||||||
assertEquals(4, res.data?.lessons.orEmpty().size)
|
|
||||||
coVerify {
|
|
||||||
timetableDb.insertAll(withArg {
|
|
||||||
assertEquals(4, it.size)
|
|
||||||
assertEquals("123", it[0].room)
|
|
||||||
assertEquals("321", it[1].room)
|
|
||||||
assertEquals("213", it[2].room)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
coVerify { timetableDb.deleteAll(match { it.size == 4 }) }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun copyTeacherToCompletedFromPrevious() {
|
|
||||||
// prepare
|
|
||||||
val remoteList = listOf(
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 0), 1, "123", "Matematyka", "Paweł Poniedziałkowski", false), // skip
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 50), 2, "124", "Matematyka", "Jakub Wtorkowski", true),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 9, 40), 3, "125", "Język polski", "Joanna Poniedziałkowska", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 10, 40), 4, "126", "Język polski", "Joanna Wtorkowska", true), // skip
|
|
||||||
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 8, 0), 1, "123", "Język polski", "", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 8, 50), 2, "124", "Język polski", "", true),
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 9, 40), 3, "125", "Język polski", "", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 10, 40), 4, "126", "Język polski", "", true),
|
|
||||||
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 8, 0), 1, "123", "Matematyka", "Paweł Środowski", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 8, 50), 2, "124", "Matematyka", "Paweł Czwartkowski", true),
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 9, 40), 3, "125", "Matematyka", "Paweł Środowski", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 10, 40), 4, "126", "Matematyka", "Paweł Czwartkowski", true)
|
|
||||||
)
|
|
||||||
coEvery { sdk.getTimetableFull(startDate, endDate) } returns TimetableFull(emptyList(), remoteList, emptyList())
|
|
||||||
|
|
||||||
val localList = listOf(
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 0), 1, "123", "Matematyka", "Paweł Poniedziałkowski", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 50), 2, "124", "Matematyka", "Paweł Poniedziałkowski", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 9, 40), 3, "125", "Język polski", "Joanna Wtorkowska", true),
|
|
||||||
createTimetableRemote(of(2021, 1, 4, 10, 40), 4, "126", "Język polski", "Joanna Wtorkowska", true),
|
|
||||||
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 8, 0), 1, "123", "Język polski", "Joanna Wtorkowska", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 8, 50), 2, "124", "Język polski", "Joanna Wtorkowska", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 9, 40), 3, "125", "Język polski", "Joanna Środowska", true),
|
|
||||||
createTimetableRemote(of(2021, 1, 5, 10, 40), 4, "126", "Język polski", "Joanna Środowska", true),
|
|
||||||
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 8, 0), 1, "123", "Matematyka", "", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 8, 50), 2, "124", "Matematyka", "", false),
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 9, 40), 3, "125", "Matematyka", "", true),
|
|
||||||
createTimetableRemote(of(2021, 1, 6, 10, 40), 4, "126", "Matematyka", "", true)
|
|
||||||
)
|
|
||||||
coEvery { timetableDb.loadAll(semester.diaryId, semester.studentId, startDate, endDate) } returns flowOf(localList.mapToEntities(semester))
|
|
||||||
coEvery { timetableDb.insertAll(any()) } returns listOf(1, 2, 3)
|
|
||||||
coEvery { timetableDb.deleteAll(any()) } just Runs
|
|
||||||
|
|
||||||
coEvery { timetableAdditionalDao.loadAll(1, 1, startDate, endDate) } returns flowOf(listOf())
|
|
||||||
coEvery { timetableAdditionalDao.insertAll(emptyList()) } returns listOf(1, 2, 3)
|
|
||||||
coEvery { timetableAdditionalDao.deleteAll(emptyList()) } just Runs
|
|
||||||
|
|
||||||
coEvery { timetableHeaderDao.loadAll(1, 1, startDate, endDate) } returns flowOf(listOf())
|
|
||||||
coEvery { timetableHeaderDao.insertAll(emptyList()) } returns listOf(1, 2, 3)
|
|
||||||
coEvery { timetableHeaderDao.deleteAll(emptyList()) } just Runs
|
|
||||||
|
|
||||||
// execute
|
|
||||||
val res = runBlocking { timetableRepository.getTimetable(student, semester, startDate, endDate, true).toFirstResult() }
|
|
||||||
|
|
||||||
// verify
|
|
||||||
assertEquals(null, res.error)
|
|
||||||
assertEquals(12, res.data!!.lessons.size)
|
|
||||||
|
|
||||||
coVerify {
|
|
||||||
timetableDb.insertAll(withArg {
|
|
||||||
assertEquals(10, it.size)
|
|
||||||
// assertEquals("Paweł Poniedziałkowski", it[0].teacher) // skip
|
|
||||||
assertEquals("Jakub Wtorkowski", it[0].teacher)
|
|
||||||
assertEquals("Joanna Poniedziałkowska", it[1].teacher)
|
|
||||||
// assertEquals("Joanna Wtorkowska", it[3].teacher) // skip
|
|
||||||
|
|
||||||
assertEquals("Joanna Wtorkowska", it[2].teacher)
|
|
||||||
assertEquals("", it[3].teacher)
|
|
||||||
assertEquals("", it[4].teacher)
|
|
||||||
assertEquals("", it[5].teacher)
|
|
||||||
|
|
||||||
assertEquals("Paweł Środowski", it[6].teacher)
|
|
||||||
assertEquals("Paweł Czwartkowski", it[7].teacher)
|
|
||||||
assertEquals("Paweł Środowski", it[8].teacher)
|
|
||||||
assertEquals("Paweł Czwartkowski", it[9].teacher)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
coVerify { timetableDb.deleteAll(match { it.size == 10 }) }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `force refresh without difference`() {
|
fun `force refresh without difference`() {
|
||||||
val remoteList = listOf(
|
val remoteList = listOf(
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 0), 1, "123", "Język polski", "", false),
|
createTimetableRemote(of(2021, 1, 4, 8, 0), 1, "123", "Język polski", "Jan Kowalski", false),
|
||||||
createTimetableRemote(of(2021, 1, 4, 8, 50), 2, "124", "Język polski", "", true)
|
createTimetableRemote(of(2021, 1, 4, 8, 50), 2, "124", "Język niemiecki", "Joanna Czarniecka", true)
|
||||||
)
|
)
|
||||||
|
|
||||||
// prepare
|
// prepare
|
||||||
|
Loading…
x
Reference in New Issue
Block a user