1 package resourcename
2
3 import (
4 "fmt"
5 "testing"
6
7 "gotest.tools/v3/assert"
8 )
9
10 func TestMatches(t *testing.T) {
11 t.Parallel()
12 for _, tt := range []struct {
13 test string
14 name string
15 pattern string
16 expected bool
17 }{
18 {
19 test: "valid pattern",
20 name: "shippers/1/sites/1",
21 pattern: "shippers/{shipper}/sites/{site}",
22 expected: true,
23 },
24
25 {
26 test: "name longer than pattern",
27 name: "shippers/1/sites/1/settings",
28 pattern: "shippers/{shipper}/sites/{site}",
29 expected: false,
30 },
31
32 {
33 test: "empty pattern",
34 pattern: "",
35 name: "shippers/1/sites/1",
36 expected: false,
37 },
38
39 {
40 test: "empty pattern and empty name",
41 pattern: "",
42 name: "",
43 expected: false,
44 },
45
46 {
47 test: "singleton",
48 name: "shippers/1/sites/1/settings",
49 pattern: "shippers/{shipper}/sites/{site}/settings",
50 expected: true,
51 },
52
53 {
54 test: "wildcard pattern",
55 name: "shippers/1/sites/1",
56 pattern: "shippers/-/sites/-",
57 expected: false,
58 },
59
60 {
61 test: "full parent",
62 name: "//freight-example.einride.tech/shippers/1/sites/1",
63 pattern: "shippers/{shipper}/sites/{site}",
64 expected: true,
65 },
66
67 {
68 test: "full pattern",
69 name: "shippers/1",
70 pattern: "//freight-example.einride.tech/shippers/{shipper}",
71 expected: false,
72 },
73
74 {
75 test: "slash prefix in the name",
76 name: "/shippers/1",
77 pattern: "shippers/{shipper}",
78 expected: true,
79 },
80
81 {
82 test: "slash prefix in the pattern",
83 name: "shippers/1",
84 pattern: "/shippers/{shipper}",
85 expected: true,
86 },
87 } {
88 tt := tt
89 t.Run(tt.test, func(t *testing.T) {
90 t.Parallel()
91 assert.Check(
92 t,
93 Match(tt.pattern, tt.name) == tt.expected,
94 fmt.Sprintf("expected Match(%q, %q)=%t", tt.pattern, tt.name, tt.expected),
95 )
96 })
97 }
98 }
99
View as plain text