33 lines
1.1 KiB
Go
33 lines
1.1 KiB
Go
package saas
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestHomeCalendarWeekUsesBeijingAcrossHostZonesAndBoundaries(t *testing.T) {
|
||
|
|
cases := []struct{ instant, start, end string }{
|
||
|
|
{"2026-10-04T15:59:59Z", "2026-09-28", "2026-10-05"},
|
||
|
|
{"2026-10-04T16:00:00Z", "2026-10-05", "2026-10-12"},
|
||
|
|
{"2026-10-05T16:00:00Z", "2026-10-05", "2026-10-12"},
|
||
|
|
{"2025-12-31T16:00:00Z", "2025-12-29", "2026-01-05"},
|
||
|
|
{"2026-03-08T16:00:00Z", "2026-03-09", "2026-03-16"},
|
||
|
|
}
|
||
|
|
for _, tc := range cases {
|
||
|
|
at, err := time.Parse(time.RFC3339, tc.instant)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
for _, offset := range []int{-7 * 3600, 0, 8 * 3600, 9 * 3600} {
|
||
|
|
start, end, err := homeCalendarWeek(at.In(time.FixedZone("host", offset)))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
_, gotOffset := start.Zone()
|
||
|
|
if start.Location().String() != "Asia/Shanghai" || gotOffset != 8*3600 || start.Format("2006-01-02") != tc.start || end.Format("2006-01-02") != tc.end || start.Hour() != 0 || end.Sub(start) != 7*24*time.Hour {
|
||
|
|
t.Fatalf("instant=%s hostOffset=%d start=%s end=%s", tc.instant, offset, start, end)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|