goyave.dev/goyave/v4@v4.4.11/validation/numeric_test.go (about) 1 package validation 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestValidateNumeric(t *testing.T) { 10 assert.True(t, validateNumeric(newTestContext("field", 1, []string{}, map[string]interface{}{"field": 1}))) 11 assert.True(t, validateNumeric(newTestContext("field", 1.2, []string{}, map[string]interface{}{"field": 1.2}))) 12 assert.True(t, validateNumeric(newTestContext("field", uint(1), []string{}, map[string]interface{}{"field": uint(1)}))) 13 assert.True(t, validateNumeric(newTestContext("field", uint8(1), []string{}, map[string]interface{}{"field": uint8(1)}))) 14 assert.True(t, validateNumeric(newTestContext("field", uint16(1), []string{}, map[string]interface{}{"field": uint16(1)}))) 15 assert.True(t, validateNumeric(newTestContext("field", float32(1.3), []string{}, map[string]interface{}{"field": float32(1.3)}))) 16 assert.True(t, validateNumeric(newTestContext("field", "2", []string{}, map[string]interface{}{"field": "2"}))) 17 assert.True(t, validateNumeric(newTestContext("field", "1.2", []string{}, map[string]interface{}{"field": "1.2"}))) 18 assert.True(t, validateNumeric(newTestContext("field", "-1", []string{}, map[string]interface{}{"field": "-1"}))) 19 assert.True(t, validateNumeric(newTestContext("field", "-1.3", []string{}, map[string]interface{}{"field": "1.3"}))) 20 assert.False(t, validateNumeric(newTestContext("field", uintptr(1), []string{}, map[string]interface{}{"field": uintptr(1)}))) 21 assert.False(t, validateNumeric(newTestContext("field", []string{}, []string{}, map[string]interface{}{"field": []string{}}))) 22 assert.False(t, validateNumeric(newTestContext("field", map[string]string{}, []string{}, map[string]interface{}{"field": map[string]string{}}))) 23 assert.False(t, validateNumeric(newTestContext("field", "test", []string{}, map[string]interface{}{"field": "test"}))) 24 } 25 26 func TestValidateNumericConvertString(t *testing.T) { 27 form1 := map[string]interface{}{"field": "1.2"} 28 ctx1 := newTestContext("field", form1["field"], []string{}, form1) 29 validateNumeric(ctx1) 30 assert.Equal(t, 1.2, ctx1.Value) 31 32 form2 := map[string]interface{}{"field": "-1.3"} 33 ctx2 := newTestContext("field", form2["field"], []string{}, form2) 34 validateNumeric(ctx2) 35 assert.Equal(t, -1.3, ctx2.Value) 36 37 form3 := map[string]interface{}{"field": "2"} 38 ctx3 := newTestContext("field", form3["field"], []string{}, form3) 39 validateNumeric(ctx3) 40 assert.Equal(t, float64(2), ctx3.Value) 41 } 42 43 func TestValidateNumericConvertInObject(t *testing.T) { 44 data := map[string]interface{}{ 45 "object": map[string]interface{}{ 46 "numeric": "1", 47 }, 48 } 49 50 set := RuleSet{ 51 "object": List{"required", "object"}, 52 "object.numeric": List{"required", "numeric"}, 53 } 54 55 errors := Validate(data, set, true, "en-US") 56 assert.Empty(t, errors) 57 _, ok := data["object"].(map[string]interface{})["numeric"].(float64) 58 assert.True(t, ok) 59 } 60 61 func TestValidateInteger(t *testing.T) { 62 assert.True(t, validateInteger(newTestContext("field", 1, []string{}, map[string]interface{}{"field": 1}))) 63 assert.True(t, validateInteger(newTestContext("field", float64(2), []string{}, map[string]interface{}{"field": float64(2)}))) 64 assert.True(t, validateInteger(newTestContext("field", float32(3), []string{}, map[string]interface{}{"field": float32(3)}))) 65 assert.True(t, validateInteger(newTestContext("field", uint(1), []string{}, map[string]interface{}{"field": uint(1)}))) 66 assert.True(t, validateInteger(newTestContext("field", uint8(1), []string{}, map[string]interface{}{"field": uint8(1)}))) 67 assert.True(t, validateInteger(newTestContext("field", uint16(1), []string{}, map[string]interface{}{"field": uint16(1)}))) 68 assert.True(t, validateInteger(newTestContext("field", "2", []string{}, map[string]interface{}{"field": "2"}))) 69 assert.True(t, validateInteger(newTestContext("field", "-1", []string{}, map[string]interface{}{"field": "-1"}))) 70 assert.False(t, validateInteger(newTestContext("field", 2.2, []string{}, map[string]interface{}{"field": 2.2}))) 71 assert.False(t, validateInteger(newTestContext("field", float32(3.2), []string{}, map[string]interface{}{"field": float32(3.2)}))) 72 assert.False(t, validateInteger(newTestContext("field", "1.2", []string{}, map[string]interface{}{"field": "1.2"}))) 73 assert.False(t, validateInteger(newTestContext("field", "-1.3", []string{}, map[string]interface{}{"field": "1.3"}))) 74 assert.False(t, validateInteger(newTestContext("field", uintptr(1), []string{}, map[string]interface{}{"field": uintptr(1)}))) 75 assert.False(t, validateInteger(newTestContext("field", []string{}, []string{}, map[string]interface{}{"field": []string{}}))) 76 assert.False(t, validateInteger(newTestContext("field", map[string]string{}, []string{}, map[string]interface{}{"field": map[string]string{}}))) 77 assert.False(t, validateInteger(newTestContext("field", "test", []string{}, map[string]interface{}{"field": "test"}))) 78 } 79 80 func TestValidateIntegerConvert(t *testing.T) { 81 form1 := map[string]interface{}{"field": "1"} 82 ctx1 := newTestContext("field", form1["field"], []string{}, form1) 83 validateInteger(ctx1) 84 assert.Equal(t, 1, ctx1.Value) 85 86 form2 := map[string]interface{}{"field": "-2"} 87 ctx2 := newTestContext("field", form2["field"], []string{}, form2) 88 validateInteger(ctx2) 89 assert.Equal(t, -2, ctx2.Value) 90 91 form3 := map[string]interface{}{"field": float64(3)} 92 ctx3 := newTestContext("field", form3["field"], []string{}, form3) 93 validateInteger(ctx3) 94 assert.Equal(t, 3, ctx3.Value) 95 } 96 97 func TestValidateIntegerConvertInObject(t *testing.T) { 98 data := map[string]interface{}{ 99 "object": map[string]interface{}{ 100 "integer": "1", 101 }, 102 } 103 104 set := RuleSet{ 105 "object": List{"required", "object"}, 106 "object.integer": List{"required", "integer"}, 107 } 108 109 errors := Validate(data, set, true, "en-US") 110 assert.Empty(t, errors) 111 _, ok := data["object"].(map[string]interface{})["integer"].(int) 112 assert.True(t, ok) 113 }