All checks were successful
CI / ci (push) Successful in 8m33s
Floret is promoted to the family / design-language (shared-kit) name; the
tasks app itself becomes Agendula (de.jeanlucmakiola.agendula) — agenda
('things to be done') + Calendula's -ula, a twin of the Calendula name.
Renames the package, namespace, applicationId, rootProject.name, app_name,
FloretApp/FloretNavHost/FloretTransitions classes, theme, F-Droid metadata
dir, CI artifact name, and docs. The botanical word 'florets' is preserved in
the name-origin prose, which is rewritten to Agendula's etymology. Clean
build + unit tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
36 lines
1.3 KiB
Kotlin
36 lines
1.3 KiB
Kotlin
package de.jeanlucmakiola.agendula.domain
|
|
|
|
import com.google.common.truth.Truth.assertThat
|
|
import org.junit.jupiter.api.Test
|
|
import java.time.ZoneId
|
|
import kotlin.time.Instant
|
|
|
|
class DayWindowTest {
|
|
|
|
@Test
|
|
fun `today spans exactly 24h in UTC and contains now`() {
|
|
val zone = ZoneId.of("UTC")
|
|
val now = Instant.fromEpochMilliseconds(1_750_000_000_000L)
|
|
val (start, end) = DayWindow.today(now, zone)
|
|
|
|
assertThat(end.toEpochMilliseconds() - start.toEpochMilliseconds()).isEqualTo(86_400_000L)
|
|
assertThat(now >= start).isTrue()
|
|
assertThat(now < end).isTrue()
|
|
// In UTC, midnight aligns to a multiple of one day since the epoch.
|
|
assertThat(start.toEpochMilliseconds() % 86_400_000L).isEqualTo(0L)
|
|
}
|
|
|
|
@Test
|
|
fun `start is local midnight in a non-UTC zone`() {
|
|
val zone = ZoneId.of("Europe/Berlin")
|
|
val now = Instant.fromEpochMilliseconds(1_750_000_000_000L)
|
|
val (start, end) = DayWindow.today(now, zone)
|
|
|
|
val startLocal = java.time.Instant.ofEpochMilli(start.toEpochMilliseconds()).atZone(zone)
|
|
assertThat(startLocal.hour).isEqualTo(0)
|
|
assertThat(startLocal.minute).isEqualTo(0)
|
|
assertThat(now >= start).isTrue()
|
|
assertThat(now < end).isTrue()
|
|
}
|
|
}
|