Skip to content

Commit 4b8f099

Browse files
committed
added Unwrap() []error to CompositeError
This allows to use errors.Is() or As() with CompositeError Signed-off-by: Frederic BIDON <[email protected]>
1 parent a29a5f0 commit 4b8f099

File tree

4 files changed

+29
-8
lines changed

4 files changed

+29
-8
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/go-openapi/errors
22

3-
require github.com/stretchr/testify v1.6.1
3+
require github.com/stretchr/testify v1.8.4
44

55
require (
66
github.com/davecgh/go-spew v1.1.1 // indirect

go.sum

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
2-
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
32
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
43
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
54
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -10,12 +9,10 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWb
109
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
1110
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1211
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
13-
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
14-
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
15-
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
12+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
13+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
1614
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1715
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
1816
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
19-
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
2017
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
2118
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

schema.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ func (c *CompositeError) Error() string {
120120
return c.message
121121
}
122122

123+
func (c *CompositeError) Unwrap() []error {
124+
return c.Errors
125+
}
126+
123127
// MarshalJSON implements the JSON encoding interface
124128
func (c CompositeError) MarshalJSON() ([]byte, error) {
125129
return json.Marshal(map[string]interface{}{
@@ -133,7 +137,7 @@ func (c CompositeError) MarshalJSON() ([]byte, error) {
133137
func CompositeValidationError(errors ...error) *CompositeError {
134138
return &CompositeError{
135139
code: CompositeErrorCode,
136-
Errors: append([]error{}, errors...),
140+
Errors: append(make([]error, 0, len(errors)), errors...),
137141
message: "validation failure list",
138142
}
139143
}

schema_test.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,10 +387,30 @@ func TestSchemaErrors(t *testing.T) {
387387
assert.EqualValues(t, CompositeErrorCode, err.Code())
388388
assert.Equal(t, "validation failure list", err.Error())
389389

390-
err = CompositeValidationError(fmt.Errorf("first error"), fmt.Errorf("second error"))
390+
testErr1 := fmt.Errorf("first error")
391+
testErr2 := fmt.Errorf("second error")
392+
err = CompositeValidationError(testErr1, testErr2)
391393
require.Error(t, err)
392394
assert.EqualValues(t, CompositeErrorCode, err.Code())
393395
assert.Equal(t, "validation failure list:\nfirst error\nsecond error", err.Error())
396+
397+
require.ErrorIs(t, err, testErr1)
398+
require.ErrorIs(t, err, testErr2)
399+
})
400+
401+
t.Run("should set validation name in CompositeValidation error", func(t *testing.T) {
402+
err := CompositeValidationError(
403+
InvalidContentType("text/html", []string{"application/json"}),
404+
CompositeValidationError(
405+
InvalidTypeName("y"),
406+
),
407+
)
408+
_ = err.ValidateName("new-name")
409+
const expectedMessage = `validation failure list:
410+
new-name.unsupported media type "text/html", only [application/json] are allowed
411+
validation failure list:
412+
new-namey is an invalid type name`
413+
assert.Equal(t, expectedMessage, err.Error())
394414
})
395415

396416
t.Run("with PropertyNotAllowed", func(t *testing.T) {

0 commit comments

Comments
 (0)