Files
wx_service/internal/smoke/service/smoke_profile_service_test.go
2026-03-19 15:41:26 +08:00

129 lines
3.1 KiB
Go

package service
import (
"testing"
smokemodel "wx_service/internal/smoke/model"
)
func TestParseHHMMToMinutes(t *testing.T) {
t.Parallel()
cases := []struct {
in string
want int
wantErr bool
}{
{"00:00", 0, false},
{"07:30", 450, false},
{"23:59", 23*60 + 59, false},
{"7:30", 0, true},
{"24:00", 0, true},
{"12:60", 0, true},
{"ab:cd", 0, true},
{"", 0, true},
}
for _, c := range cases {
got, err := parseHHMMToMinutes(c.in)
if c.wantErr {
if err == nil {
t.Fatalf("parseHHMMToMinutes(%q): expected error", c.in)
}
continue
}
if err != nil {
t.Fatalf("parseHHMMToMinutes(%q): unexpected error: %v", c.in, err)
}
if got != c.want {
t.Fatalf("parseHHMMToMinutes(%q): got %d, want %d", c.in, got, c.want)
}
}
}
func TestAwakeMinutesWithFallback(t *testing.T) {
t.Parallel()
got, err := awakeMinutesWithFallback("07:00", "23:00")
if err != nil {
t.Fatalf("awakeMinutesWithFallback: %v", err)
}
if got != 16*60 {
t.Fatalf("awakeMinutesWithFallback: got %d, want %d", got, 16*60)
}
got, err = awakeMinutesWithFallback("08:00", "01:00")
if err != nil {
t.Fatalf("awakeMinutesWithFallback (cross midnight): %v", err)
}
if got != 17*60 {
t.Fatalf("awakeMinutesWithFallback (cross midnight): got %d, want %d", got, 17*60)
}
got, err = awakeMinutesWithFallback("", "")
if err != nil {
t.Fatalf("awakeMinutesWithFallback (empty): %v", err)
}
if got != defaultAwakeMinutes {
t.Fatalf("awakeMinutesWithFallback (empty): got %d, want %d", got, defaultAwakeMinutes)
}
}
func TestBaselineIntervalMinutes(t *testing.T) {
t.Parallel()
if got := baselineIntervalMinutes(960, 20); got != 48 {
t.Fatalf("baselineIntervalMinutes: got %d, want %d", got, 48)
}
if got := baselineIntervalMinutes(10, 100); got != 1 {
t.Fatalf("baselineIntervalMinutes: got %d, want %d", got, 1)
}
if got := baselineIntervalMinutes(0, 20); got != 0 {
t.Fatalf("baselineIntervalMinutes: got %d, want %d", got, 0)
}
}
func TestIsSmokeProfileCompleted(t *testing.T) {
t.Parallel()
p := smokemodel.SmokeUserProfile{
BaselineCigsPerDay: 20,
PackPriceCent: 2500,
SmokeMotivations: smokemodel.StringSlice{"压力大"},
QuitMotivations: smokemodel.StringSlice{"身体健康"},
WakeUpTime: "07:30",
SleepTime: "23:30",
}
if !isSmokeProfileCompleted(p) {
t.Fatalf("isSmokeProfileCompleted: expected true")
}
p.SmokeMotivations = nil
if !isSmokeProfileCompleted(p) {
t.Fatalf("isSmokeProfileCompleted: expected true when smoke_motivations empty")
}
p.QuitMotivations = nil
if isSmokeProfileCompleted(p) {
t.Fatalf("isSmokeProfileCompleted: expected false when quit_motivations missing")
}
}
func TestNormalizedSmokeMode(t *testing.T) {
t.Parallel()
cases := []struct {
in string
want string
}{
{in: SmokeModeQuit, want: SmokeModeQuit},
{in: SmokeModeRecord, want: SmokeModeRecord},
{in: "", want: SmokeModeRecord},
{in: "unknown", want: SmokeModeRecord},
}
for _, c := range cases {
if got := normalizedSmokeMode(c.in); got != c.want {
t.Fatalf("normalizedSmokeMode(%q): got %q, want %q", c.in, got, c.want)
}
}
}