1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-02-05 10:45:09 +02:00
pocketbase/core/field_test.go
2024-09-29 21:09:46 +03:00

262 lines
5.0 KiB
Go

package core_test
import (
"context"
"strings"
"testing"
validation "github.com/go-ozzo/ozzo-validation/v4"
"github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/tests"
)
func testFieldBaseMethods(t *testing.T, fieldType string) {
factory, ok := core.Fields[fieldType]
if !ok {
t.Fatalf("Missing %q field factory", fieldType)
}
f := factory()
if f == nil {
t.Fatal("Expected non-nil Field instance")
}
t.Run("type", func(t *testing.T) {
if v := f.Type(); v != fieldType {
t.Fatalf("Expected type %q, got %q", fieldType, v)
}
})
t.Run("id", func(t *testing.T) {
testValues := []string{"new_id", ""}
for _, expected := range testValues {
f.SetId(expected)
if v := f.GetId(); v != expected {
t.Fatalf("Expected id %q, got %q", expected, v)
}
}
})
t.Run("name", func(t *testing.T) {
testValues := []string{"new_name", ""}
for _, expected := range testValues {
f.SetName(expected)
if v := f.GetName(); v != expected {
t.Fatalf("Expected name %q, got %q", expected, v)
}
}
})
t.Run("system", func(t *testing.T) {
testValues := []bool{false, true}
for _, expected := range testValues {
f.SetSystem(expected)
if v := f.GetSystem(); v != expected {
t.Fatalf("Expected system %v, got %v", expected, v)
}
}
})
t.Run("hidden", func(t *testing.T) {
testValues := []bool{false, true}
for _, expected := range testValues {
f.SetHidden(expected)
if v := f.GetHidden(); v != expected {
t.Fatalf("Expected hidden %v, got %v", expected, v)
}
}
})
}
func testDefaultFieldIdValidation(t *testing.T, fieldType string) {
app, _ := tests.NewTestApp()
defer app.Cleanup()
collection := core.NewBaseCollection("test_collection")
scenarios := []struct {
name string
field func() core.Field
expectError bool
}{
{
"empty value",
func() core.Field {
f := core.Fields[fieldType]()
return f
},
true,
},
{
"invalid length",
func() core.Field {
f := core.Fields[fieldType]()
f.SetId(strings.Repeat("a", 256))
return f
},
true,
},
{
"valid length",
func() core.Field {
f := core.Fields[fieldType]()
f.SetId(strings.Repeat("a", 255))
return f
},
false,
},
}
for _, s := range scenarios {
t.Run("[id] "+s.name, func(t *testing.T) {
errs, _ := s.field().ValidateSettings(context.Background(), app, collection).(validation.Errors)
hasErr := errs["id"] != nil
if hasErr != s.expectError {
t.Fatalf("Expected hasErr %v, got %v", s.expectError, hasErr)
}
})
}
}
func testDefaultFieldNameValidation(t *testing.T, fieldType string) {
app, _ := tests.NewTestApp()
defer app.Cleanup()
collection := core.NewBaseCollection("test_collection")
scenarios := []struct {
name string
field func() core.Field
expectError bool
}{
{
"empty value",
func() core.Field {
f := core.Fields[fieldType]()
return f
},
true,
},
{
"invalid length",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName(strings.Repeat("a", 256))
return f
},
true,
},
{
"valid length",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName(strings.Repeat("a", 255))
return f
},
false,
},
{
"invalid regex",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("test(")
return f
},
true,
},
{
"valid regex",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("test_123")
return f
},
false,
},
{
"_via_",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("a_via_b")
return f
},
true,
},
{
"system reserved - null",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("null")
return f
},
true,
},
{
"system reserved - false",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("false")
return f
},
true,
},
{
"system reserved - true",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("true")
return f
},
true,
},
{
"system reserved - _rowid_",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("_rowid_")
return f
},
true,
},
{
"system reserved - expand",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("expand")
return f
},
true,
},
{
"system reserved - collectionId",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("collectionId")
return f
},
true,
},
{
"system reserved - collectionName",
func() core.Field {
f := core.Fields[fieldType]()
f.SetName("collectionName")
return f
},
true,
},
}
for _, s := range scenarios {
t.Run("[name] "+s.name, func(t *testing.T) {
errs, _ := s.field().ValidateSettings(context.Background(), app, collection).(validation.Errors)
hasErr := errs["name"] != nil
if hasErr != s.expectError {
t.Fatalf("Expected hasErr %v, got %v", s.expectError, hasErr)
}
})
}
}