Skip to content

Commit

Permalink
Merge a5bf7c8 into 028836a
Browse files Browse the repository at this point in the history
  • Loading branch information
henrod committed Jul 17, 2018
2 parents 028836a + a5bf7c8 commit f29a1d3
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 12 deletions.
18 changes: 18 additions & 0 deletions errors/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ type Error struct {

//NewError ctor
func NewError(err error, code string, metadata ...map[string]string) *Error {
if pitayaErr, ok := err.(*Error); ok {
if len(metadata) > 0 {
mergeMetadatas(pitayaErr, metadata[0])
}
return pitayaErr
}

e := &Error{
Code: code,
Message: err.Error(),
Expand All @@ -56,3 +63,14 @@ func NewError(err error, code string, metadata ...map[string]string) *Error {
func (e *Error) Error() string {
return e.Message
}

func mergeMetadatas(pitayaErr *Error, metadata map[string]string) {
if pitayaErr.Metadata == nil {
pitayaErr.Metadata = metadata
return
}

for key, value := range metadata {
pitayaErr.Metadata[key] = value
}
}
55 changes: 43 additions & 12 deletions errors/errors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,29 +31,60 @@ import (
func TestNewError(t *testing.T) {
t.Parallel()

const code = "code"

type (
input struct {
err error
code string
metadata map[string]string
}

expected struct {
code string
metadata map[string]string
}
)

tables := []struct {
name string
err error
code string
metadata map[string]string
input input
expected expected
}{
{"nil_metadata", errors.New(uuid.New().String()), uuid.New().String(), nil},
{"empty_metadata", errors.New(uuid.New().String()), uuid.New().String(), map[string]string{}},
{"non_empty_metadata", errors.New(uuid.New().String()), uuid.New().String(), map[string]string{"key": uuid.New().String()}},
{"nil_metadata",
input{errors.New(uuid.New().String()), code, nil},
expected{code, nil},
},
{"empty_metadata",
input{errors.New(uuid.New().String()), code, map[string]string{}},
expected{code, map[string]string{}},
},
{"non_empty_metadata",
input{errors.New(uuid.New().String()), code, map[string]string{"key": "value"}},
expected{code, map[string]string{"key": "value"}},
},
{"pitaya_error",
input{
NewError(errors.New(uuid.New().String()), code, map[string]string{"key1": "value1", "key2": "value2"}),
"another-code",
map[string]string{"key1": "new-value1", "key3": "value3"},
},
expected{code, map[string]string{"key1": "new-value1", "key2": "value2", "key3": "value3"}},
},
}

for _, table := range tables {
t.Run(table.name, func(t *testing.T) {
var err *Error
if table.metadata != nil {
err = NewError(table.err, table.code, table.metadata)
if table.input.metadata != nil {
err = NewError(table.input.err, table.input.code, table.input.metadata)
} else {
err = NewError(table.err, table.code)
err = NewError(table.input.err, table.input.code)
}
assert.NotNil(t, err)
assert.Equal(t, table.code, err.Code)
assert.Equal(t, table.err.Error(), err.Message)
assert.Equal(t, table.metadata, err.Metadata)
assert.Equal(t, table.input.err.Error(), err.Message)
assert.Equal(t, table.expected.code, err.Code)
assert.Equal(t, table.expected.metadata, err.Metadata)
})
}
}
Expand Down

0 comments on commit f29a1d3

Please sign in to comment.