mirror of https://github.com/gofiber/fiber.git
♻️ Refactor: Remove unused CheckConstraint test cases and reorganize benchmark test cases for clarity
parent
827877fa36
commit
5be0aae6a7
212
path_test.go
212
path_test.go
|
@ -5,7 +5,6 @@
|
|||
package fiber
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -266,214 +265,3 @@ 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: true,
|
||||
},
|
||||
{
|
||||
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) {
|
||||
t.Parallel()
|
||||
|
||||
result := tc.constraint.CheckConstraint(tc.param)
|
||||
require.Equal(t, tc.expectedResult, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type mockCustomConstraint struct{}
|
||||
|
||||
func (*mockCustomConstraint) Name() string {
|
||||
return "custom"
|
||||
}
|
||||
|
||||
func (*mockCustomConstraint) Execute(_ string, _ ...string) bool {
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -28,14 +28,6 @@ var (
|
|||
func init() {
|
||||
// smaller list for benchmark cases
|
||||
benchmarkCases = []routeCaseCollection{
|
||||
{
|
||||
pattern: "/api/v1/:param<int;bool((>",
|
||||
testCases: []routeTestCase{
|
||||
{url: "/api/v1/entity", params: nil, match: false},
|
||||
{url: "/api/v1/8728382", params: []string{"8728382"}, match: true},
|
||||
{url: "/api/v1/true", params: nil, match: false},
|
||||
},
|
||||
},
|
||||
{
|
||||
pattern: "/api/v1/const",
|
||||
testCases: []routeTestCase{
|
||||
|
@ -614,14 +606,14 @@ func init() {
|
|||
{url: "/api/v1/2022/08-27", params: nil, match: false},
|
||||
},
|
||||
},
|
||||
// {
|
||||
// pattern: "/api/v1/:param<int;bool((>",
|
||||
// testCases: []routeTestCase{
|
||||
// {url: "/api/v1/entity", params: nil, match: false},
|
||||
// {url: "/api/v1/8728382", params: []string{"8728382"}, match: true},
|
||||
// {url: "/api/v1/true", params: nil, match: false},
|
||||
// },
|
||||
// },
|
||||
{
|
||||
pattern: "/api/v1/:param<int;bool((>",
|
||||
testCases: []routeTestCase{
|
||||
{url: "/api/v1/entity", params: nil, match: false},
|
||||
{url: "/api/v1/8728382", params: []string{"8728382"}, match: true},
|
||||
{url: "/api/v1/true", params: nil, match: false},
|
||||
},
|
||||
},
|
||||
{
|
||||
pattern: "/api/v1/:param<int;max(3000)>",
|
||||
testCases: []routeTestCase{
|
||||
|
@ -721,6 +713,28 @@ func init() {
|
|||
{url: "/api/v1/", params: []string{""}, match: true},
|
||||
},
|
||||
},
|
||||
// Add test case for RegexCompiler == nil
|
||||
{
|
||||
pattern: "/api/v1/:param<regex(\\d+)>",
|
||||
testCases: []routeTestCase{
|
||||
{url: "/api/v1/123", params: []string{"123"}, match: true},
|
||||
{url: "/api/v1/abc", params: nil, match: false},
|
||||
},
|
||||
},
|
||||
// Add test case for default branch (unknown constraint type)
|
||||
{
|
||||
pattern: "/api/v1/:param<unknownconstraint>",
|
||||
testCases: []routeTestCase{
|
||||
{url: "/api/v1/anyvalue", params: nil, match: false},
|
||||
},
|
||||
},
|
||||
// Test case for constraint with insufficient data
|
||||
{
|
||||
pattern: "/api/v1/:param<minLen>",
|
||||
testCases: []routeTestCase{
|
||||
{url: "/api/v1/anyvalue", params: nil, match: false},
|
||||
},
|
||||
},
|
||||
}...,
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue