package probe import ( "errors" "testing" "supply-intelligence/internal/domain" ) func TestClassifyHTTPResult(t *testing.T) { tests := []struct { name string statusCode int err error wantClass domain.ProbeClassification wantReason string wantErr bool }{ {name: "200 success", statusCode: 200, wantClass: domain.ProbeClassificationSuccess, wantReason: "ok"}, {name: "401 explicit failure", statusCode: 401, wantClass: domain.ProbeClassificationExplicitFailure, wantReason: "auth_rejected"}, {name: "403 explicit failure", statusCode: 403, wantClass: domain.ProbeClassificationExplicitFailure, wantReason: "auth_rejected"}, {name: "429 inconclusive", statusCode: 429, wantClass: domain.ProbeClassificationInconclusive, wantReason: "upstream_unstable"}, {name: "503 inconclusive", statusCode: 503, wantClass: domain.ProbeClassificationInconclusive, wantReason: "upstream_unstable"}, {name: "transport error inconclusive", err: errors.New("timeout"), wantClass: domain.ProbeClassificationInconclusive, wantReason: "transport_error"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { gotClass, gotReason, err := ClassifyHTTPResult(tt.statusCode, tt.err) if tt.wantErr { if err == nil { t.Fatalf("expected error, got nil") } return } if err != nil { t.Fatalf("unexpected error: %v", err) } if gotClass != tt.wantClass { t.Fatalf("classification mismatch: got %q want %q", gotClass, tt.wantClass) } if gotReason != tt.wantReason { t.Fatalf("reason mismatch: got %q want %q", gotReason, tt.wantReason) } }) } }