From b9e707070366f39ecc81516fe38b7b2d38fd0e37 Mon Sep 17 00:00:00 2001 From: Henrique Rodrigues Date: Mon, 16 Jul 2018 19:00:18 -0300 Subject: [PATCH 1/2] not overwrite pitaya error --- errors/errors.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/errors/errors.go b/errors/errors.go index ed5695c7..533e9573 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -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(), @@ -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 + } +} From a5bf7c8d4fde32299e0e85fbba109f2a48a0f6a3 Mon Sep 17 00:00:00 2001 From: Henrique Rodrigues Date: Mon, 16 Jul 2018 23:07:50 -0300 Subject: [PATCH 2/2] update on errors test --- errors/errors_test.go | 55 +++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/errors/errors_test.go b/errors/errors_test.go index 505960bc..0619ac09 100644 --- a/errors/errors_test.go +++ b/errors/errors_test.go @@ -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) }) } }