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  }