Files
wx_service/internal/smoke/service/smoke_next_service_test.go
T
nepiedg 6cf7eb2294 Enhance smoking tracking features with AI next smoke time suggestions
- Added new API endpoint `GET /api/v1/smoke/next_smoke_time` to provide AI-generated suggestions for the next smoking time based on user data.
- Introduced a new database table `fa_smoke_ai_next_smoke` to store structured AI time node suggestions.
- Updated smoke handler and service to integrate the new AI next smoke time functionality.
- Enhanced documentation to reflect the new API endpoint and its usage, including details on how to generate AI time nodes.
2026-01-20 07:08:52 +00:00

84 lines
2.0 KiB
Go

package service
import (
"testing"
"time"
)
func TestIsInSleepWindow(t *testing.T) {
t.Parallel()
// wake=07:30, sleep=23:30 => sleep: [23:30, 07:30)
wake := 7*60 + 30
sleep := 23*60 + 30
if !isInSleepWindow(0, wake, sleep) {
t.Fatalf("expected 00:00 to be in sleep window")
}
if isInSleepWindow(8*60, wake, sleep) {
t.Fatalf("expected 08:00 to be awake")
}
if !isInSleepWindow(23*60+45, wake, sleep) {
t.Fatalf("expected 23:45 to be in sleep window")
}
// wake=18:00, sleep=02:00 => sleep: [02:00, 18:00)
wake = 18 * 60
sleep = 2 * 60
if isInSleepWindow(1*60, wake, sleep) {
t.Fatalf("expected 01:00 to be awake (awake window crosses midnight)")
}
if !isInSleepWindow(10*60, wake, sleep) {
t.Fatalf("expected 10:00 to be in sleep window")
}
}
func TestAdjustToWakeIfInSleep(t *testing.T) {
t.Parallel()
loc := time.Local
// wake=07:30, sleep=23:30
wake := "07:30"
sleep := "23:30"
// 02:00 should adjust to same-day 07:30
in := time.Date(2026, 1, 2, 2, 0, 0, 0, loc)
out, adjusted, err := adjustToWakeIfInSleep(in, wake, sleep)
if err != nil {
t.Fatalf("adjustToWakeIfInSleep: %v", err)
}
if !adjusted {
t.Fatalf("expected adjustment")
}
if out.Hour() != 7 || out.Minute() != 30 {
t.Fatalf("expected 07:30, got %02d:%02d", out.Hour(), out.Minute())
}
// 10:00 should not adjust
in = time.Date(2026, 1, 2, 10, 0, 0, 0, loc)
out, adjusted, err = adjustToWakeIfInSleep(in, wake, sleep)
if err != nil {
t.Fatalf("adjustToWakeIfInSleep: %v", err)
}
if adjusted {
t.Fatalf("expected no adjustment")
}
if !out.Equal(in) {
t.Fatalf("expected unchanged time")
}
// 23:45 should adjust to next-day 07:30
in = time.Date(2026, 1, 2, 23, 45, 0, 0, loc)
out, adjusted, err = adjustToWakeIfInSleep(in, wake, sleep)
if err != nil {
t.Fatalf("adjustToWakeIfInSleep: %v", err)
}
if !adjusted {
t.Fatalf("expected adjustment")
}
if out.Day() != 3 || out.Hour() != 7 || out.Minute() != 30 {
t.Fatalf("expected next day 07:30, got %s", out.Format(time.RFC3339))
}
}