fix regressions in parseOpeningHours, ignore holidays (#1411)
This commit is contained in:
parent
9d3bdb4600
commit
6d87230281
@ -388,6 +388,8 @@ internal fun parseOpeningSchedule(
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (!rule.holidays.isNullOrEmpty()) {
|
||||
continue // skip PH and SH entries
|
||||
} else if (!rule.times.isNullOrEmpty() || !rule.months.isNullOrEmpty()) {
|
||||
rulesMap.forEach { _, it ->
|
||||
it.add(rule)
|
||||
@ -395,14 +397,12 @@ internal fun parseOpeningSchedule(
|
||||
}
|
||||
}
|
||||
|
||||
// Filter out rules that are not valid for the current year, month, and week. Hopefully,
|
||||
// there is only one rule left per weekday. If not, skip that weekday.
|
||||
val applicableRules = rulesMap.mapNotNull { (day, rules) ->
|
||||
// Filter out rules that are not valid for the current year, month, and week.
|
||||
val applicableRules = rulesMap.flatMap { (day, rules) ->
|
||||
rules.filterYears(localTime)
|
||||
.filterMonths(localTime)
|
||||
.filterNthDays(localTime)
|
||||
.map { it.copy(weekdays = listOf(day)) }
|
||||
.singleOrNull()
|
||||
}
|
||||
|
||||
val hours = mutableSetOf<OpeningHours>()
|
||||
|
||||
@ -302,4 +302,43 @@ class OpeningHoursTest {
|
||||
LocalDateTime.of(2025, Month.APRIL, 10, 0, 0)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun regressTest0() {
|
||||
OpeningSchedule.Hours(
|
||||
setOf(
|
||||
OpeningHours(dayOfWeek = DayOfWeek.MONDAY, startTime = LocalTime.of(8,30), duration = Duration.ofHours(3) + Duration.ofMinutes(30)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.TUESDAY, startTime = LocalTime.of(8,30), duration = Duration.ofHours(3) + Duration.ofMinutes(30)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.WEDNESDAY, startTime = LocalTime.of(8,30), duration = Duration.ofHours(3) + Duration.ofMinutes(30)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.THURSDAY, startTime = LocalTime.of(8,30), duration = Duration.ofHours(3) + Duration.ofMinutes(30)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.FRIDAY, startTime = LocalTime.of(8,30), duration = Duration.ofHours(3) + Duration.ofMinutes(30)),
|
||||
|
||||
OpeningHours(dayOfWeek = DayOfWeek.MONDAY, startTime = LocalTime.of(14,0), duration = Duration.ofHours(2)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.TUESDAY, startTime = LocalTime.of(14,0), duration = Duration.ofHours(2)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.FRIDAY, startTime = LocalTime.of(14,0), duration = Duration.ofHours(2)),
|
||||
|
||||
OpeningHours(dayOfWeek = DayOfWeek.THURSDAY, startTime = LocalTime.of(17,0), duration = Duration.ofHours(2)),
|
||||
)
|
||||
) assertEqualTo parseOpeningSchedule(
|
||||
"Mo-Fr 08:30-12:00; Mo,Tu,Fr 14:00-16:00; Th 17:00-19:00"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun regressTest1() {
|
||||
OpeningSchedule.Hours(
|
||||
setOf(
|
||||
OpeningHours(dayOfWeek = DayOfWeek.TUESDAY, startTime = LocalTime.of(11,45), duration = Duration.ofHours(10) + Duration.ofMinutes(45)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.WEDNESDAY, startTime = LocalTime.of(11,45), duration = Duration.ofHours(10) + Duration.ofMinutes(45)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.THURSDAY, startTime = LocalTime.of(11,45), duration = Duration.ofHours(10) + Duration.ofMinutes(45)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.FRIDAY, startTime = LocalTime.of(11,45), duration = Duration.ofHours(10) + Duration.ofMinutes(45)),
|
||||
OpeningHours(dayOfWeek = DayOfWeek.SATURDAY, startTime = LocalTime.of(11,45), duration = Duration.ofHours(10) + Duration.ofMinutes(45)),
|
||||
|
||||
OpeningHours(dayOfWeek = DayOfWeek.SUNDAY, startTime = LocalTime.of(11,30), duration = Duration.ofHours(11)),
|
||||
// We don't track public holidays. Otherwise, we'd probably go mad!
|
||||
)
|
||||
) assertEqualTo parseOpeningSchedule(
|
||||
"Tu-Sa 11:45-22:30; Su 11:30-22:30; PH 11:30-22:30"
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user