github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/ginx/anyfn/error_test.go (about) 1 package anyfn_test 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/bingoohuang/gg/pkg/ginx" 8 "github.com/bingoohuang/gg/pkg/ginx/adapt" 9 "github.com/bingoohuang/gg/pkg/ginx/anyfn" 10 "github.com/bingoohuang/gg/pkg/ginx/gintest" 11 "github.com/gin-gonic/gin" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestError(t *testing.T) { 16 af := anyfn.NewAdapter() 17 r := adapt.Adapt(gin.New(), af) 18 19 r.Any("/error", af.F(func() error { return errors.New("error occurred") })) 20 r.GET("/ok", af.F(func() error { return nil })) 21 r.GET("/url", af.F(func(c *gin.Context) (string, error) { return c.Request.URL.String(), nil })) 22 23 rr := gintest.Get("/error", r) 24 assert.Equal(t, 500, rr.StatusCode()) 25 assert.Equal(t, "error: error occurred", rr.Body()) 26 27 rr = gintest.Get("/ok", r) 28 assert.Equal(t, 200, rr.StatusCode()) 29 30 rr = gintest.Get("/url", r) 31 assert.Equal(t, 200, rr.StatusCode()) 32 assert.Equal(t, "/url", rr.Body()) 33 } 34 35 func TestError2(t *testing.T) { 36 af := anyfn.NewAdapter() 37 38 type Resp struct { 39 Code int 40 Message string 41 } 42 af.PrependOutSupport(anyfn.OutSupportFn(func(v interface{}, vs []interface{}, c *gin.Context) (bool, error) { 43 if err, ok := v.(error); ok { 44 c.Render(505, ginx.JSONRender{Data: Resp{Code: 500, Message: err.Error()}}) 45 return true, nil 46 } 47 48 return false, nil 49 })) 50 r := adapt.Adapt(gin.New(), af) 51 52 r.Any("/error", af.F(func() error { return errors.New("error occurred") })) 53 r.GET("/ok", af.F(func() error { return nil })) 54 r.GET("/url", af.F(func(c *gin.Context) (string, error) { return c.Request.URL.String(), nil })) 55 56 rr := gintest.Get("/error", r) 57 assert.Equal(t, 505, rr.StatusCode()) 58 assert.Equal(t, `{"code":500,"message":"error occurred"}`, rr.Body()) 59 60 rr = gintest.Get("/ok", r) 61 assert.Equal(t, 200, rr.StatusCode()) 62 63 rr = gintest.Get("/url", r) 64 assert.Equal(t, 200, rr.StatusCode()) 65 assert.Equal(t, "/url", rr.Body()) 66 }