summaryrefslogtreecommitdiff
path: root/android/app/src/test/java/org/terst/doot/widget/ui/TaskDetailActivityTest.kt
blob: 94a5ce9696c1e8ad98a2268844107c0d3dc638ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package org.terst.doot.widget.ui

import org.junit.Assert.assertEquals
import org.junit.Test
import java.time.LocalDate

class TaskDetailActivityTest {

    private val anchor = LocalDate.of(2026, 8, 6) // Thursday

    @Test
    fun `postponeDate tomorrow is a single day ahead`() {
        assertEquals("2026-08-07", postponeDate(PostponePeriod.TOMORROW, anchor))
    }

    @Test
    fun `postponeDate next week is seven days ahead`() {
        assertEquals("2026-08-13", postponeDate(PostponePeriod.NEXT_WEEK, anchor))
    }

    @Test
    fun `postponeDate next month is a calendar month ahead`() {
        assertEquals("2026-09-06", postponeDate(PostponePeriod.NEXT_MONTH, anchor))
    }

    @Test
    fun `postponeDate next month across a short month clamps -- NOT the same as the Go server's overflow behavior`() {
        // Verified, not assumed: java.time.LocalDate.plusMonths CLAMPS to the target
        // month's last valid day (Jan 31 -> Feb 28), unlike
        // ComputeNextOccurrence (internal/models/recurrence.go)'s Go time.AddDate,
        // which OVERFLOWS instead (Jan 31 + 1 month -> Mar 3). This is a real,
        // known divergence between this client-side postpone helper and the
        // server's recurrence date math for day-of-month 29-31 -- not something
        // this fix reconciles, just documenting it accurately instead of
        // asserting the wrong behavior.
        val jan31 = LocalDate.of(2026, 1, 31)
        assertEquals("2026-02-28", postponeDate(PostponePeriod.NEXT_MONTH, jan31))
    }
}