mirror of https://github.com/gofiber/fiber.git
🚨 Test: Add comprehensive tests for CheckConstraint method with various constraint scenarios
parent
d10b727fc3
commit
fafabff29c
210
path_test.go
210
path_test.go
|
@ -5,6 +5,7 @@
|
|||
package fiber
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -265,3 +266,212 @@ func Benchmark_RoutePatternMatch(t *testing.B) {
|
|||
benchCaseFn(testCollection)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConstraint_CheckConstraint(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
constraint *Constraint
|
||||
param string
|
||||
expectedResult bool
|
||||
}{
|
||||
{
|
||||
name: "no constraint",
|
||||
constraint: &Constraint{ID: noConstraint},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "int constraint valid",
|
||||
constraint: &Constraint{ID: intConstraint},
|
||||
param: "123",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "int constraint invalid",
|
||||
constraint: &Constraint{ID: intConstraint},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "bool constraint valid",
|
||||
constraint: &Constraint{ID: boolConstraint},
|
||||
param: "true",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "bool constraint invalid",
|
||||
constraint: &Constraint{ID: boolConstraint},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "float constraint valid",
|
||||
constraint: &Constraint{ID: floatConstraint},
|
||||
param: "1.23",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "float constraint invalid",
|
||||
constraint: &Constraint{ID: floatConstraint},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "alpha constraint valid",
|
||||
constraint: &Constraint{ID: alphaConstraint},
|
||||
param: "abc",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "alpha constraint invalid",
|
||||
constraint: &Constraint{ID: alphaConstraint},
|
||||
param: "123",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "guid constraint valid",
|
||||
constraint: &Constraint{ID: guidConstraint},
|
||||
param: "123e4567-e89b-12d3-a456-426614174000",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "guid constraint invalid",
|
||||
constraint: &Constraint{ID: guidConstraint},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "min length constraint valid",
|
||||
constraint: &Constraint{ID: minLenConstraint, Data: []string{"3"}},
|
||||
param: "abc",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "min length constraint invalid",
|
||||
constraint: &Constraint{ID: minLenConstraint, Data: []string{"5"}},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "max length constraint valid",
|
||||
constraint: &Constraint{ID: maxLenConstraint, Data: []string{"5"}},
|
||||
param: "abc",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "max length constraint invalid",
|
||||
constraint: &Constraint{ID: maxLenConstraint, Data: []string{"2"}},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "length constraint valid",
|
||||
constraint: &Constraint{ID: lenConstraint, Data: []string{"3"}},
|
||||
param: "abc",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "length constraint invalid",
|
||||
constraint: &Constraint{ID: lenConstraint, Data: []string{"5"}},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "between length constraint valid",
|
||||
constraint: &Constraint{ID: betweenLenConstraint, Data: []string{"2", "4"}},
|
||||
param: "abc",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "between length constraint invalid",
|
||||
constraint: &Constraint{ID: betweenLenConstraint, Data: []string{"4", "6"}},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "min constraint valid",
|
||||
constraint: &Constraint{ID: minConstraint, Data: []string{"2"}},
|
||||
param: "3",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "min constraint invalid",
|
||||
constraint: &Constraint{ID: minConstraint, Data: []string{"4"}},
|
||||
param: "3",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "max constraint valid",
|
||||
constraint: &Constraint{ID: maxConstraint, Data: []string{"4"}},
|
||||
param: "3",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "max constraint invalid",
|
||||
constraint: &Constraint{ID: maxConstraint, Data: []string{"2"}},
|
||||
param: "3",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "range constraint valid",
|
||||
constraint: &Constraint{ID: rangeConstraint, Data: []string{"2", "4"}},
|
||||
param: "3",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "range constraint invalid",
|
||||
constraint: &Constraint{ID: rangeConstraint, Data: []string{"4", "6"}},
|
||||
param: "3",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "datetime constraint valid",
|
||||
constraint: &Constraint{ID: datetimeConstraint, Data: []string{"2006-01-02"}},
|
||||
param: "2023-05-20",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "datetime constraint invalid",
|
||||
constraint: &Constraint{ID: datetimeConstraint, Data: []string{"2006-01-02"}},
|
||||
param: "2023/05/20",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "regex constraint valid",
|
||||
constraint: &Constraint{ID: regexConstraint, Data: []string{`^\d+$`}, RegexCompiler: regexp.MustCompile(`^\d+$`)},
|
||||
param: "123",
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "regex constraint invalid",
|
||||
constraint: &Constraint{ID: regexConstraint, RegexCompiler: regexp.MustCompile(`^\d+$`)},
|
||||
param: "abc",
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "custom constraint valid",
|
||||
constraint: &Constraint{Name: "custom", customConstraints: []CustomConstraint{&mockCustomConstraint{}}},
|
||||
param: "abc",
|
||||
expectedResult: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
result := tc.constraint.CheckConstraint(tc.param)
|
||||
require.Equal(t, tc.expectedResult, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type mockCustomConstraint struct{}
|
||||
|
||||
func (m *mockCustomConstraint) Name() string {
|
||||
return "custom"
|
||||
}
|
||||
|
||||
func (m *mockCustomConstraint) Execute(_ string, _ ...string) bool {
|
||||
return true
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue