goyave.dev/goyave/v5@v5.0.0-rc9.0.20240517145003-d3f977d0b9f3/validation/object_test.go (about) 1 package validation 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestObjectValidator(t *testing.T) { 11 t.Run("Constructor", func(t *testing.T) { 12 v := Object() 13 assert.NotNil(t, v) 14 assert.Equal(t, "object", v.Name()) 15 assert.True(t, v.IsType()) 16 assert.False(t, v.IsTypeDependent()) 17 assert.Empty(t, v.MessagePlaceholders(&Context{})) 18 }) 19 20 cases := []struct { 21 value any 22 wantValue any 23 want bool 24 }{ 25 {value: map[string]any{"a": 1}, want: true, wantValue: map[string]any{"a": 1}}, 26 {value: `{"a": 1}`, want: true, wantValue: map[string]any{"a": 1.0}}, 27 {value: `"a"`, want: false}, 28 {value: "string", want: false}, 29 {value: "", want: false}, 30 {value: 'a', want: false}, 31 {value: 2, want: false}, 32 {value: 2.5, want: false}, 33 {value: []string{"string"}, want: false}, 34 {value: true, want: false}, 35 {value: nil, want: false}, 36 } 37 38 for _, c := range cases { 39 c := c 40 t.Run(fmt.Sprintf("Validate_%v_%t", c.value, c.want), func(t *testing.T) { 41 v := Object() 42 ctx := &Context{ 43 Value: c.value, 44 } 45 ok := v.Validate(ctx) 46 if assert.Equal(t, c.want, ok) && ok { 47 assert.Equal(t, c.wantValue, ctx.Value) 48 } 49 }) 50 } 51 }