Add unit tests for OpeningSchedule.isOpen

Issue #838
This commit is contained in:
MM20 2024-05-17 15:39:34 +02:00
parent 310d93e25b
commit 2319e47184
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
4 changed files with 116 additions and 8 deletions

View File

@ -718,7 +718,7 @@ private fun buildAddress(
}
private fun OpeningSchedule.getCurrentOpeningHours(): OpeningHours? {
return openingHours.find { it.isOpen }
return openingHours.find { it.isOpen() }
}
private fun OpeningSchedule.getNextOpeningHours(): OpeningHours {

View File

@ -54,4 +54,5 @@ dependencies {
implementation(project(":libs:material-color-utilities"))
api(project(":core:shared"))
testImplementation(libs.bundles.tests)
}

View File

@ -9,7 +9,7 @@ import de.mm20.launcher2.icons.TintedIconLayer
import kotlinx.collections.immutable.ImmutableList
import java.time.DayOfWeek
import java.time.Duration
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
import android.location.Location as AndroidLocation
@ -233,10 +233,12 @@ data class OpeningHours(
val startTime: LocalTime,
val duration: Duration
) {
val isOpen: Boolean
get() = LocalDate.now().dayOfWeek == dayOfWeek &&
LocalTime.now().isAfter(startTime) &&
LocalTime.now().isBefore(startTime.plus(duration))
fun isOpen(date: LocalDateTime = LocalDateTime.now()): Boolean {
return date.dayOfWeek == dayOfWeek &&
date.toLocalTime().isAfter(startTime) &&
date.toLocalTime().isBefore(startTime.plus(duration))
}
override fun toString(): String = "$dayOfWeek $startTime-${startTime.plus(duration)}"
}
@ -245,6 +247,7 @@ data class OpeningSchedule(
val isTwentyFourSeven: Boolean,
val openingHours: ImmutableList<OpeningHours>
) {
val isOpen: Boolean
get() = isTwentyFourSeven || openingHours.any { it.isOpen }
fun isOpen(date: LocalDateTime = LocalDateTime.now()): Boolean {
return isTwentyFourSeven || openingHours.any { it.isOpen(date) }
}
}

View File

@ -0,0 +1,104 @@
package de.mm20.launcher2.search
import kotlinx.collections.immutable.persistentListOf
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import java.time.DayOfWeek
import java.time.Duration
import java.time.LocalDateTime
import java.time.LocalTime
@RunWith(Parameterized::class)
class OpeningScheduleTest(val date: LocalDateTime, val expected: Boolean) {
@Test
fun isOpen() {
val openingSchedule = OpeningSchedule(
isTwentyFourSeven = false,
/**
* Monday: 18:00 - Tue. 01:00
* Tuesday: 10:00 - 00:00
* Wednesday: 08:00 - 12:00, 15:00 - 19:00
* Thursday: 00:00 - Fri. 01:00
* Friday: closed
* Saturday: 08:00 - 17:00
* Sunday: 12:00 - 12:30
*/
openingHours = persistentListOf(
OpeningHours(
dayOfWeek = DayOfWeek.MONDAY,
startTime = LocalTime.of(18, 0),
duration = Duration.ofHours(7),
),
OpeningHours(
dayOfWeek = DayOfWeek.TUESDAY,
startTime = LocalTime.of(10, 0),
duration = Duration.ofHours(14),
),
OpeningHours(
dayOfWeek = DayOfWeek.WEDNESDAY,
startTime = LocalTime.of(8, 0),
duration = Duration.ofHours(4),
),
OpeningHours(
dayOfWeek = DayOfWeek.WEDNESDAY,
startTime = LocalTime.of(15, 0),
duration = Duration.ofHours(4),
),
OpeningHours(
dayOfWeek = DayOfWeek.THURSDAY,
startTime = LocalTime.of(0, 0),
duration = Duration.ofHours(25),
),
OpeningHours(
dayOfWeek = DayOfWeek.SATURDAY,
startTime = LocalTime.of(8, 0),
duration = Duration.ofHours(9),
),
OpeningHours(
dayOfWeek = DayOfWeek.SUNDAY,
startTime = LocalTime.of(12, 0),
duration = Duration.ofMinutes(30),
),
)
)
println("${date.dayOfWeek}, ${date.toLocalTime()}")
Assert.assertEquals(expected, openingSchedule.isOpen(date))
}
companion object {
@JvmStatic
@Parameterized.Parameters
fun data() = listOf(
// Monday, 22:00
arrayOf(LocalDateTime.of(2024, 5, 13, 22, 0, 0), true),
// Tuesday, 01:01
arrayOf(LocalDateTime.of(2024, 5, 14, 1, 1, 0), false),
// Wednesday, 11:00
arrayOf(LocalDateTime.of(2024, 5, 15, 11, 0, 0), true),
// Wednesday, 13:00
arrayOf(LocalDateTime.of(2024, 5, 15, 13, 0, 0), false),
// Wednesday, 16:00
arrayOf(LocalDateTime.of(2024, 5, 15, 16, 0, 0), true),
// Thursday, 00:00
arrayOf(LocalDateTime.of(2024, 5, 16, 0, 0, 0), true),
// Thursday, 02:00
arrayOf(LocalDateTime.of(2024, 5, 16, 2, 0, 0), true),
// Friday, 00:30
arrayOf(LocalDateTime.of(2024, 5, 17, 0, 30, 0), true),
// Friday, 12:00
arrayOf(LocalDateTime.of(2024, 5, 17, 12, 0, 0), false),
// Saturday, 16:00
arrayOf(LocalDateTime.of(2024, 5, 18, 16, 0, 0), true),
// Sunday, 12:15
arrayOf(LocalDateTime.of(2024, 5, 19, 12, 15, 0), true),
// Sunday, 12:31
arrayOf(LocalDateTime.of(2024, 5, 19, 12, 31, 0), false),
)
}
}