diff --git a/required.go b/required.go index 8ddfc30..a7448b3 100644 --- a/required.go +++ b/required.go @@ -29,3 +29,10 @@ func (v *Validator) RequiredSlice(s []any, field string, msg string) *Validator return v } + +// RequiredFloat checks if float value is provided or not. +func (v *Validator) RequiredFloat(f float64, field string, msg string) *Validator { + v.Check(f != 0.0, field, v.msg(Required, msg, field)) + + return v +} diff --git a/required_test.go b/required_test.go index 6c05653..59abb6a 100644 --- a/required_test.go +++ b/required_test.go @@ -1,6 +1,7 @@ package validator import ( + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -86,6 +87,50 @@ func TestValidator_RequiredString(t *testing.T) { } } +func TestValidator_RequiredFloat(t *testing.T) { + tests := []struct { + tag string + value float64 + message string + isPassed bool + expectedMsg string + }{ + { + tag: "t0", + value: 1.0, + message: "", + isPassed: true, + expectedMsg: "f2 is required", + }, + { + tag: "t1", + value: -1.0, + message: "f2 is required", + isPassed: true, + expectedMsg: fmt.Sprintf(RequiredMsg, "t1"), + }, + { + tag: "t2", + value: 0.0, + message: "f2 is required", + isPassed: false, + expectedMsg: "f2 is required", + }, + } + + v := New() + + for _, test := range tests { + v.RequiredFloat(test.value, test.tag, test.message) + + assert.Equal(t, test.isPassed, v.IsPassed()) + + if !test.isPassed { + assert.Equal(t, test.expectedMsg, v.Errors()[test.tag]) + } + } +} + func TestValidator_RequiredSlice(t *testing.T) { tests := []struct { tag string