goyave.dev/goyave/v5@v5.0.0-rc9.0.20240517145003-d3f977d0b9f3/validation/min_test.go (about) 1 package validation 2 3 import ( 4 "fmt" 5 "math" 6 "mime/multipart" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "goyave.dev/goyave/v5/util/fsutil" 11 ) 12 13 func TestMinalidator(t *testing.T) { 14 t.Run("Constructor", func(t *testing.T) { 15 v := Min(123.456) 16 assert.NotNil(t, v) 17 assert.Equal(t, "min", v.Name()) 18 assert.False(t, v.IsType()) 19 assert.True(t, v.IsTypeDependent()) 20 assert.Equal(t, []string{":min", "123.456"}, v.MessagePlaceholders(&Context{})) 21 }) 22 23 file := fsutil.File{Header: &multipart.FileHeader{Size: 2048}} 24 largeFile := fsutil.File{Header: &multipart.FileHeader{Size: math.MaxInt64}} 25 26 cases := []struct { 27 value any 28 min float64 29 want bool 30 }{ 31 {value: 2, want: false, min: 3}, 32 {value: 2.5, want: false, min: 3}, 33 {value: float32(2.5), want: false, min: 3}, 34 {value: float64(math.MaxInt64), want: true, min: math.MinInt64}, 35 {value: float64(math.MinInt64), want: true, min: math.MinInt64}, 36 {value: int64(math.MaxInt64), want: false, min: math.MinInt64}, // Don't pass because above max int value that can accurately fit in float64 37 {value: int64(math.MinInt64), want: false, min: math.MinInt64}, // Don't pass because below min int value that can accurately fit in float64 38 {value: 'a', want: false, min: 100}, 39 {value: "abc", want: false, min: 4}, 40 {value: []string{"a", "b"}, want: false, min: 3}, 41 {value: map[string]any{"a": 1, "b": 2}, want: false, min: 3}, 42 {value: true, want: true, min: 1}, 43 {value: nil, want: true, min: 1}, 44 {value: []fsutil.File{file}, want: false, min: 3}, 45 {value: []fsutil.File{largeFile}, want: false, min: math.MinInt64}, // Don't pass because above max int value that can accurately fit in float64 46 47 {value: 3, want: true, min: 3}, 48 {value: 3.5, want: true, min: 3}, 49 {value: float32(3.5), want: true, min: 3}, 50 {value: 'a', want: true, min: 97}, 51 {value: "string", want: true, min: 3}, 52 {value: []string{"a", "b", "c"}, want: true, min: 3}, 53 {value: map[string]any{"a": 1, "b": 2, "c": 3}, want: true, min: 3}, 54 {value: []fsutil.File{file}, want: true, min: 2}, 55 } 56 57 for _, c := range cases { 58 c := c 59 t.Run(fmt.Sprintf("Validate_%v_%f_%t", c.value, c.min, c.want), func(t *testing.T) { 60 v := Min(c.min) 61 ctx := &Context{ 62 Value: c.value, 63 } 64 ok := v.Validate(ctx) 65 assert.Equal(t, c.want, ok) 66 }) 67 } 68 }