fix regressions in parseOpeningHours, ignore holidays (#1411)

This commit is contained in:
shtrophic 2025-06-01 20:05:12 +02:00 committed by GitHub
parent 9d3bdb4600
commit 6d87230281
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 43 additions and 4 deletions

View File

@ -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>()

View File

@ -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"
)
}
}