package tasks import ( "net/http" "testing" ) func TestOutcome(t *testing.T) { cases := []struct { name string status int body string want Outcome }{ {"envelope completed", 200, `{"Verified":true,"Task":{"Outcome":"completed"}}`, OutcomeCompleted}, {"envelope failed", 200, `{"Task":{"Outcome":"failed","Error":"record deleted"}}`, OutcomeFailed}, {"envelope retry", 200, `{"Task":{"Outcome":"retry","Error":"not ready"}}`, OutcomeRetry}, {"no envelope 2xx", 200, `{"Verified":true}`, OutcomeCompleted}, {"no envelope empty body", 200, ``, OutcomeCompleted}, {"no envelope 4xx", 404, `{"Message":"not found"}`, OutcomeFailed}, {"no envelope 400", 400, `{"Message":"invalid json"}`, OutcomeFailed}, {"no envelope 429", http.StatusTooManyRequests, ``, OutcomeRetry}, {"no envelope 5xx", 500, `{"Message":"boom"}`, OutcomeRetry}, {"non-json body 2xx", 200, `ok`, OutcomeCompleted}, {"non-json body 5xx", 502, `bad gateway`, OutcomeRetry}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { res := outcome(c.status, []byte(c.body)) if res.Outcome != c.want { t.Errorf("outcome(%d, %q) = %q, want %q", c.status, c.body, res.Outcome, c.want) } }) } }