🚨 Test: Add comprehensive tests for CheckConstraint method with various constraint scenarios

pull/3356/head
JIeJaitt 2025-03-18 17:06:59 +08:00
parent d10b727fc3
commit fafabff29c
1 changed files with 210 additions and 0 deletions

View File

@ -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
}