Enable Binding-scoped agent push/pull, empty-table schema ensure, SyncPage inspect/drop-table, default module import, and agent-bound publish docs from the 宇恒联调意见. Co-authored-by: Cursor <cursoragent@cursor.com>
78 lines
2.1 KiB
Go
78 lines
2.1 KiB
Go
package blueprint_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"aijianzhan/platform/internal/blueprint"
|
|
)
|
|
|
|
func TestEnsureDefaultImportExport(t *testing.T) {
|
|
bp := &blueprint.Blueprint{
|
|
Apis: blueprint.Apis{
|
|
Resources: []blueprint.APIResource{
|
|
{Entity: "a", Path: "/a", Operations: []string{"list", "get", "create", "update", "delete"}},
|
|
{Entity: "ro", Path: "/ro", Operations: []string{"list", "get"}},
|
|
{Entity: "b", Path: "/b", Operations: []string{"list", "create", "import"}},
|
|
},
|
|
},
|
|
Pages: []blueprint.Page{
|
|
{ID: "p1", Type: "list", Entity: "a", Layout: &blueprint.PageLayout{Actions: []string{"create", "edit", "delete", "refresh"}}},
|
|
{ID: "p2", Type: "form", Entity: "a"},
|
|
},
|
|
}
|
|
bp.EnsureDefaultImportExport()
|
|
|
|
ops0 := bp.Apis.Resources[0].Operations
|
|
if !contains(ops0, "import") || !contains(ops0, "export") {
|
|
t.Fatalf("writable resource should get import/export, got %v", ops0)
|
|
}
|
|
opsRO := bp.Apis.Resources[1].Operations
|
|
if contains(opsRO, "import") {
|
|
t.Fatalf("read-only should not get import, got %v", opsRO)
|
|
}
|
|
opsB := bp.Apis.Resources[2].Operations
|
|
if !contains(opsB, "export") || countOp(opsB, "import") != 1 {
|
|
t.Fatalf("should add export once, keep import: %v", opsB)
|
|
}
|
|
acts := bp.Pages[0].Layout.Actions
|
|
if !contains(acts, "import") || !contains(acts, "export") {
|
|
t.Fatalf("list actions should include import/export: %v", acts)
|
|
}
|
|
}
|
|
|
|
func TestEnsureDefaultImportExportDisabled(t *testing.T) {
|
|
ui, _ := json.Marshal(map[string]any{"disable_default_import": true})
|
|
bp := &blueprint.Blueprint{
|
|
Meta: blueprint.Meta{UI: ui},
|
|
Apis: blueprint.Apis{
|
|
Resources: []blueprint.APIResource{
|
|
{Entity: "a", Path: "/a", Operations: []string{"list", "create"}},
|
|
},
|
|
},
|
|
}
|
|
bp.EnsureDefaultImportExport()
|
|
if contains(bp.Apis.Resources[0].Operations, "import") {
|
|
t.Fatal("disable_default_import should skip")
|
|
}
|
|
}
|
|
|
|
func contains(ss []string, want string) bool {
|
|
for _, s := range ss {
|
|
if s == want {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func countOp(ss []string, want string) int {
|
|
n := 0
|
|
for _, s := range ss {
|
|
if s == want {
|
|
n++
|
|
}
|
|
}
|
|
return n
|
|
}
|