208 lines
6.5 KiB
Go
208 lines
6.5 KiB
Go
package dashboard
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/yaoapp/gou/model"
|
|
"github.com/yaoapp/gou/process"
|
|
"github.com/yaoapp/gou/session"
|
|
"github.com/yaoapp/kun/any"
|
|
"github.com/yaoapp/yao/config"
|
|
"github.com/yaoapp/yao/test"
|
|
"github.com/yaoapp/yao/widgets/component"
|
|
)
|
|
|
|
func TestProcessData(t *testing.T) {
|
|
test.Prepare(t, config.Conf)
|
|
defer test.Clean()
|
|
prepare(t)
|
|
|
|
args := []interface{}{"workspace", map[string]interface{}{"range": "2022-01-02", "status": "checked"}}
|
|
res, err := process.New("yao.dashboard.Data", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data := any.Of(res).MapStr()
|
|
assert.Equal(t, 14, len(data))
|
|
}
|
|
|
|
func TestProcessComponent(t *testing.T) {
|
|
test.Prepare(t, config.Conf)
|
|
defer test.Clean()
|
|
prepare(t)
|
|
testData(t)
|
|
|
|
args := []interface{}{
|
|
"workspace",
|
|
"fields.filter.状态.edit.props.xProps",
|
|
"remote",
|
|
}
|
|
|
|
res, err := process.New("yao.dashboard.Component", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
pets, ok := res.([]component.Option)
|
|
assert.True(t, ok)
|
|
assert.Equal(t, 2, len(pets))
|
|
assert.Equal(t, "Cookie", pets[0].Label)
|
|
assert.Equal(t, "checked", pets[0].Value)
|
|
assert.Equal(t, "Baby", pets[1].Label)
|
|
assert.Equal(t, "checked", pets[1].Value)
|
|
|
|
args = []interface{}{
|
|
"workspace",
|
|
"fields.dashboard.图表展示1",
|
|
"data",
|
|
map[string]interface{}{"foo": "bar"},
|
|
}
|
|
|
|
res2, err := process.New("yao.dashboard.Component", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
values, ok := res2.([]interface{})
|
|
assert.True(t, ok)
|
|
assert.Greater(t, len(values), 1)
|
|
|
|
args = []interface{}{
|
|
"workspace",
|
|
"fields.dashboard.图表展示2",
|
|
"data",
|
|
map[string]interface{}{"foo": "bar"},
|
|
}
|
|
|
|
res2, err = process.New("yao.dashboard.Component", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
values, ok = res2.([]interface{})
|
|
assert.True(t, ok)
|
|
assert.Greater(t, len(values), 1)
|
|
|
|
}
|
|
|
|
func TestProcessComponentError(t *testing.T) {
|
|
test.Prepare(t, config.Conf)
|
|
defer test.Clean()
|
|
prepare(t)
|
|
|
|
args := []interface{}{
|
|
"workspace",
|
|
"fields.filter.edit.props.状态.::not-exist",
|
|
"remote",
|
|
map[string]interface{}{"select": []string{"name", "status"}, "limit": 2},
|
|
}
|
|
_, err := process.New("yao.dashboard.Component", args...).Exec()
|
|
assert.Contains(t, err.Error(), "fields.filter.edit.props.状态.::not-exist")
|
|
}
|
|
|
|
func TestProcessSetting(t *testing.T) {
|
|
test.Prepare(t, config.Conf)
|
|
defer test.Clean()
|
|
prepare(t)
|
|
|
|
args := []interface{}{"workspace"}
|
|
res, err := process.New("yao.dashboard.Setting", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data := any.Of(res).MapStr().Dot()
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.filter."+url.QueryEscape("状态")+".edit.props.xProps/remote", data.Get("fields.filter.状态.edit.props.xProps.remote.api"))
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.dashboard."+url.QueryEscape("图表展示1")+"/data", data.Get("fields.dashboard.图表展示1.data.api"))
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.dashboard."+url.QueryEscape("图表展示2")+"/data", data.Get("fields.dashboard.图表展示2.data.api"))
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.dashboard."+url.QueryEscape("宠物列表")+".view.props/"+url.QueryEscape("on:change"), data.Get("hooks.onChange.宠物列表.api"))
|
|
}
|
|
|
|
func TestProcessXgen(t *testing.T) {
|
|
test.Prepare(t, config.Conf)
|
|
defer test.Clean()
|
|
prepare(t)
|
|
|
|
args := []interface{}{"workspace"}
|
|
res, err := process.New("yao.dashboard.Xgen", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data := any.Of(res).MapStr().Dot()
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.filter."+url.QueryEscape("状态")+".edit.props.xProps/remote", data.Get("fields.filter.状态.edit.props.xProps.remote.api"))
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.dashboard."+url.QueryEscape("图表展示1")+"/data", data.Get("fields.dashboard.图表展示1.data.api"))
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.dashboard."+url.QueryEscape("图表展示2")+"/data", data.Get("fields.dashboard.图表展示2.data.api"))
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.dashboard."+url.QueryEscape("宠物列表")+".view.props/"+url.QueryEscape("on:change"), data.Get("hooks.onChange.宠物列表.api"))
|
|
}
|
|
|
|
func TestProcessXgenWithPermissions(t *testing.T) {
|
|
test.Prepare(t, config.Conf)
|
|
defer test.Clean()
|
|
prepare(t)
|
|
|
|
session.Global().Set("__permissions", map[string]interface{}{
|
|
"dashboards.workspace": []string{
|
|
"7f46a38d7ff3f1832375ff63cd412f41", // operation.actions[0] 跳转至大屏
|
|
"09302a46b1b6f13a346deeea79b859dd", // 时间区间
|
|
"8b445709024e0e5361d8bcdd58c75fcb", // 图表展示2
|
|
"0bdee1c9858ef2a821a0ff7109d3fc5b", // 图表展示1
|
|
},
|
|
})
|
|
|
|
args := []interface{}{"workspace"}
|
|
res, err := process.New("yao.dashboard.Xgen", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data := any.Of(res).MapStr().Dot()
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.filter."+url.QueryEscape("状态")+".edit.props.xProps/remote", data.Get("fields.filter.状态.edit.props.xProps.remote.api"))
|
|
assert.NotEqual(t, "时间区间", data.Get("filter.columns[0].name"))
|
|
assert.Equal(t, nil, data.Get("actions[0]"))
|
|
assert.Equal(t, nil, data.Get("fields.dashboard.图表展示1"))
|
|
assert.Equal(t, nil, data.Get("fields.dashboard.图表展示2"))
|
|
|
|
session.Global().Set("__permissions", nil)
|
|
res, err = process.New("yao.dashboard.Xgen", args...).Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data = any.Of(res).MapStr().Dot()
|
|
assert.Equal(t, "/api/__yao/dashboard/workspace/component/fields.filter."+url.QueryEscape("状态")+".edit.props.xProps/remote", data.Get("fields.filter.状态.edit.props.xProps.remote.api"))
|
|
assert.Equal(t, "时间区间", data.Get("filter.columns[0].name"))
|
|
assert.NotEqual(t, nil, data.Get("actions[0]"))
|
|
assert.NotEqual(t, nil, data.Get("fields.dashboard.图表展示1"))
|
|
assert.NotEqual(t, nil, data.Get("fields.dashboard.图表展示2"))
|
|
}
|
|
|
|
func testData(t *testing.T) {
|
|
pet := model.Select("pet")
|
|
err := pet.Insert(
|
|
[]string{"name", "type", "status", "mode", "stay", "cost", "doctor_id"},
|
|
[][]interface{}{
|
|
{"Cookie", "cat", "checked", "enabled", 200, 105, 1},
|
|
{"Baby", "dog", "checked", "enabled", 186, 24, 1},
|
|
{"Poo", "others", "checked", "enabled", 199, 66, 1},
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func clear(t *testing.T) {
|
|
for _, m := range model.Models {
|
|
err := m.DropTable()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = m.Migrate(true)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|