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()) {
|
} else if (!rule.times.isNullOrEmpty() || !rule.months.isNullOrEmpty()) {
|
||||||
rulesMap.forEach { _, it ->
|
rulesMap.forEach { _, it ->
|
||||||
it.add(rule)
|
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,
|
// Filter out rules that are not valid for the current year, month, and week.
|
||||||
// there is only one rule left per weekday. If not, skip that weekday.
|
val applicableRules = rulesMap.flatMap { (day, rules) ->
|
||||||
val applicableRules = rulesMap.mapNotNull { (day, rules) ->
|
|
||||||
rules.filterYears(localTime)
|
rules.filterYears(localTime)
|
||||||
.filterMonths(localTime)
|
.filterMonths(localTime)
|
||||||
.filterNthDays(localTime)
|
.filterNthDays(localTime)
|
||||||
.map { it.copy(weekdays = listOf(day)) }
|
.map { it.copy(weekdays = listOf(day)) }
|
||||||
.singleOrNull()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val hours = mutableSetOf<OpeningHours>()
|
val hours = mutableSetOf<OpeningHours>()
|
||||||
|
|||||||
@ -302,4 +302,43 @@ class OpeningHoursTest {
|
|||||||
LocalDateTime.of(2025, Month.APRIL, 10, 0, 0)
|
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