Files
ai_site/platform/internal/blueprint/ensure_ops_test.go
whm b04b180d30 feat: harden loose-offline sync for user JWT, schema, and console ops
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>
2026-08-05 09:47:35 +08:00

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
}