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  }