github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/gin/errors_test.go (about) 1 // Copyright 2014 Manu Martinez-Almeida. All rights reserved. 2 // Use of this source code is governed by a MIT style 3 // license that can be found in the LICENSE file. 4 5 package gin 6 7 import ( 8 "errors" 9 "testing" 10 11 "github.com/hellobchain/third_party/gin/internal/json" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestError(t *testing.T) { 16 baseError := errors.New("test error") 17 err := &Error{ 18 Err: baseError, 19 Type: ErrorTypePrivate, 20 } 21 assert.Equal(t, err.Error(), baseError.Error()) 22 assert.Equal(t, H{"error": baseError.Error()}, err.JSON()) 23 24 assert.Equal(t, err.SetType(ErrorTypePublic), err) 25 assert.Equal(t, ErrorTypePublic, err.Type) 26 27 assert.Equal(t, err.SetMeta("some data"), err) 28 assert.Equal(t, "some data", err.Meta) 29 assert.Equal(t, H{ 30 "error": baseError.Error(), 31 "meta": "some data", 32 }, err.JSON()) 33 34 jsonBytes, _ := json.Marshal(err) 35 assert.Equal(t, "{\"error\":\"test error\",\"meta\":\"some data\"}", string(jsonBytes)) 36 37 err.SetMeta(H{ // nolint: errcheck 38 "status": "200", 39 "data": "some data", 40 }) 41 assert.Equal(t, H{ 42 "error": baseError.Error(), 43 "status": "200", 44 "data": "some data", 45 }, err.JSON()) 46 47 err.SetMeta(H{ // nolint: errcheck 48 "error": "custom error", 49 "status": "200", 50 "data": "some data", 51 }) 52 assert.Equal(t, H{ 53 "error": "custom error", 54 "status": "200", 55 "data": "some data", 56 }, err.JSON()) 57 58 type customError struct { 59 status string 60 data string 61 } 62 err.SetMeta(customError{status: "200", data: "other data"}) // nolint: errcheck 63 assert.Equal(t, customError{status: "200", data: "other data"}, err.JSON()) 64 } 65 66 func TestErrorSlice(t *testing.T) { 67 errs := errorMsgs{ 68 {Err: errors.New("first"), Type: ErrorTypePrivate}, 69 {Err: errors.New("second"), Type: ErrorTypePrivate, Meta: "some data"}, 70 {Err: errors.New("third"), Type: ErrorTypePublic, Meta: H{"status": "400"}}, 71 } 72 73 assert.Equal(t, errs, errs.ByType(ErrorTypeAny)) 74 assert.Equal(t, "third", errs.Last().Error()) 75 assert.Equal(t, []string{"first", "second", "third"}, errs.Errors()) 76 assert.Equal(t, []string{"third"}, errs.ByType(ErrorTypePublic).Errors()) 77 assert.Equal(t, []string{"first", "second"}, errs.ByType(ErrorTypePrivate).Errors()) 78 assert.Equal(t, []string{"first", "second", "third"}, errs.ByType(ErrorTypePublic|ErrorTypePrivate).Errors()) 79 assert.Empty(t, errs.ByType(ErrorTypeBind)) 80 assert.Empty(t, errs.ByType(ErrorTypeBind).String()) 81 82 assert.Equal(t, `Error #01: first 83 Error #02: second 84 Meta: some data 85 Error #03: third 86 Meta: map[status:400] 87 `, errs.String()) 88 assert.Equal(t, []interface{}{ 89 H{"error": "first"}, 90 H{"error": "second", "meta": "some data"}, 91 H{"error": "third", "status": "400"}, 92 }, errs.JSON()) 93 jsonBytes, _ := json.Marshal(errs) 94 assert.Equal(t, "[{\"error\":\"first\"},{\"error\":\"second\",\"meta\":\"some data\"},{\"error\":\"third\",\"status\":\"400\"}]", string(jsonBytes)) 95 errs = errorMsgs{ 96 {Err: errors.New("first"), Type: ErrorTypePrivate}, 97 } 98 assert.Equal(t, H{"error": "first"}, errs.JSON()) 99 jsonBytes, _ = json.Marshal(errs) 100 assert.Equal(t, "{\"error\":\"first\"}", string(jsonBytes)) 101 102 errs = errorMsgs{} 103 assert.Nil(t, errs.Last()) 104 assert.Nil(t, errs.JSON()) 105 assert.Empty(t, errs.String()) 106 }