Put wrapped errors into the detailed field on serialization (#20846)

Этот коммит содержится в:
Tim Scheuermann
2022-08-18 14:22:12 +02:00
коммит произвёл GitHub
родитель 53985ef162
Коммит e665542c91
3 изменённых файлов: 68 добавлений и 1 удалений

Просмотреть файл

@@ -5,6 +5,7 @@ package model
import (
"bytes"
"errors"
"fmt"
"net/http"
"reflect"
@@ -112,6 +113,52 @@ func TestAppErrorRender(t *testing.T) {
})
}
func TestAppErrorSerialize(t *testing.T) {
t.Run("Normal", func(t *testing.T) {
aerr := NewAppError("", "message", nil, "", http.StatusTeapot)
js := aerr.ToJSON()
berr := AppErrorFromJSON(strings.NewReader(js))
require.Equal(t, "message", berr.Id)
require.Empty(t, berr.DetailedError)
require.Equal(t, http.StatusTeapot, berr.StatusCode)
require.EqualError(t, berr, aerr.Error())
})
t.Run("Detailed", func(t *testing.T) {
aerr := NewAppError("", "message", nil, "detail", http.StatusTeapot)
js := aerr.ToJSON()
berr := AppErrorFromJSON(strings.NewReader(js))
require.Equal(t, "message", berr.Id)
require.Equal(t, "detail", berr.DetailedError)
require.Equal(t, http.StatusTeapot, berr.StatusCode)
require.EqualError(t, berr, aerr.Error())
})
t.Run("Wrapped", func(t *testing.T) {
aerr := NewAppError("", "message", nil, "", http.StatusTeapot).Wrap(errors.New("wrapped"))
js := aerr.ToJSON()
berr := AppErrorFromJSON(strings.NewReader(js))
require.Equal(t, "message", berr.Id)
require.Equal(t, "wrapped", berr.DetailedError)
require.Equal(t, http.StatusTeapot, berr.StatusCode)
require.EqualError(t, berr, aerr.Error())
})
t.Run("Detailed + Wrapped", func(t *testing.T) {
aerr := NewAppError("", "message", nil, "detail", http.StatusTeapot).Wrap(errors.New("wrapped"))
js := aerr.ToJSON()
berr := AppErrorFromJSON(strings.NewReader(js))
require.Equal(t, "message", berr.Id)
require.Equal(t, "detail, wrapped", berr.DetailedError)
require.Equal(t, http.StatusTeapot, berr.StatusCode)
require.EqualError(t, berr, aerr.Error())
})
}
func TestCopyStringMap(t *testing.T) {
itemKey := "item1"
originalMap := make(map[string]string)