fix: 接通服务器V2排序链路
- 将排序参数从V2 Handler传递至Service与Repository - 增加仓储分页排序与参数白名单测试
This commit is contained in:
1 parent
09e6271bb4
commit
83662487cb
7 files changed
+98
-41
No files matched your search
@@ -1,27 +1,26 @@
|
||||
package controller
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
// TestServerOrderClause 验证服务器排序字段仅使用后端白名单表达式。 // Logan.Li
|
||||
func TestServerOrderClause(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
sortField string
|
||||
order string
|
||||
want string
|
||||
}{
|
||||
{name: "默认排序", want: "created_at DESC"},
|
||||
{name: "主机名升序", sortField: "hostname", order: "asc", want: "LOWER(hostname) ASC, id ASC"},
|
||||
{name: "主机名降序", sortField: "hostname", order: "desc", want: "LOWER(hostname) DESC, id DESC"},
|
||||
{name: "非法方向回退升序", sortField: "hostname", order: "invalid", want: "LOWER(hostname) ASC, id ASC"},
|
||||
{name: "非法字段回退默认", sortField: "hostname; DROP TABLE sys_servers", order: "asc", want: "created_at DESC"},
|
||||
"ezops/model"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// TestServerPageQueryBinding 验证服务器列表能绑定排序查询参数。 // Logan.Li
|
||||
func TestServerPageQueryBinding(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
request := httptest.NewRequest("GET", "/servers?page=1&page_size=10&sort=hostname&order=asc", nil)
|
||||
context, _ := gin.CreateTestContext(httptest.NewRecorder())
|
||||
context.Request = request
|
||||
|
||||
var query model.PageQuery
|
||||
if err := context.ShouldBindQuery(&query); err != nil {
|
||||
t.Fatalf("ShouldBindQuery() error = %v", err)
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := serverOrderClause(tt.sortField, tt.order); got != tt.want {
|
||||
t.Fatalf("serverOrderClause(%q, %q) = %q, want %q", tt.sortField, tt.order, got, tt.want)
|
||||
}
|
||||
})
|
||||
if query.Sort != "hostname" || query.Order != "asc" {
|
||||
t.Fatalf("排序参数绑定结果为 sort=%q order=%q", query.Sort, query.Order)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user