366 lines
7.5 KiB
Go
366 lines
7.5 KiB
Go
package api
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/yaoapp/gou/process"
|
|
"github.com/yaoapp/yao/config"
|
|
"github.com/yaoapp/yao/sui/core"
|
|
"github.com/yaoapp/yao/sui/storages/local"
|
|
)
|
|
|
|
func TestTemplateGet(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.template.get", "demo")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, []core.ITemplate{}, res)
|
|
assert.Equal(t, 3, len(res.([]core.ITemplate)))
|
|
}
|
|
|
|
func TestTemplateFind(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.template.find", "demo", "tech-blue")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, &local.Template{}, res)
|
|
assert.Equal(t, "tech-blue", res.(*local.Template).ID)
|
|
}
|
|
|
|
func TestTemplateAsset(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.template.asset", "demo", "tech-blue", "/css/tailwind.css")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.NotEmpty(t, res)
|
|
assert.Equal(t, "text/css; charset=utf-8", res.(map[string]interface{})["type"])
|
|
assert.NotEmpty(t, res.(map[string]interface{})["content"])
|
|
}
|
|
|
|
func TestTemplateLocaleGet(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.locale.get", "demo", "tech-blue")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, []core.SelectOption{}, res)
|
|
assert.Equal(t, 3, len(res.([]core.SelectOption)))
|
|
assert.Equal(t, "ar", res.([]core.SelectOption)[0].Value)
|
|
assert.Equal(t, "zh-cn", res.([]core.SelectOption)[1].Value)
|
|
assert.Equal(t, "zh-tw", res.([]core.SelectOption)[2].Value)
|
|
}
|
|
|
|
func TestTemplateThemeGet(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.theme.get", "demo", "tech-blue")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, []core.SelectOption{}, res)
|
|
assert.Equal(t, 2, len(res.([]core.SelectOption)))
|
|
assert.Equal(t, "dark", res.([]core.SelectOption)[0].Value)
|
|
assert.Equal(t, "light", res.([]core.SelectOption)[1].Value)
|
|
}
|
|
|
|
func TestTemplateBlockGet(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.block.get", "demo", "tech-blue")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, []core.IBlock{}, res)
|
|
assert.Equal(t, 4, len(res.([]core.IBlock)))
|
|
assert.Equal(t, "ColumnsTwo", res.([]core.IBlock)[0].(*local.Block).ID)
|
|
assert.Equal(t, "Hero", res.([]core.IBlock)[1].(*local.Block).ID)
|
|
assert.Equal(t, "Section", res.([]core.IBlock)[2].(*local.Block).ID)
|
|
assert.Equal(t, "Table", res.([]core.IBlock)[3].(*local.Block).ID)
|
|
}
|
|
|
|
func TestTemplateBlockFind(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.block.find", "demo", "tech-blue", "ColumnsTwo")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, "", res)
|
|
assert.Contains(t, res.(string), "window.block__ColumnsTwo=")
|
|
}
|
|
|
|
func TestTemplateComponentGet(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.component.get", "demo", "tech-blue")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, []core.IComponent{}, res)
|
|
assert.Equal(t, 3, len(res.([]core.IComponent)))
|
|
assert.Equal(t, "Box", res.([]core.IComponent)[0].(*local.Component).ID)
|
|
assert.Equal(t, "Card", res.([]core.IComponent)[1].(*local.Component).ID)
|
|
assert.Equal(t, "Nav", res.([]core.IComponent)[2].(*local.Component).ID)
|
|
}
|
|
|
|
func TestTemplateComponentFind(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.component.find", "demo", "tech-blue", "Box")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, "", res)
|
|
assert.Contains(t, res.(string), "window.component__Box=")
|
|
}
|
|
|
|
func TestPageTree(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.page.tree", "demo", "tech-blue")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, []*core.PageTreeNode{}, res)
|
|
assert.Equal(t, 5, len(res.([]*core.PageTreeNode)))
|
|
assert.Equal(t, "error", res.([]*core.PageTreeNode)[0].Name)
|
|
assert.Equal(t, "index", res.([]*core.PageTreeNode)[1].Name)
|
|
}
|
|
|
|
func TestPageGet(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.page.get", "demo", "tech-blue", "/index/[invite]")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
pages := res.([]core.IPage)
|
|
assert.IsType(t, []core.IPage{}, pages)
|
|
assert.Equal(t, 8, len(pages))
|
|
for _, page := range pages {
|
|
assert.IsType(t, &local.Page{}, page)
|
|
}
|
|
}
|
|
|
|
func TestPageAssetJS(t *testing.T) {
|
|
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.page.asset", "demo", "tech-blue", "/page/404/404.js")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.IsType(t, map[string]interface{}{}, res)
|
|
assert.Equal(t, "text/javascript; charset=utf-8", res.(map[string]interface{})["type"])
|
|
assert.NotEmpty(t, res.(map[string]interface{})["content"])
|
|
}
|
|
|
|
func TestPageAssetTS(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.page.asset", "demo", "tech-blue", "/page/404/404.ts")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.IsType(t, map[string]interface{}{}, res)
|
|
assert.Equal(t, "text/javascript; charset=utf-8", res.(map[string]interface{})["type"])
|
|
assert.NotEmpty(t, res.(map[string]interface{})["content"])
|
|
}
|
|
|
|
func TestPageAssetCSS(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.page.asset", "demo", "tech-blue", "/page/[id]/[id].css")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.IsType(t, map[string]interface{}{}, res)
|
|
assert.Equal(t, "text/css; charset=utf-8", res.(map[string]interface{})["type"])
|
|
assert.NotEmpty(t, res.(map[string]interface{})["content"])
|
|
}
|
|
|
|
func TestEditorRender(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.editor.render", "demo", "tech-blue", "/index")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, &core.ResponseEditor{}, res)
|
|
assert.NotEmpty(t, res.(*core.ResponseEditor).HTML)
|
|
}
|
|
|
|
func TestEditorRenderWithQuery(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
// test demo
|
|
p, err := process.Of("sui.editor.render", "demo", "tech-blue", "/index", map[string]interface{}{
|
|
"method": "POST",
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.IsType(t, &core.ResponseEditor{}, res)
|
|
assert.NotEmpty(t, res.(*core.ResponseEditor).HTML)
|
|
}
|
|
|
|
func TestEditorPageSource(t *testing.T) {
|
|
load(t)
|
|
defer clean()
|
|
|
|
sources := []string{"page", "script", "style", "data"}
|
|
for _, source := range sources {
|
|
p, err := process.Of("sui.editor.source", "demo", "tech-blue", "/index", source)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := p.Exec()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.IsType(t, core.ResponseSource{}, res)
|
|
assert.NotEmpty(t, res.(core.ResponseSource).Source)
|
|
assert.NotEmpty(t, res.(core.ResponseSource).Language)
|
|
}
|
|
}
|
|
|
|
func load(t *testing.T) {
|
|
prepare(t)
|
|
err := Load(config.Conf)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|