Files
Agent-System-Backend/pkg/extension/capability_explain_test.go
agent-exec-transport e942a35b73
governance / governance (pull_request) Successful in 14s
ci / vet-and-test (pull_request) Successful in 1m18s
agent-exec transport 8315c523cef26780543b9b2130f4f4a4/5c8333ec4e92
2026-10-19 12:21:32 +00:00

57 lines
2.1 KiB
Go

package extension
import (
"context"
"errors"
"fmt"
"net/http"
"strings"
"testing"
)
type codedTestError int
func (e codedTestError) Error() string { return "provider detail about other-owner" }
func (e codedTestError) StatusCode() int { return int(e) }
func TestWorkFailureStatusAndTextCarryNoIdentifiers(t *testing.T) {
for reason, code := range map[string]int{
WorkFailureDuplicateName: http.StatusConflict,
WorkFailurePolicyRejected: http.StatusForbidden,
WorkFailureMappingNotReady: http.StatusServiceUnavailable,
WorkFailureServiceUnavailable: http.StatusServiceUnavailable,
"invented": 0,
} {
failure := WorkFailure{Operation: WorkOperationMemberAdd, Reason: reason}
if failure.StatusCode() != code || failure.Error() != WorkOperationMemberAdd+": "+reason {
t.Fatalf("%s: status=%d text=%q", reason, failure.StatusCode(), failure.Error())
}
}
}
func TestCategorizeWorkFailure(t *testing.T) {
cases := []struct {
op string
err error
reason string
ok bool
}{
{WorkOperationProjectCreate, fmt.Errorf("wrap: %w", WorkFailure{Reason: WorkFailureMappingNotReady}), WorkFailureMappingNotReady, true},
{WorkOperationProjectCreate, codedTestError(409), WorkFailureDuplicateName, true},
{WorkOperationMemberAdd, codedTestError(403), WorkFailurePolicyRejected, true},
{WorkOperationConversation, codedTestError(503), WorkFailureServiceUnavailable, true},
{WorkOperationConversation, codedTestError(409), "", false},
{WorkOperationConversation, context.DeadlineExceeded, WorkFailureServiceUnavailable, true},
{WorkOperationMemberAdd, codedTestError(404), "", false},
{WorkOperationMemberAdd, WorkFailure{Reason: "invented"}, "", false},
{WorkOperationMemberAdd, errors.New("plain"), "", false},
{WorkOperationMemberAdd, nil, "", false},
}
for _, tc := range cases {
failure, ok := CategorizeWorkFailure(tc.op, tc.err)
if ok != tc.ok || failure.Reason != tc.reason || (ok && failure.Operation != tc.op) || strings.Contains(failure.Error(), "other-owner") {
t.Fatalf("%s %v: failure=%+v ok=%v", tc.op, tc.err, failure, ok)
}
}
}