custom_group_usage_rollup_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //go:build unit
  2. package service
  3. import (
  4. "testing"
  5. "time"
  6. appTimezone "github.com/Wei-Shaw/sub2api/internal/pkg/timezone"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func useGroupUsageTestTimezone(t *testing.T, name string) {
  10. t.Helper()
  11. previousName := appTimezone.Name()
  12. require.NoError(t, appTimezone.Init(name))
  13. t.Cleanup(func() { require.NoError(t, appTimezone.Init(previousName)) })
  14. }
  15. func TestGroupUsageDateUsesConfiguredTimezoneBoundary(t *testing.T) {
  16. useGroupUsageTestTimezone(t, "America/New_York")
  17. beforeMidnight := time.Date(2026, 3, 9, 3, 59, 59, 0, time.UTC)
  18. atMidnight := time.Date(2026, 3, 9, 4, 0, 0, 0, time.UTC)
  19. require.Equal(t, "2026-03-08", GroupUsageDate(beforeMidnight))
  20. require.Equal(t, "2026-03-09", GroupUsageDate(atMidnight))
  21. require.Equal(t, atMidnight, GroupUsageTodayStart(atMidnight))
  22. }
  23. func TestGroupUsageParseDateUsesConfiguredTimezone(t *testing.T) {
  24. useGroupUsageTestTimezone(t, "America/New_York")
  25. parsed, err := ParseGroupUsageDate("2026-03-08")
  26. require.NoError(t, err)
  27. require.Equal(t, time.Date(2026, 3, 8, 5, 0, 0, 0, time.UTC), parsed.UTC())
  28. require.Equal(t, "America/New_York", parsed.Location().String())
  29. }
  30. func TestGroupUsageYesterdayStartHandlesDST(t *testing.T) {
  31. useGroupUsageTestTimezone(t, "America/New_York")
  32. todayStart := time.Date(2026, 3, 9, 4, 0, 0, 0, time.UTC)
  33. yesterdayStart := GroupUsageYesterdayStart(todayStart)
  34. require.Equal(t, time.Date(2026, 3, 8, 5, 0, 0, 0, time.UTC), yesterdayStart)
  35. require.Equal(t, 23*time.Hour, todayStart.Sub(yesterdayStart))
  36. require.Equal(t, "America/New_York", GroupUsageTimezoneName())
  37. }