package expiry import ( "testing" "time" ) func TestCalculateDaysLeft(t *testing.T) { base := dateOnly(time.Now()) item := &ExpiryItem{ ExpiryDate: base.AddDate(0, 0, 5), } if daysLeft := item.CalculateDaysLeft(); daysLeft != 5 { t.Fatalf("expected daysLeft=5, got %d", daysLeft) } } func TestCalculateStatus(t *testing.T) { base := dateOnly(time.Now()) tests := []struct { name string item ExpiryItem wantStatus string }{ { name: "已过期", item: ExpiryItem{ ExpiryDate: base.AddDate(0, 0, -1), }, wantStatus: StatusExpired, }, { name: "今天过期", item: ExpiryItem{ ExpiryDate: base, }, wantStatus: StatusExpiring, }, { name: "7天内即将过期", item: ExpiryItem{ ExpiryDate: base.AddDate(0, 0, 7), }, wantStatus: StatusExpiring, }, { name: "正常状态", item: ExpiryItem{ ExpiryDate: base.AddDate(0, 0, 8), }, wantStatus: StatusNormal, }, { name: "保留已使用状态", item: ExpiryItem{ ExpiryDate: base.AddDate(0, 0, -10), Status: StatusUsed, }, wantStatus: StatusUsed, }, { name: "保留已丢弃状态", item: ExpiryItem{ ExpiryDate: base.AddDate(0, 0, -10), Status: StatusDiscarded, }, wantStatus: StatusDiscarded, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got := tt.item.CalculateStatus() if got != tt.wantStatus { t.Fatalf("expected status=%s, got %s", tt.wantStatus, got) } }) } }