github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/utils/syserror_test.go (about) 1 /* 2 * Copyright (c) 2020-present unTill Pro, Ltd. 3 */ 4 5 package coreutils 6 7 import ( 8 "errors" 9 "net/http" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 14 "github.com/voedger/voedger/pkg/appdef" 15 ) 16 17 func TestBasicUsage_SysError(t *testing.T) { 18 require := require.New(t) 19 20 t.Run("basic", func(t *testing.T) { 21 testError := errors.New("test") 22 err := WrapSysError(testError, http.StatusInternalServerError) 23 var sysError SysError 24 require.ErrorAs(err, &sysError) 25 require.Equal("test", sysError.Message) 26 require.Equal(http.StatusInternalServerError, sysError.HTTPStatus) 27 require.Empty(sysError.Data) 28 require.Empty(sysError.QName) 29 require.Equal("test", sysError.Error()) 30 require.Equal(`{"sys.Error":{"HTTPStatus":500,"Message":"test"}}`, sysError.ToJSON()) 31 }) 32 33 t.Run("nil on nil", func(t *testing.T) { 34 require.NoError(WrapSysError(nil, http.StatusInternalServerError)) 35 }) 36 37 t.Run("wrap error that is SysError already", func(t *testing.T) { 38 err := SysError{ 39 HTTPStatus: http.StatusOK, 40 QName: appdef.NewQName("my", "test"), 41 Message: "test", 42 Data: "data", 43 } 44 wrapped := WrapSysError(err, http.StatusInternalServerError) 45 require.Equal(err, wrapped) 46 }) 47 48 t.Run("ToJSON", func(t *testing.T) { 49 err := SysError{ 50 HTTPStatus: http.StatusOK, 51 QName: appdef.NewQName("my", "test"), 52 Message: "test", 53 Data: "data", 54 } 55 require.Equal(`{"sys.Error":{"HTTPStatus":200,"Message":"test","QName":"my.test","Data":"data"}}`, err.ToJSON()) 56 }) 57 58 t.Run("NewSysError", func(t *testing.T) { 59 var sysErr SysError 60 require.ErrorAs(NewSysError(http.StatusContinue), &sysErr) 61 require.Empty(sysErr.Data) 62 require.Equal(http.StatusContinue, sysErr.HTTPStatus) 63 require.Empty(sysErr.Message) 64 require.Equal(appdef.NullQName, sysErr.QName) 65 }) 66 67 t.Run("emit status code with desc if message is empty but code > 0", func(t *testing.T) { 68 var sysErr SysError 69 require.ErrorAs(NewSysError(http.StatusContinue), &sysErr) 70 require.Equal("100 Continue", sysErr.Error()) 71 }) 72 73 t.Run("empty", func(t *testing.T) { 74 sysErr := SysError{} 75 require.Empty(sysErr.Error()) 76 }) 77 }