Refactor attendance module (#161)

This commit is contained in:
Mikołaj Pich
2018-10-01 19:41:09 +02:00
committed by Rafał Borcz
parent a1f64baca4
commit 357b2350cb
35 changed files with 1151 additions and 571 deletions

View File

@ -0,0 +1,56 @@
package io.github.wulkanowy.data.repositories.remote
import io.github.wulkanowy.api.Api
import io.github.wulkanowy.api.attendance.Attendance
import io.github.wulkanowy.data.db.entities.Semester
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.reactivex.Single
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.threeten.bp.LocalDate
import java.sql.Date
class AttendanceRemoteTest {
@MockK
private lateinit var mockApi: Api
@MockK
private lateinit var semesterMock: Semester
@Before
fun initApi() {
MockKAnnotations.init(this)
}
@Test
fun getExamsTest() {
every { mockApi.getAttendance(
LocalDate.of(2018, 9, 10),
LocalDate.of(2018, 9, 15)
) } returns Single.just(listOf(
getAttendance("2018-09-10"),
getAttendance("2018-09-17")
))
every { mockApi.diaryId } returns "1"
every { semesterMock.studentId } returns "1"
every { semesterMock.diaryId } returns "1"
val attendance = AttendanceRemote(mockApi).getAttendance(semesterMock,
LocalDate.of(2018, 9, 10),
LocalDate.of(2018, 9, 15)).blockingGet()
assertEquals(2, attendance.size)
}
private fun getAttendance(dateString: String): Attendance {
return Attendance().apply {
subject = "Fizyka"
name = "Obecność"
date = Date.valueOf(dateString)
}
}
}

View File

@ -3,41 +3,47 @@ package io.github.wulkanowy.data.repositories.remote
import io.github.wulkanowy.api.Api
import io.github.wulkanowy.api.exams.Exam
import io.github.wulkanowy.data.db.entities.Semester
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.reactivex.Single
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
import org.mockito.Mockito.doReturn
import org.mockito.MockitoAnnotations
import org.threeten.bp.LocalDate
import java.sql.Date
class ExamRemoteTest {
@Mock
@MockK
private lateinit var mockApi: Api
@Mock
@MockK
private lateinit var semesterMock: Semester
@Before
fun initApi() {
MockitoAnnotations.initMocks(this)
MockKAnnotations.init(this)
}
@Test
fun getExamsTest() {
doReturn(Single.just(listOf(
every { mockApi.getExams(
LocalDate.of(2018, 9, 10),
LocalDate.of(2018, 9, 15)
) } returns Single.just(listOf(
getExam("2018-09-10"),
getExam("2018-09-17")
))).`when`(mockApi).getExams(any())
))
doReturn("1").`when`(semesterMock).studentId
doReturn("1").`when`(semesterMock).diaryId
every { mockApi.diaryId } returns "1"
every { semesterMock.studentId } returns "1"
every { semesterMock.diaryId } returns "1"
val exams = ExamRemote(mockApi).getExams(semesterMock, LocalDate.of(2018, 9, 10)).blockingGet()
val exams = ExamRemote(mockApi).getExams(semesterMock,
LocalDate.of(2018, 9, 10),
LocalDate.of(2018, 9, 15)
).blockingGet()
assertEquals(2, exams.size)
}

View File

@ -1,140 +0,0 @@
package io.github.wulkanowy.utils
import org.junit.Test
import org.threeten.bp.LocalDate
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
class TimeUtilsTest {
@Test fun getParsedDateTest() {
assertEquals(LocalDate.of(1970, 1, 1),
getParsedDate("1970-01-01", "yyyy-MM-dd"))
}
@Test fun getMondaysFromCurrentSchoolYearTest() {
val y201718 = getMondaysFromCurrentSchoolYear(LocalDate.of(2018, 1, 1))
assertEquals("2017-09-04", y201718.first())
assertEquals("2018-08-27", y201718.last())
val y202122 = getMondaysFromCurrentSchoolYear(LocalDate.of(2022, 1, 1))
assertEquals("2021-08-30", y202122.first())
assertEquals("2022-08-22", y202122.last())
val y202223 = getMondaysFromCurrentSchoolYear(LocalDate.of(2023, 1, 1))
assertEquals("2022-08-29", y202223.first())
assertEquals("2023-08-28", y202223.last())
}
@Test fun getCurrentSchoolYearTest() {
assertEquals(2017, getSchoolYearForDate(LocalDate.of(2018, 8, 31)))
assertEquals(2018, getSchoolYearForDate(LocalDate.of(2018, 9, 1)))
}
@Test fun getFirstWeekDayTest() {
assertEquals("2018-06-18", getFirstDayOfCurrentWeek(LocalDate.of(2018, 6, 21)))
assertEquals("2018-06-18", getFirstDayOfCurrentWeek(LocalDate.of(2018, 6, 22)))
assertEquals("2018-06-25", getFirstDayOfCurrentWeek(LocalDate.of(2018, 6, 23)))
assertEquals("2018-06-25", getFirstDayOfCurrentWeek(LocalDate.of(2018, 6, 24)))
assertEquals("2018-06-25", getFirstDayOfCurrentWeek(LocalDate.of(2018, 6, 25)))
assertEquals("2018-06-25", getFirstDayOfCurrentWeek(LocalDate.of(2018, 6, 26)))
}
@Test fun getTodayOrNextDayOrderTest() {
assertEquals(0, getTodayOrNextDayOrder(true, LocalDate.of(2018, 6, 24))) // sunday
assertEquals(6, getTodayOrNextDayOrder(false, LocalDate.of(2018, 6, 24)))
assertEquals(1, getTodayOrNextDayOrder(true, LocalDate.of(2018, 6, 25)))
assertEquals(0, getTodayOrNextDayOrder(false, LocalDate.of(2018, 6, 25)))
}
@Test fun getTodayOrNextDayTest() {
assertEquals("2018-06-26", getTodayOrNextDay(false, LocalDate.of(2018, 6, 26)))
assertEquals("2018-06-27", getTodayOrNextDay(true, LocalDate.of(2018, 6, 26)))
}
@Test fun isDateInWeekInsideTest() {
assertTrue(isDateInWeek(
LocalDate.of(2018, 5, 28),
LocalDate.of(2018, 5, 31)
))
}
@Test fun isDateInWeekExtremesTest() {
assertTrue(isDateInWeek(
LocalDate.of(2018, 5, 28),
LocalDate.of(2018, 5, 28)
))
assertTrue(isDateInWeek(
LocalDate.of(2018, 5, 28),
LocalDate.of(2018, 6, 1)
))
}
@Test fun isDateInWeekOutOfTest() {
assertFalse(isDateInWeek(
LocalDate.of(2018, 5, 28),
LocalDate.of(2018, 6, 2)
))
assertFalse(isDateInWeek(
LocalDate.of(2018, 5, 28),
LocalDate.of(2018, 5, 27)
))
}
@Test fun isHolidaysInSchoolEndTest() {
assertFalse(isHolidays(LocalDate.of(2017, 6, 23)))
assertFalse(isHolidays(LocalDate.of(2018, 6, 22)))
assertFalse(isHolidays(LocalDate.of(2019, 6, 21)))
assertFalse(isHolidays(LocalDate.of(2020, 6, 26)))
assertFalse(isHolidays(LocalDate.of(2021, 6, 25)))
assertFalse(isHolidays(LocalDate.of(2022, 6, 24)))
assertFalse(isHolidays(LocalDate.of(2023, 6, 23)))
assertFalse(isHolidays(LocalDate.of(2024, 6, 21)))
assertFalse(isHolidays(LocalDate.of(2025, 6, 27)))
}
@Test fun isHolidaysInHolidaysStartTest() {
assertTrue(isHolidays(LocalDate.of(2017, 6, 24)))
assertTrue(isHolidays(LocalDate.of(2018, 6, 23)))
assertTrue(isHolidays(LocalDate.of(2019, 6, 22)))
assertTrue(isHolidays(LocalDate.of(2020, 6, 27)))
assertTrue(isHolidays(LocalDate.of(2021, 6, 26)))
assertTrue(isHolidays(LocalDate.of(2022, 6, 25)))
assertTrue(isHolidays(LocalDate.of(2023, 6, 24)))
assertTrue(isHolidays(LocalDate.of(2024, 6, 22)))
assertTrue(isHolidays(LocalDate.of(2025, 6, 28)))
}
@Test fun isHolidaysInHolidaysEndTest() {
assertTrue(isHolidays(LocalDate.of(2017, 9, 1))) // friday
assertTrue(isHolidays(LocalDate.of(2017, 9, 2))) // saturday
assertTrue(isHolidays(LocalDate.of(2017, 9, 3))) // sunday
assertTrue(isHolidays(LocalDate.of(2018, 9, 1))) // saturday
assertTrue(isHolidays(LocalDate.of(2018, 9, 2))) // sunday
assertTrue(isHolidays(LocalDate.of(2019, 9, 1))) // sunday
assertTrue(isHolidays(LocalDate.of(2020, 8, 31))) // monday
assertTrue(isHolidays(LocalDate.of(2021, 8, 31))) // tuesday
assertTrue(isHolidays(LocalDate.of(2022, 8, 31))) // wednesday
assertTrue(isHolidays(LocalDate.of(2023, 9, 1))) // friday
assertTrue(isHolidays(LocalDate.of(2023, 9, 2))) // saturday
assertTrue(isHolidays(LocalDate.of(2023, 9, 3))) // sunday
assertTrue(isHolidays(LocalDate.of(2024, 9, 1))) // sunday
assertTrue(isHolidays(LocalDate.of(2025, 8, 31))) // sunday
}
@Test fun isHolidaysInSchoolStartTest() {
assertFalse(isHolidays(LocalDate.of(2017, 9, 4))) // monday
assertFalse(isHolidays(LocalDate.of(2018, 9, 3))) // monday
assertFalse(isHolidays(LocalDate.of(2019, 9, 2))) // monday
assertFalse(isHolidays(LocalDate.of(2020, 9, 1))) // tuesday
assertFalse(isHolidays(LocalDate.of(2021, 9, 1))) // wednesday
assertFalse(isHolidays(LocalDate.of(2022, 9, 1))) // thursday
assertFalse(isHolidays(LocalDate.of(2023, 9, 4))) // monday
assertFalse(isHolidays(LocalDate.of(2024, 9, 2))) // monday
assertFalse(isHolidays(LocalDate.of(2025, 9, 1))) // monday
}
}

View File

@ -0,0 +1,150 @@
package io.github.wulkanowy.utils.extension
import org.junit.Assert.*
import org.junit.Test
import org.threeten.bp.LocalDate
import java.util.*
class TimeExtensionTest {
@Test
fun toDate() {
assertEquals(LocalDate.of(1970, 1, 1), "1970-01-01".toDate("yyyy-MM-dd"))
}
@Test
fun toFormat() {
assertEquals("2018-10-01", LocalDate.of(2018, 10, 1).toFormat())
assertEquals("2018-10.01", LocalDate.of(2018, 10, 1).toFormat("yyyy-MM.dd"))
}
@Test
fun getWeekFirstDayAlwaysCurrent() {
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 2).getWeekFirstDayAlwaysCurrent())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 5).getWeekFirstDayAlwaysCurrent())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 6).getWeekFirstDayAlwaysCurrent())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 7).getWeekFirstDayAlwaysCurrent())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 8).getWeekFirstDayAlwaysCurrent())
}
@Test
fun getWeekFirstDayNextOnWeekEnd() {
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 2).getWeekFirstDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 5).getWeekFirstDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 6).getWeekFirstDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 7).getWeekFirstDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 8).getWeekFirstDayNextOnWeekEnd())
}
@Test
fun getWeekDayName() {
Locale.setDefault(Locale.forLanguageTag("PL"))
assertEquals("poniedziałek", LocalDate.of(2018, 10, 1).getWeekDayName())
Locale.setDefault(Locale.forLanguageTag("US"))
assertEquals("Monday", LocalDate.of(2018, 10, 1).getWeekDayName())
}
@Test
fun getSchoolYear() {
assertEquals(2017, LocalDate.of(2018, 8, 31).getSchoolYear())
assertEquals(2018, LocalDate.of(2018, 9, 1).getSchoolYear())
}
@Test
fun getNextSchoolDay() {
assertEquals(LocalDate.of(2018, 10, 2), LocalDate.of(2018, 10, 1).getNextWorkDay())
assertEquals(LocalDate.of(2018, 10, 3), LocalDate.of(2018, 10, 2).getNextWorkDay())
assertEquals(LocalDate.of(2018, 10, 4), LocalDate.of(2018, 10, 3).getNextWorkDay())
assertEquals(LocalDate.of(2018, 10, 5), LocalDate.of(2018, 10, 4).getNextWorkDay())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 5).getNextWorkDay())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 6).getNextWorkDay())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 7).getNextWorkDay())
assertEquals(LocalDate.of(2018, 10, 9), LocalDate.of(2018, 10, 8).getNextWorkDay())
}
@Test
fun getPreviousSchoolDay() {
assertEquals(LocalDate.of(2018, 10, 9), LocalDate.of(2018, 10, 10).getPreviousWorkDay())
assertEquals(LocalDate.of(2018, 10, 8), LocalDate.of(2018, 10, 9).getPreviousWorkDay())
assertEquals(LocalDate.of(2018, 10, 5), LocalDate.of(2018, 10, 8).getPreviousWorkDay())
assertEquals(LocalDate.of(2018, 10, 5), LocalDate.of(2018, 10, 7).getPreviousWorkDay())
assertEquals(LocalDate.of(2018, 10, 5), LocalDate.of(2018, 10, 6).getPreviousWorkDay())
assertEquals(LocalDate.of(2018, 10, 4), LocalDate.of(2018, 10, 5).getPreviousWorkDay())
assertEquals(LocalDate.of(2018, 10, 3), LocalDate.of(2018, 10, 4).getPreviousWorkDay())
}
@Test
fun getNearSchoolDayPrevOnWeekEnd() {
assertEquals(LocalDate.of(2018, 9, 28), LocalDate.of(2018, 9, 28).getNearSchoolDayPrevOnWeekEnd())
assertEquals(LocalDate.of(2018, 9, 28), LocalDate.of(2018, 9, 29).getNearSchoolDayPrevOnWeekEnd())
assertEquals(LocalDate.of(2018, 9, 28), LocalDate.of(2018, 9, 30).getNearSchoolDayPrevOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 1).getNearSchoolDayPrevOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 2), LocalDate.of(2018, 10, 2).getNearSchoolDayPrevOnWeekEnd())
}
@Test
fun getNearSchoolDayNextOnWeekEnd() {
assertEquals(LocalDate.of(2018, 9, 28), LocalDate.of(2018, 9, 28).getNearSchoolDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 9, 29).getNearSchoolDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 9, 30).getNearSchoolDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 1).getNearSchoolDayNextOnWeekEnd())
assertEquals(LocalDate.of(2018, 10, 2), LocalDate.of(2018, 10, 2).getNearSchoolDayNextOnWeekEnd())
}
@Test
fun isHolidays_schoolEnd() {
assertFalse(LocalDate.of(2017, 6, 23).isHolidays())
assertFalse(LocalDate.of(2018, 6, 22).isHolidays())
assertFalse(LocalDate.of(2019, 6, 21).isHolidays())
assertFalse(LocalDate.of(2020, 6, 26).isHolidays())
assertFalse(LocalDate.of(2021, 6, 25).isHolidays())
assertFalse(LocalDate.of(2022, 6, 24).isHolidays())
assertFalse(LocalDate.of(2023, 6, 23).isHolidays())
assertFalse(LocalDate.of(2024, 6, 21).isHolidays())
assertFalse(LocalDate.of(2025, 6, 27).isHolidays())
}
@Test
fun isHolidays_holidaysStart() {
assertTrue(LocalDate.of(2017, 6, 24).isHolidays())
assertTrue(LocalDate.of(2018, 6, 23).isHolidays())
assertTrue(LocalDate.of(2019, 6, 22).isHolidays())
assertTrue(LocalDate.of(2020, 6, 27).isHolidays())
assertTrue(LocalDate.of(2021, 6, 26).isHolidays())
assertTrue(LocalDate.of(2022, 6, 25).isHolidays())
assertTrue(LocalDate.of(2023, 6, 24).isHolidays())
assertTrue(LocalDate.of(2024, 6, 22).isHolidays())
assertTrue(LocalDate.of(2025, 6, 28).isHolidays())
}
@Test
fun isHolidays_holidaysEnd() {
assertTrue(LocalDate.of(2017, 9, 1).isHolidays()) // friday
assertTrue(LocalDate.of(2017, 9, 2).isHolidays()) // saturday
assertTrue(LocalDate.of(2017, 9, 3).isHolidays()) // sunday
assertTrue(LocalDate.of(2018, 9, 1).isHolidays()) // saturday
assertTrue(LocalDate.of(2018, 9, 2).isHolidays()) // sunday
assertTrue(LocalDate.of(2019, 9, 1).isHolidays()) // sunday
assertTrue(LocalDate.of(2020, 8, 31).isHolidays()) // monday
assertTrue(LocalDate.of(2021, 8, 31).isHolidays()) // tuesday
assertTrue(LocalDate.of(2022, 8, 31).isHolidays()) // wednesday
assertTrue(LocalDate.of(2023, 9, 1).isHolidays()) // friday
assertTrue(LocalDate.of(2023, 9, 2).isHolidays()) // saturday
assertTrue(LocalDate.of(2023, 9, 3).isHolidays()) // sunday
assertTrue(LocalDate.of(2024, 9, 1).isHolidays()) // sunday
assertTrue(LocalDate.of(2025, 8, 31).isHolidays()) // sunday
}
@Test
fun isHolidays_schoolStart() {
assertFalse(LocalDate.of(2017, 9, 4).isHolidays()) // monday
assertFalse(LocalDate.of(2018, 9, 3).isHolidays()) // monday
assertFalse(LocalDate.of(2019, 9, 2).isHolidays()) // monday
assertFalse(LocalDate.of(2020, 9, 1).isHolidays()) // tuesday
assertFalse(LocalDate.of(2021, 9, 1).isHolidays()) // wednesday
assertFalse(LocalDate.of(2022, 9, 1).isHolidays()) // thursday
assertFalse(LocalDate.of(2023, 9, 4).isHolidays()) // monday
assertFalse(LocalDate.of(2024, 9, 2).isHolidays()) // monday
assertFalse(LocalDate.of(2025, 9, 1).isHolidays()) // monday
}
}