[chore] Update sui test cases

This commit is contained in:
Max 2024-07-04 17:06:42 +08:00
parent e266ab438f
commit a435b1ad6e
17 changed files with 464 additions and 580 deletions

View file

@ -55,7 +55,6 @@ env:
YAO_EXTENSION_ROOT: ${{ github.WORKSPACE }}/../extension
YAO_TEST_APPLICATION: ${{ github.WORKSPACE }}/../app
YAO_SUI_TEST_APPLICATION: ${{ github.WORKSPACE }}/../yao-startup-webapp
YAO_TEST_BUILDER_APPLICATION: ${{ github.WORKSPACE }}/../page-builder-app
## Runtime
YAO_RUNTIME_MIN: 3
@ -160,13 +159,6 @@ jobs:
token: ${{ secrets.YAO_TEST_TOKEN }}
path: yao-startup-webapp
- name: Checkout Page Builder App
uses: actions/checkout@v4
with:
repository: yaoapp/page-builder-app
token: ${{ secrets.YAO_TEST_TOKEN }}
path: page-builder-app
- name: Checkout Extension
uses: actions/checkout@v4
with:
@ -181,7 +173,6 @@ jobs:
mv v8go ../
mv app ../
mv extension ../
mv page-builder-app ../
mv yao-startup-webapp ../
ls -l .
ls -l ../

View file

@ -59,7 +59,6 @@ env:
YAO_EXTENSION_ROOT: ${{ github.WORKSPACE }}/../extension
YAO_TEST_APPLICATION: ${{ github.WORKSPACE }}/../app
YAO_SUI_TEST_APPLICATION: ${{ github.WORKSPACE }}/../yao-startup-webapp
YAO_TEST_BUILDER_APPLICATION: ${{ github.WORKSPACE }}/../page-builder-app
## Runtime
YAO_RUNTIME_MIN: 3
@ -118,13 +117,6 @@ jobs:
token: ${{ secrets.YAO_TEST_TOKEN }}
path: yao-startup-webapp
- name: Checkout Page Builder App
uses: actions/checkout@v4
with:
repository: yaoapp/page-builder-app
token: ${{ secrets.YAO_TEST_TOKEN }}
path: page-builder-app
- name: Checkout Extension
uses: actions/checkout@v4
with:
@ -139,7 +131,6 @@ jobs:
mv v8go ../
mv app ../
mv extension ../
mv page-builder-app ../
mv yao-startup-webapp ../
ls -l .
ls -l ../

View file

@ -10,26 +10,23 @@ import (
func TestCompile(t *testing.T) {
prepare(t)
defer clean()
loadTestSui(t)
page := testPage(t)
html, err := page.Compile(nil, &core.BuildOption{KeepPageTag: false})
if err != nil {
t.Fatalf("Compile error: %v", err)
}
assert.Contains(t, html, `<a href="Link2">Link2</a>`)
assert.Contains(t, html, `<a href="Link">Link</a>`)
assert.Contains(t, html, "input.data")
assert.Contains(t, html, `The basic test cases`)
}
func testPage(t *testing.T) *core.Page {
sui := core.SUIs["demo"]
sui := core.SUIs["test"]
if sui == nil {
t.Fatal("SUI demo not found")
t.Fatal("SUI test not found")
}
tmpl, err := sui.GetTemplate("tech-blue")
tmpl, err := sui.GetTemplate("basic")
if err != nil {
t.Fatal(err)
}

View file

@ -9,17 +9,16 @@ import (
"github.com/gin-gonic/gin"
"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)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.template.get", "demo")
p, err := process.Of("sui.template.get", "test")
if err != nil {
t.Fatal(err)
}
@ -30,15 +29,15 @@ func TestTemplateGet(t *testing.T) {
}
assert.IsType(t, []core.ITemplate{}, res)
assert.Equal(t, 3, len(res.([]core.ITemplate)))
assert.Equal(t, 2, len(res.([]core.ITemplate)))
}
func TestTemplateFind(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.template.find", "demo", "tech-blue")
p, err := process.Of("sui.template.find", "test", "advanced")
if err != nil {
t.Fatal(err)
}
@ -49,15 +48,15 @@ func TestTemplateFind(t *testing.T) {
}
assert.IsType(t, &local.Template{}, res)
assert.Equal(t, "tech-blue", res.(*local.Template).ID)
assert.Equal(t, "advanced", res.(*local.Template).ID)
}
func TestTemplateAsset(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.template.asset", "demo", "tech-blue", "/css/tailwind.css")
p, err := process.Of("sui.template.asset", "test", "advanced", "/css/app.css")
if err != nil {
t.Fatal(err)
}
@ -73,11 +72,11 @@ func TestTemplateAsset(t *testing.T) {
}
func TestTemplateLocaleGet(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.locale.get", "demo", "tech-blue")
p, err := process.Of("sui.locale.get", "test", "advanced")
if err != nil {
t.Fatal(err)
}
@ -89,17 +88,17 @@ func TestTemplateLocaleGet(t *testing.T) {
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, "ja-jp", 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)
assert.Equal(t, "zh-hk", res.([]core.SelectOption)[2].Value)
}
func TestTemplateThemeGet(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.theme.get", "demo", "tech-blue")
p, err := process.Of("sui.theme.get", "test", "advanced")
if err != nil {
t.Fatal(err)
}
@ -111,16 +110,16 @@ func TestTemplateThemeGet(t *testing.T) {
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)
assert.Equal(t, "light", res.([]core.SelectOption)[0].Value)
assert.Equal(t, "dark", res.([]core.SelectOption)[1].Value)
}
func TestBlockGet(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.block.get", "demo", "tech-blue")
p, err := process.Of("sui.block.get", "test", "advanced")
if err != nil {
t.Fatal(err)
}
@ -131,75 +130,61 @@ func TestBlockGet(t *testing.T) {
}
assert.IsType(t, []core.IBlock{}, res)
assert.Equal(t, 7, 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, "Image", res.([]core.IBlock)[2].(*local.Block).ID)
assert.Equal(t, "Section", res.([]core.IBlock)[3].(*local.Block).ID)
assert.Equal(t, 0, len(res.([]core.IBlock)))
}
func TestBlockFind(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.block.find", "demo", "tech-blue", "ColumnsTwo")
p, err := process.Of("sui.block.find", "test", "advanced", "not-found")
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=")
_, err = p.Exec()
assert.NotNil(t, err)
}
func TestBlockExport(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.block.export", "demo", "tech-blue")
p, err := process.Of("sui.block.export", "test", "advanced")
if err != nil {
t.Fatal(err)
}
res, err := p.Exec()
if err != nil {
t.Fatal(err)
}
assert.IsType(t, &core.BlockLayoutItems{}, res)
assert.Equal(t, 3, len(res.(*core.BlockLayoutItems).Categories))
_, err = p.Exec()
assert.Nil(t, err)
}
func TestBlockMedia(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.block.media", "demo", "tech-blue", "ColumnsTwo")
p, err := process.Of("sui.block.media", "test", "advanced", "not-found")
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, "image/png", res.(map[string]interface{})["type"])
assert.NotEmpty(t, res.(map[string]interface{})["content"])
_, err = p.Exec()
assert.NotNil(t, err)
// assert.IsType(t, map[string]interface{}{}, res)
// assert.Equal(t, "image/png", res.(map[string]interface{})["type"])
// assert.NotEmpty(t, res.(map[string]interface{})["content"])
}
func TestTemplateComponentGet(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.component.get", "demo", "tech-blue")
p, err := process.Of("sui.component.get", "test", "advanced")
if err != nil {
t.Fatal(err)
}
@ -210,37 +195,29 @@ func TestTemplateComponentGet(t *testing.T) {
}
assert.IsType(t, []core.IComponent{}, res)
assert.Equal(t, 6, 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)
assert.Equal(t, 0, len(res.([]core.IComponent)))
}
func TestTemplateComponentFind(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.component.find", "demo", "tech-blue", "Box")
p, err := process.Of("sui.component.find", "test", "advanced", "not-found")
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=")
_, err = p.Exec()
assert.NotNil(t, err)
}
func TestPageTree(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.tree", "demo", "tech-blue")
p, err := process.Of("sui.page.tree", "test", "advanced")
if err != nil {
t.Fatal(err)
}
@ -251,17 +228,15 @@ func TestPageTree(t *testing.T) {
}
assert.IsType(t, []*core.PageTreeNode{}, res)
assert.Equal(t, 6, len(res.([]*core.PageTreeNode)))
assert.Equal(t, "error", res.([]*core.PageTreeNode)[0].Name)
assert.Equal(t, "footer", res.([]*core.PageTreeNode)[1].Name)
assert.GreaterOrEqual(t, len(res.([]*core.PageTreeNode)), 2)
}
func TestPageGet(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.get", "demo", "tech-blue", "/index/[invite]")
p, err := process.Of("sui.page.get", "test", "advanced", "/page/[id]")
if err != nil {
t.Fatal(err)
}
@ -273,7 +248,7 @@ func TestPageGet(t *testing.T) {
pages := res.([]core.IPage)
assert.IsType(t, []core.IPage{}, pages)
assert.Equal(t, 9, len(pages))
assert.GreaterOrEqual(t, len(pages), 2)
for _, page := range pages {
assert.IsType(t, &local.Page{}, page)
}
@ -281,11 +256,11 @@ func TestPageGet(t *testing.T) {
func TestPageExist(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.exist", "demo", "tech-blue", "/index/[invite]")
p, err := process.Of("sui.page.exist", "test", "advanced", "/page/[id]")
if err != nil {
t.Fatal(err)
}
@ -297,7 +272,7 @@ func TestPageExist(t *testing.T) {
assert.IsType(t, true, res)
assert.Equal(t, true, res.(bool))
p, err = process.Of("sui.page.exist", "demo", "tech-blue", "/index/[invite]/[invite]")
p, err = process.Of("sui.page.exist", "test", "advanced", "/page/[id]/[id]")
if err != nil {
t.Fatal(err)
}
@ -312,16 +287,16 @@ func TestPageExist(t *testing.T) {
func TestPageCreate(t *testing.T) {
load(t)
prepare(t)
defer clean()
defer func() {
_, err := process.New("sui.page.remove", "demo", "tech-blue", "/unit-test").Exec()
_, err := process.New("sui.page.remove", "test", "advanced", "/unit-test").Exec()
if err != nil {
t.Fatal(err)
}
}()
// test demo
p, err := process.Of("sui.page.create", "demo", "tech-blue", "/unit-test")
p, err := process.Of("sui.page.create", "test", "advanced", "/unit-test")
if err != nil {
t.Fatal(err)
}
@ -335,17 +310,17 @@ func TestPageCreate(t *testing.T) {
func TestPageRename(t *testing.T) {
load(t)
prepare(t)
defer clean()
defer func() {
_, err := process.New("sui.page.remove", "demo", "tech-blue", "/unit-test-2").Exec()
_, err := process.New("sui.page.remove", "test", "advanced", "/unit-test-2").Exec()
if err != nil {
t.Fatal(err)
}
}()
// test demo
p, err := process.Of("sui.page.create", "demo", "tech-blue", "/unit-test")
p, err := process.Of("sui.page.create", "test", "advanced", "/unit-test")
if err != nil {
t.Fatal(err)
}
@ -358,7 +333,7 @@ func TestPageRename(t *testing.T) {
assert.Nil(t, res)
// rename
p, err = process.Of("sui.page.rename", "demo", "tech-blue", "/unit-test", map[string]interface{}{"route": "/unit-test-2"})
p, err = process.Of("sui.page.rename", "test", "advanced", "/unit-test", map[string]interface{}{"route": "/unit-test-2"})
if err != nil {
t.Fatal(err)
}
@ -372,17 +347,17 @@ func TestPageRename(t *testing.T) {
func TestPageDuplicate(t *testing.T) {
load(t)
prepare(t)
defer clean()
defer func() {
_, err := process.New("sui.page.remove", "demo", "tech-blue", "/unit-test").Exec()
_, err := process.New("sui.page.remove", "test", "advanced", "/unit-test").Exec()
if err != nil {
t.Fatal(err)
}
}()
// test demo
p, err := process.Of("sui.page.duplicate", "demo", "tech-blue", "/page/[id]", map[string]interface{}{"title": "hello", "route": "/unit-test"})
p, err := process.Of("sui.page.duplicate", "test", "advanced", "/page/[id]", map[string]interface{}{"title": "hello", "route": "/unit-test"})
if err != nil {
t.Fatal(err)
}
@ -396,11 +371,11 @@ func TestPageDuplicate(t *testing.T) {
func TestPageCreateSaveThenRemove(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.create", "demo", "tech-blue", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
p, err := process.Of("sui.page.create", "test", "advanced", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
if err != nil {
t.Fatal(err)
}
@ -412,7 +387,7 @@ func TestPageCreateSaveThenRemove(t *testing.T) {
assert.Nil(t, res)
// test demo
p, err = process.Of("sui.page.remove", "demo", "tech-blue", "/unit-test")
p, err = process.Of("sui.page.remove", "test", "advanced", "/unit-test")
if err != nil {
t.Fatal(err)
}
@ -426,11 +401,11 @@ func TestPageCreateSaveThenRemove(t *testing.T) {
func TestPageSaveThenRemove(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.create", "demo", "tech-blue", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
p, err := process.Of("sui.page.create", "test", "advanced", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
if err != nil {
t.Fatal(err)
}
@ -442,7 +417,7 @@ func TestPageSaveThenRemove(t *testing.T) {
assert.Nil(t, res)
// test demo
p, err = process.Of("sui.page.SaveTemp", "demo", "tech-blue", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
p, err = process.Of("sui.page.SaveTemp", "test", "advanced", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
if err != nil {
t.Fatal(err)
}
@ -454,7 +429,7 @@ func TestPageSaveThenRemove(t *testing.T) {
assert.Nil(t, res)
// test demo
p, err = process.Of("sui.page.Save", "demo", "tech-blue", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
p, err = process.Of("sui.page.Save", "test", "advanced", "/unit-test", `{"uid":"unit-test", "needToSave":{"page":true}, "page":{"source":"<div>1</div>", "language":"html"}}`)
if err != nil {
t.Fatal(err)
}
@ -466,7 +441,7 @@ func TestPageSaveThenRemove(t *testing.T) {
assert.Nil(t, res)
// test demo
p, err = process.Of("sui.page.remove", "demo", "tech-blue", "/unit-test")
p, err = process.Of("sui.page.remove", "test", "advanced", "/unit-test")
if err != nil {
t.Fatal(err)
}
@ -482,7 +457,7 @@ func TestGetSource(t *testing.T) {
// *core.RequestSource
var payload interface{} = &core.RequestSource{UID: "unit-test"}
args := []interface{}{"demo", "tech-blue", "/index/[invite]", payload}
args := []interface{}{"test", "advanced", "/index/[invite]", payload}
p, err := process.Of("sui.page.Save", args...)
if err != nil {
t.Fatal(err)
@ -574,11 +549,11 @@ func TestGetSource(t *testing.T) {
func TestPageAssetJS(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.asset", "demo", "tech-blue", "/page/404/404.js")
p, err := process.Of("sui.page.asset", "test", "advanced", "/page/[id]/404/404.js")
if err != nil {
t.Fatal(err)
}
@ -593,11 +568,11 @@ func TestPageAssetJS(t *testing.T) {
}
func TestPageAssetTS(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.asset", "demo", "tech-blue", "/page/404/404.ts")
p, err := process.Of("sui.page.asset", "test", "advanced", "/page/[id]/404/404.ts")
if err != nil {
t.Fatal(err)
}
@ -612,11 +587,11 @@ func TestPageAssetTS(t *testing.T) {
}
func TestPageAssetCSS(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.page.asset", "demo", "tech-blue", "/page/[id]/[id].css")
p, err := process.Of("sui.page.asset", "test", "advanced", "/page/[id]/[id].css")
if err != nil {
t.Fatal(err)
}
@ -631,11 +606,11 @@ func TestPageAssetCSS(t *testing.T) {
}
func TestEditorRender(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.editor.render", "demo", "tech-blue", "/index")
p, err := process.Of("sui.editor.render", "test", "advanced", "/index")
if err != nil {
t.Fatal(err)
}
@ -651,12 +626,12 @@ func TestEditorRender(t *testing.T) {
}
func TestEditorPageSource(t *testing.T) {
load(t)
prepare(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)
p, err := process.Of("sui.editor.source", "test", "advanced", "/index", source)
if err != nil {
t.Fatal(err)
}
@ -665,6 +640,7 @@ func TestEditorPageSource(t *testing.T) {
if err != nil {
t.Fatal(err)
}
assert.IsType(t, core.SourceData{}, res)
assert.NotEmpty(t, res.(core.SourceData).Source)
assert.NotEmpty(t, res.(core.SourceData).Language)
@ -672,11 +648,11 @@ func TestEditorPageSource(t *testing.T) {
}
func TestEditorRenderWithQuery(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.editor.render", "demo", "tech-blue", "/index", map[string]interface{}{
p, err := process.Of("sui.editor.render", "test", "advanced", "/index", map[string]interface{}{
"method": "POST",
})
if err != nil {
@ -693,11 +669,11 @@ func TestEditorRenderWithQuery(t *testing.T) {
}
func TestPreviewRender(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.preview.render", "demo", "tech-blue", "/index")
p, err := process.Of("sui.preview.render", "test", "advanced", "/index")
if err != nil {
t.Fatal(err)
}
@ -712,11 +688,11 @@ func TestPreviewRender(t *testing.T) {
}
func TestBuildAll(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.build.all", "demo", "tech-blue", map[string]interface{}{"ssr": true})
p, err := process.Of("sui.build.all", "test", "advanced", map[string]interface{}{"ssr": true})
if err != nil {
t.Fatal(err)
}
@ -730,11 +706,11 @@ func TestBuildAll(t *testing.T) {
}
func TestBuildPage(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.build.page", "demo", "tech-blue", "/index", map[string]interface{}{"ssr": true})
p, err := process.Of("sui.build.page", "test", "advanced", "/index", map[string]interface{}{"ssr": true})
if err != nil {
t.Fatal(err)
}
@ -748,11 +724,11 @@ func TestBuildPage(t *testing.T) {
}
func TestSyncAssetFile(t *testing.T) {
load(t)
prepare(t)
defer clean()
// test demo
p, err := process.Of("sui.sync.assetfile", "demo", "tech-blue", "/images/about/ab01.jpg", map[string]interface{}{"ssr": true})
p, err := process.Of("sui.sync.assetfile", "test", "advanced", "/images/logos/wordmark.svg", map[string]interface{}{"ssr": true})
if err != nil {
t.Fatal(err)
}
@ -764,11 +740,3 @@ func TestSyncAssetFile(t *testing.T) {
assert.Nil(t, res)
}
func load(t *testing.T) {
prepare(t)
err := Load(config.Conf)
if err != nil {
t.Fatal(err)
}
}

View file

@ -12,12 +12,6 @@ import (
func TestLoad(t *testing.T) {
prepare(t)
defer clean()
err := Load(config.Conf)
if err != nil {
t.Fatal(err)
}
check(t)
}
@ -26,20 +20,14 @@ func check(t *testing.T) {
for id := range core.SUIs {
ids[id] = true
}
assert.False(t, ids["azure"])
assert.True(t, ids["demo"])
assert.True(t, ids["screen"])
assert.False(t, ids["not-exist"])
assert.True(t, ids["test"])
assert.True(t, ids["web"])
}
func prepare(t *testing.T) {
test.Prepare(t, config.Conf, "YAO_TEST_BUILDER_APPLICATION")
}
func loadTestSui(t *testing.T) {
prepare(t)
defer clean()
_, err := loadFile("suis/demo.sui.yao", "demo")
test.Prepare(t, config.Conf, "YAO_SUI_TEST_APPLICATION")
err := Load(config.Conf)
if err != nil {
t.Fatal(err)
}

View file

@ -5,15 +5,13 @@ import (
"github.com/stretchr/testify/assert"
"github.com/yaoapp/kun/any"
"github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/test"
)
func TestPageExec(t *testing.T) {
prepare(t)
defer clean()
page := testPage(t)
page := testDataPage(t)
request := &Request{
URL: ReqeustURL{Path: "/test/path"},
Query: map[string][]string{"show": {"yes"}},
@ -33,131 +31,3 @@ func TestPageExec(t *testing.T) {
assert.Equal(t, "Article Search", res.Get("articles.data[0].description"))
assert.Equal(t, "/test/path", res.Get("url.path"))
}
func prepare(t *testing.T) {
test.Prepare(t, config.Conf, "YAO_TEST_BUILDER_APPLICATION")
}
func clean() {
test.Clean()
}
func testPage(t *testing.T) *Page {
page := &Page{
Name: "test",
Route: "test",
Document: []byte(`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<link rel="stylesheet" href="/assets/css/tailwind.css" />
<link rel="stylesheet" href="/assets/css/app.css" />
</head>
<body>
<div id="app">
{{ __page }}
</div>
</body>
</html>
`),
Codes: SourceCodes{
HTML: Source{
File: "test.html",
Code: `<div class="p-10">
<div>For</div>
<div s:for="articles.data" s:for-item="article" s:for-index="idx">
<div>{{ idx }} {{ article.title }}</div>
<div>{{ article.desc }}</div>
<div>{{ article.type == "article" ? "article" : "others"}}</div>
<div class="mt-10">IF</div>
<div class="p-5">
<div s:if="article.type == 'article'">article</div>
<div s:elif="article.type == 'image'">image</div>
<div s:else>others</div>
</div>
<div class="mt-10">Nested</div>
<div
s:for="article.images"
s:for-item="image"
s:for-index="imgIndex"
class="p-5"
>
<div s:if="imgIndex == 1 || imgIndex == 2" class="p-5">
{{ imgIndex }} {{ image }}
</div>
</div>
</div>
</div>
<div class="mt-10">IF</div>
<div s:if="len(articles) > 0" :name="input.data">
<div>{{ len(articles) > 0 }} articles.length &gt; 0</div>
</div>
<div s:if="length > 0" :name="input.data">
<div>{{ length > 0 }} len &gt; 0</div>
</div>
<div s:if="P_('scripts.article.Space', 'hello') == 'hello space'" >
hello space {{ P_('scripts.article.Space', 'hello') }}
</div>
<div s:if="showImage == 'yes'">showImage</div>
<div s:elif="showImage == 'no'">noImage</div>
<div s:elif="showImage == 'auto'">autoImage</div>
<div s:else>otherImage</div>
<div class="mt-10">Bind</div>
<div>
<div class="w-200">{{ input.data }}</div>
<div class="mt-5">
<input type="text" s:bind="input.data" placeholder="Bind Input Data"
class="w-200 p-2 bg-purple-900 text-white" />
</div>
<div class="mt-5">
<input type="button" value="Change" s:click="changeInput"
class="text-blue-600 p-2" />
</div>
</div>
<div class="mt-10">Import Page</div>
<page is="/footer">
<slot is="link"> Link </slot>
<slot is="item"> Item </slot>
</page>
<page is="/footer" no-style>
<slot is="link"> Link2 </slot>
<slot is="item"> Item2 </slot>
</page>
</div>`,
},
DATA: Source{
File: "test.json",
Code: `{
"$articles": "scripts.article.Search",
"$showImage": {
"process": "scripts.article.ShowImage",
"args": ["$query.show"]
},
"length": 20,
"array": [
"item-1",
"$scripts.article.Setting",
{"$images": "scripts.article.Images"},
{"process": "scripts.article.Thumbs", "args": ["$query.show"], "__exec": true }
],
"input": { "data": "hello world" },
"url": {"path":"$url.path"}
}
`,
},
},
}
return page
}

View file

@ -1,20 +1,20 @@
package core
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/kun/utils"
)
func TestRender(t *testing.T) {
prepare(t)
defer clean()
page := testPage(t)
page := testDataPage(t)
request := &Request{
Query: map[string][]string{"show": {"no"}},
Locale: "zh-CN",
Locale: "zh-cn",
Theme: "dark",
}
@ -30,7 +30,9 @@ func TestRender(t *testing.T) {
t.Fatalf("Render error: %v", err)
}
utils.Dump(html)
for i, err := range parser.errors {
fmt.Println(i, err)
}
assert.NotEmpty(t, html)
assert.Contains(t, html, "hello space")

48
sui/core/sui_test.go Normal file
View file

@ -0,0 +1,48 @@
package core
import (
"path/filepath"
"testing"
"github.com/yaoapp/gou/application"
"github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/test"
)
func testDataPage(t *testing.T) *Page {
root := "/data/test-cases/basic"
path := filepath.Join(root, "data")
document, err := application.App.Read(root + "/__document.html")
if err != nil {
t.Fatalf("Read error: %v", err)
}
html, err := application.App.Read(path + "/data.html")
if err != nil {
t.Fatalf("Read error: %v", err)
}
data, err := application.App.Read(path + "/data.json")
if err != nil {
t.Fatalf("Read error: %v", err)
}
return &Page{
Name: "data",
Route: "data",
Document: document,
Codes: SourceCodes{
HTML: Source{File: "data.html", Code: string(html)},
DATA: Source{File: "data.json", Code: string(data)},
},
}
}
func prepare(t *testing.T) {
test.Prepare(t, config.Conf, "YAO_SUI_TEST_APPLICATION")
}
func clean() {
test.Clean()
}

View file

@ -1,129 +1,123 @@
package local
import (
"testing"
// func TestTemplateBlocks(t *testing.T) {
// tests := prepare(t)
// defer clean()
"github.com/stretchr/testify/assert"
)
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestTemplateBlocks(t *testing.T) {
tests := prepare(t)
defer clean()
// blocks, err := tmpl.Blocks()
// if err != nil {
// t.Fatalf("Blocks error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
// if len(blocks) < 3 {
// t.Fatalf("Blocks error: %v", len(blocks))
// }
blocks, err := tmpl.Blocks()
if err != nil {
t.Fatalf("Blocks error: %v", err)
}
// assert.Equal(t, "ColumnsTwo", blocks[0].(*Block).ID)
// assert.Equal(t, "/ColumnsTwo/ColumnsTwo.html", blocks[0].(*Block).Codes.HTML.File)
// assert.Equal(t, "/ColumnsTwo/ColumnsTwo.js", blocks[0].(*Block).Codes.JS.File)
// assert.Equal(t, "/ColumnsTwo/ColumnsTwo.ts", blocks[0].(*Block).Codes.TS.File)
if len(blocks) < 3 {
t.Fatalf("Blocks error: %v", len(blocks))
}
// assert.Equal(t, "Hero", blocks[1].(*Block).ID)
// assert.Equal(t, "/Hero/Hero.html", blocks[1].(*Block).Codes.HTML.File)
// assert.Equal(t, "/Hero/Hero.js", blocks[1].(*Block).Codes.JS.File)
// assert.Equal(t, "/Hero/Hero.ts", blocks[1].(*Block).Codes.TS.File)
assert.Equal(t, "ColumnsTwo", blocks[0].(*Block).ID)
assert.Equal(t, "/ColumnsTwo/ColumnsTwo.html", blocks[0].(*Block).Codes.HTML.File)
assert.Equal(t, "/ColumnsTwo/ColumnsTwo.js", blocks[0].(*Block).Codes.JS.File)
assert.Equal(t, "/ColumnsTwo/ColumnsTwo.ts", blocks[0].(*Block).Codes.TS.File)
// assert.Equal(t, "Image", blocks[2].(*Block).ID)
// assert.Equal(t, "/Image/Image.html", blocks[2].(*Block).Codes.HTML.File)
// assert.Equal(t, "/Image/Image.js", blocks[2].(*Block).Codes.JS.File)
// assert.Equal(t, "/Image/Image.ts", blocks[2].(*Block).Codes.TS.File)
// }
assert.Equal(t, "Hero", blocks[1].(*Block).ID)
assert.Equal(t, "/Hero/Hero.html", blocks[1].(*Block).Codes.HTML.File)
assert.Equal(t, "/Hero/Hero.js", blocks[1].(*Block).Codes.JS.File)
assert.Equal(t, "/Hero/Hero.ts", blocks[1].(*Block).Codes.TS.File)
// func TestTemplateBlockJS(t *testing.T) {
// tests := prepare(t)
// defer clean()
assert.Equal(t, "Image", blocks[2].(*Block).ID)
assert.Equal(t, "/Image/Image.html", blocks[2].(*Block).Codes.HTML.File)
assert.Equal(t, "/Image/Image.js", blocks[2].(*Block).Codes.JS.File)
assert.Equal(t, "/Image/Image.ts", blocks[2].(*Block).Codes.TS.File)
}
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestTemplateBlockJS(t *testing.T) {
tests := prepare(t)
defer clean()
// block, err := tmpl.Block("ColumnsTwo")
// if err != nil {
// t.Fatalf("Blocks error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
// assert.Equal(t, "ColumnsTwo", block.(*Block).ID)
// assert.NotEmpty(t, block.(*Block).Codes.HTML.Code)
// assert.NotEmpty(t, block.(*Block).Codes.JS.Code)
// assert.Contains(t, block.(*Block).Compiled, "window.block__ColumnsTwo")
// assert.Contains(t, block.(*Block).Compiled, `<div class="columns-two-left"`)
// }
block, err := tmpl.Block("ColumnsTwo")
if err != nil {
t.Fatalf("Blocks error: %v", err)
}
// func TestTemplateBlockTS(t *testing.T) {
// tests := prepare(t)
// defer clean()
assert.Equal(t, "ColumnsTwo", block.(*Block).ID)
assert.NotEmpty(t, block.(*Block).Codes.HTML.Code)
assert.NotEmpty(t, block.(*Block).Codes.JS.Code)
assert.Contains(t, block.(*Block).Compiled, "window.block__ColumnsTwo")
assert.Contains(t, block.(*Block).Compiled, `<div class="columns-two-left"`)
}
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestTemplateBlockTS(t *testing.T) {
tests := prepare(t)
defer clean()
// block, err := tmpl.Block("Hero")
// if err != nil {
// t.Fatalf("Blocks error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
// assert.Equal(t, "Hero", block.(*Block).ID)
// assert.Empty(t, block.(*Block).Codes.HTML.Code)
// assert.NotEmpty(t, block.(*Block).Codes.TS.Code)
// assert.Contains(t, block.(*Block).Compiled, "window.block__Hero")
// assert.Contains(t, block.(*Block).Compiled, `<div data-gjs-type='Nav'></div>`)
// }
block, err := tmpl.Block("Hero")
if err != nil {
t.Fatalf("Blocks error: %v", err)
}
// func TestBlockLayoutItems(t *testing.T) {
// tests := prepare(t)
// defer clean()
assert.Equal(t, "Hero", block.(*Block).ID)
assert.Empty(t, block.(*Block).Codes.HTML.Code)
assert.NotEmpty(t, block.(*Block).Codes.TS.Code)
assert.Contains(t, block.(*Block).Compiled, "window.block__Hero")
assert.Contains(t, block.(*Block).Compiled, `<div data-gjs-type='Nav'></div>`)
}
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestBlockLayoutItems(t *testing.T) {
tests := prepare(t)
defer clean()
// items, err := tmpl.BlockLayoutItems()
// if err != nil {
// t.Fatalf("BlockLayoutItems error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
// assert.Equal(t, 3, len(items.Categories))
items, err := tmpl.BlockLayoutItems()
if err != nil {
t.Fatalf("BlockLayoutItems error: %v", err)
}
// tmpl, err = tests.Demo.GetTemplate("website-ai")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
assert.Equal(t, 3, len(items.Categories))
// items, err = tmpl.BlockLayoutItems()
// if err != nil {
// t.Fatalf("BlockLayoutItems error: %v", err)
// }
tmpl, err = tests.Demo.GetTemplate("website-ai")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
// assert.Equal(t, 1, len(items.Categories))
// }
items, err = tmpl.BlockLayoutItems()
if err != nil {
t.Fatalf("BlockLayoutItems error: %v", err)
}
// func TestBlockMedia(t *testing.T) {
// tests := prepare(t)
// defer clean()
assert.Equal(t, 1, len(items.Categories))
}
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestBlockMedia(t *testing.T) {
tests := prepare(t)
defer clean()
// media, err := tmpl.BlockMedia("ColumnsTwo")
// if err != nil {
// t.Fatalf("BlockMedia error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
media, err := tmpl.BlockMedia("ColumnsTwo")
if err != nil {
t.Fatalf("BlockMedia error: %v", err)
}
assert.Equal(t, "image/png", media.Type)
}
// assert.Equal(t, "image/png", media.Type)
// }

View file

@ -10,7 +10,7 @@ func TestTemplateBuild(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}

View file

@ -1,83 +1,77 @@
package local
import (
"testing"
// func TestTemplateComponents(t *testing.T) {
// tests := prepare(t)
// defer clean()
"github.com/stretchr/testify/assert"
)
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestTemplateComponents(t *testing.T) {
tests := prepare(t)
defer clean()
// components, err := tmpl.Components()
// if err != nil {
// t.Fatalf("Components error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
// if len(components) < 2 {
// t.Fatalf("Components error: %v", len(components))
// }
// assert.Equal(t, "Box", components[0].(*Component).ID)
// assert.Equal(t, "/Box/Box.html", components[0].(*Component).Codes.HTML.File)
// assert.Equal(t, "/Box/Box.js", components[0].(*Component).Codes.JS.File)
// assert.Equal(t, "/Box/Box.ts", components[0].(*Component).Codes.TS.File)
components, err := tmpl.Components()
if err != nil {
t.Fatalf("Components error: %v", err)
}
// assert.Equal(t, "Card", components[1].(*Component).ID)
// assert.Equal(t, "/Card/Card.html", components[1].(*Component).Codes.HTML.File)
// assert.Equal(t, "/Card/Card.js", components[1].(*Component).Codes.JS.File)
// assert.Equal(t, "/Card/Card.ts", components[1].(*Component).Codes.TS.File)
if len(components) < 2 {
t.Fatalf("Components error: %v", len(components))
}
assert.Equal(t, "Box", components[0].(*Component).ID)
assert.Equal(t, "/Box/Box.html", components[0].(*Component).Codes.HTML.File)
assert.Equal(t, "/Box/Box.js", components[0].(*Component).Codes.JS.File)
assert.Equal(t, "/Box/Box.ts", components[0].(*Component).Codes.TS.File)
// assert.Equal(t, "Nav", components[2].(*Component).ID)
// assert.Equal(t, "/Nav/Nav.html", components[2].(*Component).Codes.HTML.File)
// assert.Equal(t, "/Nav/Nav.js", components[2].(*Component).Codes.JS.File)
// assert.Equal(t, "/Nav/Nav.ts", components[2].(*Component).Codes.TS.File)
assert.Equal(t, "Card", components[1].(*Component).ID)
assert.Equal(t, "/Card/Card.html", components[1].(*Component).Codes.HTML.File)
assert.Equal(t, "/Card/Card.js", components[1].(*Component).Codes.JS.File)
assert.Equal(t, "/Card/Card.ts", components[1].(*Component).Codes.TS.File)
// }
assert.Equal(t, "Nav", components[2].(*Component).ID)
assert.Equal(t, "/Nav/Nav.html", components[2].(*Component).Codes.HTML.File)
assert.Equal(t, "/Nav/Nav.js", components[2].(*Component).Codes.JS.File)
assert.Equal(t, "/Nav/Nav.ts", components[2].(*Component).Codes.TS.File)
// func TestTemplateComponentJS(t *testing.T) {
// tests := prepare(t)
// defer clean()
}
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestTemplateComponentJS(t *testing.T) {
tests := prepare(t)
defer clean()
// component, err := tmpl.Component("Card")
// if err != nil {
// t.Fatalf("Components error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
// assert.Equal(t, "Card", component.(*Component).ID)
// assert.NotEmpty(t, component.(*Component).Codes.HTML.Code)
// assert.NotEmpty(t, component.(*Component).Codes.JS.Code)
// assert.Contains(t, component.(*Component).Compiled, "window.component__Card")
// assert.Contains(t, component.(*Component).Compiled, `<h1>Card</h1>`)
// }
component, err := tmpl.Component("Card")
if err != nil {
t.Fatalf("Components error: %v", err)
}
// func TestTemplateComponentTS(t *testing.T) {
// tests := prepare(t)
// defer clean()
assert.Equal(t, "Card", component.(*Component).ID)
assert.NotEmpty(t, component.(*Component).Codes.HTML.Code)
assert.NotEmpty(t, component.(*Component).Codes.JS.Code)
assert.Contains(t, component.(*Component).Compiled, "window.component__Card")
assert.Contains(t, component.(*Component).Compiled, `<h1>Card</h1>`)
}
// tmpl, err := tests.Demo.GetTemplate("tech-blue")
// if err != nil {
// t.Fatalf("GetTemplate error: %v", err)
// }
func TestTemplateComponentTS(t *testing.T) {
tests := prepare(t)
defer clean()
// component, err := tmpl.Component("Box")
// if err != nil {
// t.Fatalf("Components error: %v", err)
// }
tmpl, err := tests.Demo.GetTemplate("tech-blue")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
component, err := tmpl.Component("Box")
if err != nil {
t.Fatalf("Components error: %v", err)
}
assert.Equal(t, "Box", component.(*Component).ID)
assert.NotEmpty(t, component.(*Component).Codes.HTML.Code)
assert.NotEmpty(t, component.(*Component).Codes.TS.Code)
assert.Contains(t, component.(*Component).Compiled, "window.component__Box")
assert.Contains(t, component.(*Component).Compiled, `<div>Box</div>`)
}
// assert.Equal(t, "Box", component.(*Component).ID)
// assert.NotEmpty(t, component.(*Component).Codes.HTML.Code)
// assert.NotEmpty(t, component.(*Component).Codes.TS.Code)
// assert.Contains(t, component.(*Component).Compiled, "window.component__Box")
// assert.Contains(t, component.(*Component).Compiled, `<div>Box</div>`)
// }

View file

@ -123,7 +123,7 @@ func (local *Local) getTemplate(id string, path string) (*Template, error) {
}}
// load the template.json
configFile := filepath.Join(path, fmt.Sprintf("%s.json", id))
configFile := filepath.Join(path, "template.json")
if local.fs.IsFile(configFile) {
configBytes, err := local.fs.ReadFile(configFile)
if err != nil {

View file

@ -9,86 +9,108 @@ import (
"github.com/yaoapp/yao/test"
)
type TestCase struct {
Test *Local
Web *Local
}
func TestGetTemplates(t *testing.T) {
tests := prepare(t)
defer clean()
dempTmpls, err := tests.Demo.GetTemplates()
testTmpls, err := tests.Test.GetTemplates()
if err != nil {
t.Fatalf("GetTemplates error: %v", err)
}
if len(dempTmpls) < 3 {
t.Fatalf("The demo templates less than 3 (%v<3)", len(dempTmpls))
if len(testTmpls) != 2 {
t.Fatalf("The test templates not equal 2 (%v!=2)", len(testTmpls))
}
assert.Equal(t, "tech-blue", dempTmpls[0].(*Template).ID)
assert.Equal(t, "Tech Blue DEMO", dempTmpls[0].(*Template).Name)
assert.Equal(t, true, len(dempTmpls[1].(*Template).Screenshots) > 0)
assert.Equal(t, 1, dempTmpls[0].(*Template).Version)
assert.Equal(t, "Tech Blue DEMO", dempTmpls[0].(*Template).Descrption)
// Advanced Template
assert.Equal(t, "advanced", testTmpls[0].(*Template).ID)
assert.Equal(t, "The advanced template", testTmpls[0].(*Template).Name)
assert.Len(t, testTmpls[0].Themes(), 2)
assert.Len(t, testTmpls[0].Locales(), 3)
assert.Len(t, testTmpls[0].(*Template).Template.Themes, 2)
assert.Len(t, testTmpls[0].(*Template).Template.Locales, 4)
assert.Equal(t, "website-ai", dempTmpls[1].(*Template).ID)
assert.Equal(t, "Website DEMO", dempTmpls[1].(*Template).Name)
assert.Equal(t, true, len(dempTmpls[1].(*Template).Screenshots) > 0)
assert.Equal(t, 2, dempTmpls[1].(*Template).Version)
assert.Equal(t, "AI Website DEMO", dempTmpls[1].(*Template).Descrption)
// Basic Template
assert.Equal(t, "basic", testTmpls[1].(*Template).ID)
assert.Equal(t, "The basic template", testTmpls[1].(*Template).Name)
assert.Len(t, testTmpls[1].Themes(), 0)
assert.Len(t, testTmpls[1].Locales(), 0)
assert.Len(t, testTmpls[1].(*Template).Template.Themes, 0)
assert.Len(t, testTmpls[1].(*Template).Template.Locales, 0)
assert.Equal(t, "wechat-web", dempTmpls[2].(*Template).ID)
assert.Equal(t, "WECHAT-WEB", dempTmpls[2].(*Template).Name)
assert.Equal(t, []string{}, dempTmpls[2].(*Template).Screenshots)
assert.Equal(t, 1, dempTmpls[2].(*Template).Version)
assert.Equal(t, "", dempTmpls[2].(*Template).Descrption)
// Default Template ( Application )
webTmpls, err := tests.Web.GetTemplates()
if err != nil {
t.Fatalf("GetTemplates error: %v", err)
}
if len(webTmpls) != 1 {
t.Fatalf("The web templates not equal 1 (%v!=1)", len(webTmpls))
}
// Default Template
assert.Equal(t, "default", webTmpls[0].(*Template).ID)
assert.Equal(t, "Yao Startup Webapp", webTmpls[0].(*Template).Name)
assert.Len(t, webTmpls[0].Themes(), 2)
assert.Len(t, webTmpls[0].Locales(), 3)
assert.Len(t, webTmpls[0].(*Template).Template.Themes, 2)
assert.Len(t, webTmpls[0].(*Template).Template.Locales, 2)
}
func TestGetTemplate(t *testing.T) {
tests := prepare(t)
defer clean()
websiteAI, err := tests.Demo.GetTemplate("website-ai")
basicTmpl, err := tests.Test.GetTemplate("basic")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
assert.Equal(t, "website-ai", websiteAI.(*Template).ID)
assert.Equal(t, "Website DEMO", websiteAI.(*Template).Name)
assert.Equal(t, true, len(websiteAI.(*Template).Screenshots) > 0)
assert.Equal(t, 2, websiteAI.(*Template).Version)
assert.Equal(t, "AI Website DEMO", websiteAI.(*Template).Descrption)
assert.Equal(t, "basic", basicTmpl.(*Template).ID)
advancedTmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
assert.Equal(t, "advanced", advancedTmpl.(*Template).ID)
defaultTmpl, err := tests.Web.GetTemplate("default")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
assert.Equal(t, "default", defaultTmpl.(*Template).ID)
}
func prepare(t *testing.T) struct {
Demo *Local
Screen *Local
} {
func prepare(t *testing.T) TestCase {
test.Prepare(t, config.Conf, "YAO_TEST_BUILDER_APPLICATION")
demoDSL, err := core.Load("/suis/demo.sui.yao", "demo")
test.Prepare(t, config.Conf, "YAO_SUI_TEST_APPLICATION")
webDSL, err := core.Load("/suis/web.sui.yao", "web")
if err != nil {
t.Fatalf("Load error: %v", err)
}
demo, err := New(demoDSL)
web, err := New(webDSL)
if err != nil {
t.Fatalf("New error: %v", err)
}
screenDSL, err := core.Load("/suis/screen.sui.yao", "screen")
testDSL, err := core.Load("/suis/test.sui.yao", "test")
if err != nil {
t.Fatalf("Load error: %v", err)
}
screen, err := New(screenDSL)
test, err := New(testDSL)
if err != nil {
t.Fatalf("New error: %v", err)
}
return struct {
Demo *Local
Screen *Local
}{
Demo: demo,
Screen: screen,
return TestCase{
Test: test,
Web: web,
}
}

View file

@ -11,7 +11,7 @@ func TestPageEditorRender(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -30,17 +30,9 @@ func TestPageEditorRender(t *testing.T) {
assert.NotEmpty(t, res.CSS)
assert.NotEmpty(t, res.Scripts)
assert.NotEmpty(t, res.Styles)
assert.Equal(t, 3, len(res.Scripts))
assert.Equal(t, 4, len(res.Styles))
assert.GreaterOrEqual(t, len(res.Styles), 1)
assert.GreaterOrEqual(t, len(res.Scripts), 2)
assert.Equal(t, "@assets/libs/tiny-slider/min/tiny-slider.js", res.Scripts[0])
assert.Equal(t, "@assets/libs/feather-icons/feather.min.js", res.Scripts[1])
assert.Equal(t, "@assets/js/plugins.init.js", res.Scripts[2])
assert.Equal(t, "@assets/libs/tiny-slider/tiny-slider.css", res.Styles[0])
assert.Equal(t, "@assets/libs/@iconscout/unicons/css/line.css", res.Styles[1])
assert.Equal(t, "@assets/libs/@mdi/font/css/materialdesignicons.min.css", res.Styles[2])
assert.Equal(t, "@assets/css/tailwind.css", res.Styles[3])
}
func TestPagePreviewRender(t *testing.T) {
@ -48,7 +40,7 @@ func TestPagePreviewRender(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -64,7 +56,6 @@ func TestPagePreviewRender(t *testing.T) {
}
assert.NotEmpty(t, html)
assert.Contains(t, html, "function Hello()")
// assert.Contains(t, html, "color: #2c3e50;")
assert.Contains(t, html, "/api/__yao/sui/v1/demo/asset/tech-blue/@assets")
assert.Contains(t, html, "var __sui_data")
assert.Contains(t, html, "/api/__yao/sui/v1/test/asset/advanced/@assets")
}

View file

@ -13,7 +13,7 @@ func TestTemplatePages(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -23,7 +23,7 @@ func TestTemplatePages(t *testing.T) {
t.Fatalf("Pages error: %v", err)
}
if len(pages) < 8 {
if len(pages) < 1 {
t.Fatalf("Pages error: %v", len(pages))
}
@ -50,32 +50,30 @@ func TestTemplatePageTree(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
pages, err := tmpl.PageTree("/page/[id]")
pages, err := tmpl.PageTree("/")
if err != nil {
t.Fatalf("Pages error: %v", err)
}
assert.Equal(t, 6, len(pages))
assert.Equal(t, "error", pages[0].Name)
assert.Equal(t, true, pages[0].IsDir)
assert.Equal(t, "error", pages[0].Children[0].Name)
assert.Equal(t, "/error", pages[0].Children[0].IPage.(*Page).Route)
assert.Equal(t, "error", pages[0].Children[0].IPage.(*Page).Name)
if len(pages) < 2 {
t.Fatalf("Pages error: %v", len(pages))
}
assert.Equal(t, "index", pages[2].Name)
assert.Equal(t, true, pages[1].IsDir)
assert.Equal(t, "[invite]", pages[2].Children[0].Name)
assert.Equal(t, true, pages[2].Children[0].IsDir)
assert.Equal(t, "/index/[invite]", pages[2].Children[0].Children[0].IPage.(*Page).Route)
assert.Equal(t, "[invite]", pages[2].Children[0].Children[0].IPage.(*Page).Name)
assert.Equal(t, "/index", pages[2].Children[1].IPage.(*Page).Route)
assert.Equal(t, "index", pages[2].Children[1].IPage.(*Page).Name)
assert.NotEmpty(t, pages)
assert.NotEmpty(t, pages[1].Children)
if len(pages[1].Children) < 2 {
t.Fatalf("Pages error: %v", len(pages[1].Children))
}
assert.NotEmpty(t, pages[1].Children[0].Children)
if len(pages[1].Children[0].Children) < 2 {
t.Fatalf("Pages error: %v", len(pages[1].Children[0].Children))
}
}
func TestTemplatePageTS(t *testing.T) {
@ -83,7 +81,7 @@ func TestTemplatePageTS(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -96,7 +94,7 @@ func TestTemplatePageTS(t *testing.T) {
page := ipage.(*Page)
assert.Equal(t, "/page/[id]", page.Route)
assert.Equal(t, "/templates/tech-blue/page/[id]", page.Path)
assert.Equal(t, "/test-cases/advanced/page/[id]", page.Path)
assert.Equal(t, "[id].css", page.Codes.CSS.File)
assert.Equal(t, "[id].html", page.Codes.HTML.File)
assert.Equal(t, "[id].js", page.Codes.JS.File)
@ -119,19 +117,19 @@ func TestTemplatePageJS(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
ipage, err := tmpl.Page("/page/404")
ipage, err := tmpl.Page("/page/[id]/404")
if err != nil {
t.Fatalf("Page error: %v", err)
}
page := ipage.(*Page)
assert.Equal(t, "/page/404", page.Route)
assert.Equal(t, "/templates/tech-blue/page/404", page.Path)
assert.Equal(t, "/page/[id]/404", page.Route)
assert.Equal(t, "/test-cases/advanced/page/[id]/404", page.Path)
assert.Equal(t, "404.css", page.Codes.CSS.File)
assert.Equal(t, "404.html", page.Codes.HTML.File)
assert.Equal(t, "404.js", page.Codes.JS.File)
@ -154,7 +152,7 @@ func TestPageSaveTempBoard(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -194,7 +192,7 @@ func TestPageSaveTempPage(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -237,7 +235,7 @@ func TestPageSaveTempStyle(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -280,7 +278,7 @@ func TestPageSaveTempScriptJS(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -323,7 +321,7 @@ func TestPageSaveTempScriptTS(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -366,7 +364,7 @@ func TestPageSaveTempData(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -409,7 +407,7 @@ func TestPageSaveTempSetting(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -447,7 +445,7 @@ func TestPageSave(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -495,7 +493,7 @@ func TestPageGetPageFromAsset(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -507,7 +505,7 @@ func TestPageGetPageFromAsset(t *testing.T) {
}
assert.Equal(t, "/index", page.Get().Route)
assert.Equal(t, "/templates/tech-blue/index", page.Get().Path)
assert.Equal(t, "/test-cases/advanced/index", page.Get().Path)
assert.Equal(t, "index", page.Get().Name)
file = "/page/404/404.js"
@ -517,7 +515,7 @@ func TestPageGetPageFromAsset(t *testing.T) {
}
assert.Equal(t, "/page/404", page.Get().Route)
assert.Equal(t, "/templates/tech-blue/page/404", page.Get().Path)
assert.Equal(t, "/test-cases/advanced/page/404", page.Get().Path)
assert.Equal(t, "404", page.Get().Name)
}
@ -525,12 +523,12 @@ func TestPageAssetScriptJS(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
file := "/page/404/404.js"
file := "/page/[id]/404/404.js"
page, err := tmpl.GetPageFromAsset(file)
if err != nil {
t.Fatalf("GetPageFromAsset error: %v", err)
@ -549,7 +547,7 @@ func TestPageAssetScriptTS(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -573,7 +571,7 @@ func TestPageAssetStyle(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}

View file

@ -298,8 +298,8 @@ func (tmpl *Template) Asset(file string, width, height uint) (*core.Asset, error
file = filepath.Join(tmpl.Root, "__assets", file)
if exist, _ := tmpl.local.fs.Exists(file); exist {
if width > 0 || height > 0 {
ext := strings.ToLower(filepath.Ext(file))
if (width > 0 || height > 0) && (ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".gif" || ext == ".bmp") {
return tmpl.assetThumb(file, width, height)
}
@ -309,7 +309,7 @@ func (tmpl *Template) Asset(file string, width, height uint) (*core.Asset, error
}
typ := "text/plain"
switch filepath.Ext(file) {
switch ext {
case ".css":
typ = "text/css; charset=utf-8"
break

View file

@ -4,33 +4,34 @@ import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/gou/application"
)
func TestTemplateThemes(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
themes := tmpl.Themes()
if len(themes) < 2 {
if len(themes) != 2 {
t.Fatalf("Themes error: %v", len(themes))
}
assert.Equal(t, "dark", themes[0].Value)
assert.Equal(t, "暗色主题", themes[0].Label)
assert.Equal(t, "light", themes[1].Value)
assert.Equal(t, "明亮主题", themes[1].Label)
assert.Equal(t, "light", themes[0].Value)
assert.Equal(t, "Light", themes[0].Label)
assert.Equal(t, "dark", themes[1].Value)
assert.Equal(t, "Dark", themes[1].Label)
}
func TestTemplateLocales(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
@ -40,31 +41,60 @@ func TestTemplateLocales(t *testing.T) {
t.Fatalf("Locales error: %v", len(locales))
}
assert.Equal(t, "ar", locales[0].Label)
assert.Equal(t, "ar", locales[0].Value)
assert.Equal(t, "ja-JP", locales[0].Label)
assert.Equal(t, "ja-jp", locales[0].Value)
assert.Equal(t, "zh-CN", locales[1].Label)
assert.Equal(t, "zh-cn", locales[1].Value)
assert.Equal(t, "zh-TW", locales[2].Label)
assert.Equal(t, "zh-tw", locales[2].Value)
assert.Equal(t, "zh-HK", locales[2].Label)
assert.Equal(t, "zh-hk", locales[2].Value)
}
func TestTemplateAsset(t *testing.T) {
tests := prepare(t)
defer clean()
tmpl, err := tests.Demo.GetTemplate("tech-blue")
tmpl, err := tests.Test.GetTemplate("advanced")
if err != nil {
t.Fatalf("GetTemplate error: %v", err)
}
asset, err := tmpl.Asset("/css/tailwind.css", 0, 0)
// JavaScript
asset, err := tmpl.Asset("/js/yao.js", 0, 0)
if err != nil {
t.Fatalf("Asset error: %v", err)
}
assert.Equal(t, "application/javascript; charset=utf-8", asset.Type)
assert.NotEmpty(t, asset.Content)
// CSS
asset, err = tmpl.Asset("/css/app.css", 0, 0)
if err != nil {
t.Fatalf("Asset error: %v", err)
}
assert.Equal(t, "text/css; charset=utf-8", asset.Type)
assert.NotEmpty(t, asset.Content)
// IMAGE
asset, err = tmpl.Asset("/images/icons/app.png", 100, 100)
if err != nil {
t.Fatalf("Asset error: %v", err)
}
assert.Equal(t, "image/png", asset.Type)
assert.NotEmpty(t, asset.Content)
exists, err := application.App.Exists("/data/test-cases/advanced/__assets/.cache/100x100/test-cases/advanced/__assets/images/icons/app.png")
if err != nil {
t.Fatalf("Asset error: %v", err)
}
assert.True(t, exists)
// IMAGE SVG
asset, err = tmpl.Asset("/images/logos/logo_color.svg", 100, 100)
if err != nil {
t.Fatalf("Asset error: %v", err)
}
assert.Equal(t, "image/svg+xml", asset.Type)
}