1 package resourcename
2
3 import (
4 "testing"
5
6 "gotest.tools/v3/assert"
7 )
8
9 func TestValidate(t *testing.T) {
10 t.Parallel()
11 for _, tt := range []struct {
12 name string
13 input string
14 errorContains string
15 }{
16 {
17 name: "empty",
18 input: "",
19 errorContains: "empty",
20 },
21
22 {
23 name: "invalid DNS characters",
24 input: "ice cream is best",
25 errorContains: "not a valid DNS name",
26 },
27
28 {
29 name: "invalid DNS characters in segment",
30 input: "foo/bar/ice cream is best",
31 errorContains: "not a valid DNS name",
32 },
33
34 {
35 name: "invalid DNS characters in domain",
36 input: "//ice cream is best.com/foo/bar",
37 errorContains: "not a valid DNS name",
38 },
39
40 {
41 name: "variable",
42 input: "foo/bar/{baz}",
43 errorContains: "must not contain variables",
44 },
45
46 {
47 name: "singleton",
48 input: "foo",
49 },
50
51 {
52 name: "singleton wildcard",
53 input: "-",
54 },
55
56 {
57 name: "multi",
58 input: "foo/bar",
59 },
60
61 {
62 name: "multi wildcard at start",
63 input: "-/bar",
64 },
65
66 {
67 name: "multi wildcard at end",
68 input: "foo/-",
69 },
70
71 {
72 name: "multi wildcard at middle",
73 input: "foo/-/bar",
74 },
75
76 {
77 name: "numeric",
78 input: "foo/1234/bar",
79 },
80
81 {
82 name: "camelCase",
83 input: "FOO/1234/bAr",
84 },
85
86 {
87 name: "full",
88 input: "//example.com/foo/bar",
89 },
90 } {
91 tt := tt
92 t.Run(tt.name, func(t *testing.T) {
93 t.Parallel()
94 err := Validate(tt.input)
95 if tt.errorContains != "" {
96 assert.ErrorContains(t, err, tt.errorContains)
97 } else {
98 assert.NilError(t, err)
99 }
100 })
101 }
102 }
103
104 func TestValidatePattern(t *testing.T) {
105 t.Parallel()
106 for _, tt := range []struct {
107 name string
108 input string
109 errorContains string
110 }{
111 {
112 name: "empty",
113 input: "",
114 errorContains: "empty",
115 },
116
117 {
118 name: "invalid DNS characters",
119 input: "ice cream is best",
120 errorContains: "not a valid DNS name",
121 },
122
123 {
124 name: "invalid DNS characters in segment",
125 input: "foo/bar/ice cream is best",
126 errorContains: "not a valid DNS name",
127 },
128
129 {
130 name: "invalid DNS characters in domain",
131 input: "//ice cream is best.com/foo/bar",
132 errorContains: "patterns can not be full resource names",
133 },
134
135 {
136 name: "variable",
137 input: "foo/bar/{baz}",
138 },
139
140 {
141 name: "singleton",
142 input: "foo",
143 },
144
145 {
146 name: "singleton wildcard",
147 input: "-",
148 errorContains: "wildcards not allowed in patterns",
149 },
150
151 {
152 name: "multi",
153 input: "foo/bar",
154 },
155
156 {
157 name: "multi wildcard at start",
158 input: "-/bar",
159 errorContains: "wildcards not allowed in patterns",
160 },
161
162 {
163 name: "multi wildcard at end",
164 input: "foo/-",
165 errorContains: "wildcards not allowed in patterns",
166 },
167
168 {
169 name: "multi wildcard at middle",
170 input: "foo/-/bar",
171 errorContains: "wildcards not allowed in patterns",
172 },
173
174 {
175 name: "numeric",
176 input: "foo/1234/bar",
177 },
178
179 {
180 name: "camelCase",
181 input: "FOO/1234/bAr",
182 },
183
184 {
185 name: "full",
186 input: "//example.com/foo/bar",
187 errorContains: "patterns can not be full resource names",
188 },
189
190 {
191 name: "invalid variable name",
192 input: "fooBars/{fooBar}",
193 errorContains: "must be valid snake case",
194 },
195
196 {
197 name: "valid variable name",
198 input: "fooBars/{foo_bar}",
199 },
200 } {
201 tt := tt
202 t.Run(tt.name, func(t *testing.T) {
203 t.Parallel()
204 err := ValidatePattern(tt.input)
205 if tt.errorContains != "" {
206 assert.ErrorContains(t, err, tt.errorContains)
207 } else {
208 assert.NilError(t, err)
209 }
210 })
211 }
212 }
213
View as plain text