78 lines
2.5 KiB
Go
78 lines
2.5 KiB
Go
package web
|
||||
|
|
|
|||
|
|
import (
|
|||
|
|
"net/http"
|
|||
|
|
"net/http/httptest"
|
|||
|
|
"net/url"
|
|||
|
|
"strings"
|
|||
|
|
"testing"
|
|||
|
|
|
|||
|
|
"github.com/gin-gonic/gin"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func listPostContext(t *testing.T, path string, values url.Values) (*gin.Context, *httptest.ResponseRecorder) {
|
|||
|
|
t.Helper()
|
|||
|
|
gin.SetMode(gin.TestMode)
|
|||
|
|
recorder := httptest.NewRecorder()
|
|||
|
|
context, _ := gin.CreateTestContext(recorder)
|
|||
|
|
request := httptest.NewRequest(http.MethodPost, path, strings.NewReader(values.Encode()))
|
|||
|
|
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
|||
|
|
context.Request = request
|
|||
|
|
return context, recorder
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func assertRedirectQuery(t *testing.T, recorder *httptest.ResponseRecorder, wantPath string, want map[string]string) {
|
|||
|
|
t.Helper()
|
|||
|
|
location, err := url.Parse(recorder.Header().Get("Location"))
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fatal(err)
|
|||
|
|
}
|
|||
|
|
if location.Path != wantPath {
|
|||
|
|
t.Fatalf("跳转路径=%s,期望 %s", location.Path, wantPath)
|
|||
|
|
}
|
|||
|
|
for key, value := range want {
|
|||
|
|
if got := location.Query().Get(key); got != value {
|
|||
|
|
t.Fatalf("%s=%q,期望 %q;Location=%s", key, got, value, location.String())
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func Test列表写操作跳转保留筛选和页码(t *testing.T) {
|
|||
|
|
t.Run("PDD", func(t *testing.T) {
|
|||
|
|
context, recorder := listPostContext(t, "/pdd/delete", url.Values{
|
|||
|
|
"q": {"737"}, "status": {"pending"}, "page": {"3"},
|
|||
|
|
})
|
|||
|
|
(&Handler{}).pddRedirect(context, "完成")
|
|||
|
|
assertRedirectQuery(t, recorder, "/pdd", map[string]string{
|
|||
|
|
"q": "737", "status": "pending", "page": "3", "msg": "完成",
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
t.Run("任务", func(t *testing.T) {
|
|||
|
|
context, recorder := listPostContext(t, "/tasks/delete", url.Values{
|
|||
|
|
"q": {"TASK"}, "type": {"collect"}, "status": {"pending"}, "page": {"2"},
|
|||
|
|
})
|
|||
|
|
(&Handler{}).taskRedirect(context, "完成")
|
|||
|
|
assertRedirectQuery(t, recorder, "/tasks", map[string]string{
|
|||
|
|
"q": "TASK", "type": "collect", "status": "pending", "page": "2", "msg": "完成",
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
t.Run("客户端", func(t *testing.T) {
|
|||
|
|
context, recorder := listPostContext(t, "/clients/assign", url.Values{
|
|||
|
|
"name": {"仓库"}, "page": {"4"},
|
|||
|
|
})
|
|||
|
|
redirectClients(context, "完成", "")
|
|||
|
|
assertRedirectQuery(t, recorder, "/clients", map[string]string{
|
|||
|
|
"name": "仓库", "page": "4", "msg": "完成",
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
t.Run("用户", func(t *testing.T) {
|
|||
|
|
context, recorder := listPostContext(t, "/users/status", url.Values{
|
|||
|
|
"q": {"buyer"}, "list_status": {"active"}, "page": {"5"},
|
|||
|
|
})
|
|||
|
|
redirectUsers(context, "完成", "")
|
|||
|
|
assertRedirectQuery(t, recorder, "/users", map[string]string{
|
|||
|
|
"q": "buyer", "status": "active", "page": "5", "msg": "完成",
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
}
|