Feat v0.9.5 typed forms sdk (#79)
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-runners (push) Has been skipped
CI/CD / e2e-smoke (push) Has been skipped
CI/CD / test-frontend (push) Successful in 5s
CI/CD / test-go-pg (push) Successful in 2m44s
CI/CD / test-sqlite (push) Successful in 3m6s
CI/CD / build-and-deploy (push) Successful in 29s
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-runners (push) Has been skipped
CI/CD / e2e-smoke (push) Has been skipped
CI/CD / test-frontend (push) Successful in 5s
CI/CD / test-go-pg (push) Successful in 2m44s
CI/CD / test-sqlite (push) Successful in 3m6s
CI/CD / build-and-deploy (push) Successful in 29s
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #79.
This commit is contained in:
116
server/sandbox/forms_module_test.go
Normal file
116
server/sandbox/forms_module_test.go
Normal file
@@ -0,0 +1,116 @@
|
||||
package sandbox
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"go.starlark.net/starlark"
|
||||
)
|
||||
|
||||
func runFormsScript(t *testing.T, script string) starlark.StringDict {
|
||||
t.Helper()
|
||||
mod := BuildFormsModule(context.Background())
|
||||
predeclared := starlark.StringDict{"forms": mod}
|
||||
globals, err := starlark.ExecFile(&starlark.Thread{Name: "test"}, "test.star", script, predeclared)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return globals
|
||||
}
|
||||
|
||||
func TestFormsModule_ValidateValid(t *testing.T) {
|
||||
globals := runFormsScript(t, `
|
||||
tpl = {
|
||||
"fields": [
|
||||
{"key": "name", "type": "text", "label": "Name", "required": True},
|
||||
{"key": "email", "type": "email", "label": "Email"},
|
||||
]
|
||||
}
|
||||
result = forms.validate(tpl, {"name": "Alice", "email": "alice@example.com"})
|
||||
`)
|
||||
result := globals["result"].(*starlark.Dict)
|
||||
valid, _, _ := result.Get(starlark.String("valid"))
|
||||
if valid != starlark.True {
|
||||
t.Fatalf("expected valid=True, got %v", valid)
|
||||
}
|
||||
errors, _, _ := result.Get(starlark.String("errors"))
|
||||
errList := errors.(*starlark.List)
|
||||
if errList.Len() != 0 {
|
||||
t.Fatalf("expected 0 errors, got %d", errList.Len())
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormsModule_ValidateRequired(t *testing.T) {
|
||||
globals := runFormsScript(t, `
|
||||
tpl = {
|
||||
"fields": [
|
||||
{"key": "name", "type": "text", "label": "Name", "required": True},
|
||||
]
|
||||
}
|
||||
result = forms.validate(tpl, {})
|
||||
`)
|
||||
result := globals["result"].(*starlark.Dict)
|
||||
valid, _, _ := result.Get(starlark.String("valid"))
|
||||
if valid != starlark.False {
|
||||
t.Fatalf("expected valid=False, got %v", valid)
|
||||
}
|
||||
errors, _, _ := result.Get(starlark.String("errors"))
|
||||
errList := errors.(*starlark.List)
|
||||
if errList.Len() != 1 {
|
||||
t.Fatalf("expected 1 error, got %d", errList.Len())
|
||||
}
|
||||
errDict := errList.Index(0).(*starlark.Dict)
|
||||
key, _, _ := errDict.Get(starlark.String("key"))
|
||||
if key.(starlark.String).GoString() != "name" {
|
||||
t.Fatalf("expected error key 'name', got %v", key)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormsModule_ValidateTypeErrors(t *testing.T) {
|
||||
globals := runFormsScript(t, `
|
||||
tpl = {
|
||||
"fields": [
|
||||
{"key": "age", "type": "number", "label": "Age", "validation": {"min": 0, "max": 150}},
|
||||
{"key": "email", "type": "email", "label": "Email"},
|
||||
]
|
||||
}
|
||||
result = forms.validate(tpl, {"age": -5, "email": "bad"})
|
||||
`)
|
||||
result := globals["result"].(*starlark.Dict)
|
||||
valid, _, _ := result.Get(starlark.String("valid"))
|
||||
if valid != starlark.False {
|
||||
t.Fatalf("expected valid=False, got %v", valid)
|
||||
}
|
||||
errors, _, _ := result.Get(starlark.String("errors"))
|
||||
errList := errors.(*starlark.List)
|
||||
if errList.Len() != 2 {
|
||||
t.Fatalf("expected 2 errors, got %d", errList.Len())
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormsModule_ValidateCondition(t *testing.T) {
|
||||
globals := runFormsScript(t, `
|
||||
tpl = {
|
||||
"fields": [
|
||||
{"key": "type", "type": "text", "label": "Type"},
|
||||
{"key": "details", "type": "text", "label": "Details", "required": True,
|
||||
"condition": {"when": "type", "op": "eq", "value": "other"}},
|
||||
]
|
||||
}
|
||||
# Condition not met — details not required
|
||||
result1 = forms.validate(tpl, {"type": "normal"})
|
||||
# Condition met — details required
|
||||
result2 = forms.validate(tpl, {"type": "other"})
|
||||
`)
|
||||
result1 := globals["result1"].(*starlark.Dict)
|
||||
valid1, _, _ := result1.Get(starlark.String("valid"))
|
||||
if valid1 != starlark.True {
|
||||
t.Fatalf("result1: expected valid=True, got %v", valid1)
|
||||
}
|
||||
|
||||
result2 := globals["result2"].(*starlark.Dict)
|
||||
valid2, _, _ := result2.Get(starlark.String("valid"))
|
||||
if valid2 != starlark.False {
|
||||
t.Fatalf("result2: expected valid=False, got %v", valid2)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user