Files
supply-intelligence/internal/probe/evaluator_test.go
2026-05-07 10:16:46 +08:00

48 lines
1.6 KiB
Go

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)
}
})
}
}