fix(cron): add repeat dropdown and safe touch time selection

This commit is contained in:
yilsem committed 2026-10-08 02:36:10 +03:00
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)
}
}