Ai
2 Star 3 Fork 0

YashanDB Community/yasrpc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
web_group_test.go 3.53 KB
一键复制 编辑 原始数据 按行查看 历史
zhouyuxin 提交于 2023-06-25 10:16 +08:00 . feat: add test cases
package yasrpc
import (
"net/http"
"net/http/httptest"
"testing"
"git.yasdb.com/go/yasutil/assert"
)
type header struct {
Key string
Value string
}
// PerformRequest for testing gin router.
func PerformRequest(r http.Handler, method, path string, headers ...header) *httptest.ResponseRecorder {
req := httptest.NewRequest(method, path, nil)
for _, h := range headers {
req.Header.Add(h.Key, h.Value)
}
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
return w
}
func TestRouterGroupBasic(t *testing.T) {
ast := assert.NewAssert(t)
router := NewEngine()
group := router.Group("/hola", func(c *Context) {})
group.Use(func(c *Context) {})
ast.Equal(len(group.Middlewares), 2)
ast.Equal("/hola", group.BasePath())
ast.DeepEqual(router, group.engine)
group2 := group.Group("manu")
group2.Use(func(c *Context) {}, func(c *Context) {})
ast.Equal(len(group2.Middlewares), 4)
ast.Equal("/hola/manu", group2.BasePath())
ast.DeepEqual(router, group2.engine)
}
func TestRouterGroupBasicHandle(t *testing.T) {
ast := assert.NewAssert(t)
performRequestInGroup(ast, http.MethodGet)
performRequestInGroup(ast, http.MethodPost)
performRequestInGroup(ast, http.MethodPut)
performRequestInGroup(ast, http.MethodPatch)
performRequestInGroup(ast, http.MethodDelete)
performRequestInGroup(ast, http.MethodHead)
performRequestInGroup(ast, http.MethodOptions)
}
func performRequestInGroup(ast *assert.Assert, method string) {
router := NewEngine()
v1 := router.Group("v1", func(c *Context) {})
ast.Equal("/v1", v1.BasePath())
login := v1.Group("/login/", func(c *Context) {}, func(c *Context) {})
ast.Equal("/v1/login/", login.BasePath())
handler := func(c *Context) {
c.String(http.StatusBadRequest, "the method was %s and index %d", c.Request.Method, c.index)
}
switch method {
case http.MethodGet:
v1.GET("/test", handler)
login.GET("/test", handler)
case http.MethodPost:
v1.POST("/test", handler)
login.POST("/test", handler)
case http.MethodPut:
v1.PUT("/test", handler)
login.PUT("/test", handler)
case http.MethodPatch:
v1.PATCH("/test", handler)
login.PATCH("/test", handler)
case http.MethodDelete:
v1.DELETE("/test", handler)
login.DELETE("/test", handler)
case http.MethodHead:
v1.HEAD("/test", handler)
login.HEAD("/test", handler)
case http.MethodOptions:
v1.OPTIONS("/test", handler)
login.OPTIONS("/test", handler)
default:
panic("unknown method")
}
w := PerformRequest(router, method, "/v1/login/test")
ast.Equal(http.StatusBadRequest, w.Code)
ast.Equal("the method was "+method+" and index 3", w.Body.String())
w = PerformRequest(router, method, "/v1/test")
ast.Equal(http.StatusBadRequest, w.Code)
ast.Equal("the method was "+method+" and index 1", w.Body.String())
}
func TestRouterGroupPipeline(t *testing.T) {
ast := assert.NewAssert(t)
router := NewEngine()
testRoutesInterface(ast, router)
v1 := router.Group("/v1")
testRoutesInterface(ast, v1)
}
func testRoutesInterface(ast *assert.Assert, r IRoutes) {
handler := func(c *Context) {}
ast.DeepEqual(r, r.Use(handler))
ast.DeepEqual(r, r.GET("/", handler))
ast.DeepEqual(r, r.POST("/", handler))
ast.DeepEqual(r, r.DELETE("/", handler))
ast.DeepEqual(r, r.PATCH("/", handler))
ast.DeepEqual(r, r.PUT("/", handler))
ast.DeepEqual(r, r.OPTIONS("/", handler))
ast.DeepEqual(r, r.HEAD("/", handler))
ast.DeepEqual(r, r.Match([]string{http.MethodPut, http.MethodPatch}, "/match", handler))
ast.DeepEqual(r, r.StaticFile("/file", "."))
ast.DeepEqual(r, r.Static("/static", "."))
ast.DeepEqual(r, r.StaticFS("/static2", Dir(".", false)))
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yashan_tech/yasrpc.git
git@gitee.com:yashan_tech/yasrpc.git
yashan_tech
yasrpc
yasrpc
master

搜索帮助