173 lines
4.1 KiB
Go
173 lines
4.1 KiB
Go
package table
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/yaoapp/kun/any"
|
|
"github.com/yaoapp/yao/network"
|
|
"github.com/yaoapp/yao/widgets/test"
|
|
)
|
|
|
|
var guards = map[string]gin.HandlerFunc{
|
|
"bearer-jwt": test.GuardBearerJWT,
|
|
"widget-table": Guard,
|
|
}
|
|
|
|
func TestAPISetting(t *testing.T) {
|
|
port := start(t)
|
|
defer test.Stop(func() {})
|
|
|
|
req := test.NewRequest(port).Route("/api/__yao/table/pet/setting")
|
|
res, err := req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 403, res.Status())
|
|
|
|
req = test.NewRequest(port).Route("/api/__yao/table/pet/setting").Token(token(t))
|
|
res, err = req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 200, res.Status())
|
|
|
|
v, err := res.Map()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data := any.Of(v).MapStr().Dot()
|
|
assert.Equal(t, "/api/xiang/import/pet", data.Get("header.preset.import.api.import"))
|
|
assert.Equal(t, "跳转", data.Get("header.preset.import.operation.0.title"))
|
|
assert.Equal(t, "/api/__yao/table/pet/component/fields.table.入院状态.view.props.xProps/remote", data.Get("fields.table.入院状态.view.props.xProps.remote.api"))
|
|
assert.Equal(t, "/api/__yao/table/pet/component/fields.table.入院状态.edit.props.xProps/remote", data.Get("fields.table.入院状态.edit.props.xProps.remote.api"))
|
|
}
|
|
|
|
func TestAPISearch(t *testing.T) {
|
|
port := start(t)
|
|
defer test.Stop(func() {})
|
|
|
|
req := test.NewRequest(port).Route("/api/__yao/table/session/search")
|
|
res, err := req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 403, res.Status())
|
|
|
|
req = test.NewRequest(port).Route("/api/__yao/table/session/search").Token(token(t))
|
|
res, err = req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 200, res.Status())
|
|
resp, err := res.Map()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data := any.Of(resp).MapStr().Dot()
|
|
assert.Equal(t, "20", fmt.Sprintf("%v", data.Get("pagesize")))
|
|
assert.Equal(t, "3", fmt.Sprintf("%v", data.Get("total")))
|
|
assert.Equal(t, "#FF0000", data.Get("data.0.status.color"))
|
|
assert.Equal(t, "status", data.Get("data.0.status.field"))
|
|
assert.Equal(t, "checked", data.Get("data.0.status.label"))
|
|
assert.Equal(t, "Cookie", data.Get("data.0.status.name"))
|
|
assert.Equal(t, "enabled", data.Get("data.0.mode"))
|
|
assert.Equal(t, "1", fmt.Sprintf("%v", data.Get("data.0.doctor_id")))
|
|
|
|
}
|
|
|
|
func TestAPISave(t *testing.T) {
|
|
port := start(t)
|
|
defer test.Stop(func() {})
|
|
|
|
payload := map[string]interface{}{
|
|
"name": "New Pet",
|
|
"type": "cat",
|
|
"status": "checked",
|
|
"mode": "enabled",
|
|
"stay": 66,
|
|
"cost": 24,
|
|
"doctor_id": 1,
|
|
}
|
|
|
|
req := test.NewRequest(port).Route("/api/__yao/table/pet/save").Data(payload)
|
|
res, err := req.Post()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 403, res.Status())
|
|
|
|
req = test.NewRequest(port).Route("/api/__yao/table/pet/save").Data(payload).Token(token(t))
|
|
res, err = req.Post()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 200, res.Status())
|
|
|
|
v, err := res.Int()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.Equal(t, 4, v)
|
|
}
|
|
|
|
func TestAPICustomGuard(t *testing.T) {
|
|
|
|
port := start(t)
|
|
defer test.Stop(func() {})
|
|
|
|
req := test.NewRequest(port).Route("/api/__yao/table/pet/find/1")
|
|
res, err := req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
req = test.NewRequest(port).Route("/api/__yao/table/pet/get")
|
|
res, err = req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 403, res.Status())
|
|
|
|
req = test.NewRequest(port).Route("/api/__yao/table/pet/get").Token(token(t)).Header("Unit-Test", "yes")
|
|
res, err = req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 418, res.Status())
|
|
|
|
req = test.NewRequest(port).Route("/api/__yao/table/pet/get").Token(token(t))
|
|
res, err = req.Get()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, 200, res.Status())
|
|
}
|
|
|
|
func start(t *testing.T) int {
|
|
port := network.FreePort()
|
|
load(t)
|
|
clear(t)
|
|
testData(t)
|
|
go test.Start(t, guards, port)
|
|
time.Sleep(200 * time.Millisecond)
|
|
return port
|
|
}
|
|
|
|
func token(t *testing.T) string {
|
|
res, err := test.AutoLogin(1)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
token, ok := res["token"].(string)
|
|
if !ok {
|
|
t.Fatal(fmt.Errorf("get token error %v", res))
|
|
}
|
|
return token
|
|
}
|