fix(cron): add repeat dropdown and safe touch time selection
This commit is contained in:
1 parent
1d11afefec
commit
8161f3bf09
6 files changed
+454
-217
No files matched your search
@@ -0,0 +1,43 @@
|
||||
package com.m57.hermescontrol.ui.cron
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class ScheduleSelectionTest {
|
||||
@Test
|
||||
fun `calendar selections preserve exact time when reopened`() {
|
||||
val cases = mapOf(
|
||||
"59 23 * * *" to ScheduleMode.DAILY,
|
||||
"59 * * * *" to ScheduleMode.HOURLY,
|
||||
"* * * * *" to ScheduleMode.MINUTELY,
|
||||
"59 23 * * 1,3,5" to ScheduleMode.WEEKLY,
|
||||
"59 23 31 * *" to ScheduleMode.MONTHLY,
|
||||
"59 23 29 2 *" to ScheduleMode.YEARLY,
|
||||
"0 0 1 1 *" to ScheduleMode.YEARLY,
|
||||
"every 120m" to ScheduleMode.INTERVAL,
|
||||
)
|
||||
cases.forEach { (expression, mode) ->
|
||||
val parsed = parseSchedule(expression)
|
||||
assertEquals(expression, mode, parsed.mode)
|
||||
assertEquals(expression, expression, parsed.toSchedule())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `unknown and malformed schedules remain untouched`() {
|
||||
listOf("every 1s", "every 0m", "every 999999999999999h", "0 9 * * 1,garbage",
|
||||
"0 9 * * 1,8", "0 9 31 2 *", "99 99 * * *", "2030-01-01T12:00:00",
|
||||
"*/45 * * * *", "0 */5 * * *", "0 9 * * MON-FRI").forEach { expression ->
|
||||
val parsed = parseSchedule(expression)
|
||||
assertEquals(expression, ScheduleMode.ADVANCED, parsed.mode)
|
||||
assertEquals(expression, expression, parsed.toSchedule())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `daily time selection builds actual backend expression`() {
|
||||
assertEquals("59 23 * * *", ParsedSchedule(ScheduleMode.DAILY, hour = 23, minute = 59).toSchedule())
|
||||
assertEquals("every 90m", ParsedSchedule(ScheduleMode.INTERVAL, intervalCount = 90, intervalUnit = "m").toSchedule())
|
||||
assertEquals(setOf(0, 6), parseSchedule("0 9 * * 6-7").selectedDays)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user