package errorsx import ( "errors" "fmt" "testing" "github.com/stretchr/testify/require" api "github.com/openmeterio/openmeter/api" apiv3 "github.com/openmeterio/openmeter/api/v3" ) func TestIsAPIError(t *testing.T) { apiErr := &api.InvalidParamFormatError{ ParamName: "page", Err: errors.New("invalid syntax"), } tests := []struct { name string err error want bool }{ { name: "nil", err: nil, want: false, }, { name: "legacy api error", err: apiErr, want: true, }, { name: "v3 api error", err: &apiv3.InvalidParamFormatError{ParamName: "page", Err: errors.New("invalid syntax")}, want: true, }, { name: "different generated api error type", err: &api.RequiredParamError{ParamName: "page"}, want: true, }, { name: "wrapped api error", err: fmt.Errorf("wrapped: %w", apiErr), want: true, }, { name: "joined api error", err: errors.Join( errors.New("other error"), apiErr, ), want: true, }, { name: "ordinary error", err: errors.New("other error"), want: false, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { require.Equal(t, test.want, isAPIError(test.err)) }) } }