1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package errors
16
17 import (
18 "errors"
19 "fmt"
20 "testing"
21
22 "github.com/stretchr/testify/assert"
23 )
24
25 func TestSchemaErrors(t *testing.T) {
26 err := InvalidType("confirmed", "query", "boolean", nil)
27 assert.Error(t, err)
28 assert.EqualValues(t, InvalidTypeCode, err.Code())
29 assert.Equal(t, "confirmed in query must be of type boolean", err.Error())
30
31 err = InvalidType("confirmed", "", "boolean", nil)
32 assert.Error(t, err)
33 assert.EqualValues(t, InvalidTypeCode, err.Code())
34 assert.Equal(t, "confirmed must be of type boolean", err.Error())
35
36 err = InvalidType("confirmed", "query", "boolean", "hello")
37 assert.Error(t, err)
38 assert.EqualValues(t, InvalidTypeCode, err.Code())
39 assert.Equal(t, "confirmed in query must be of type boolean: \"hello\"", err.Error())
40
41 err = InvalidType("confirmed", "query", "boolean", errors.New("hello"))
42 assert.Error(t, err)
43 assert.EqualValues(t, InvalidTypeCode, err.Code())
44 assert.Equal(t, "confirmed in query must be of type boolean, because: hello", err.Error())
45
46 err = InvalidType("confirmed", "", "boolean", "hello")
47 assert.Error(t, err)
48 assert.EqualValues(t, InvalidTypeCode, err.Code())
49 assert.Equal(t, "confirmed must be of type boolean: \"hello\"", err.Error())
50
51 err = InvalidType("confirmed", "", "boolean", errors.New("hello"))
52 assert.Error(t, err)
53 assert.EqualValues(t, InvalidTypeCode, err.Code())
54 assert.Equal(t, "confirmed must be of type boolean, because: hello", err.Error())
55
56 err = DuplicateItems("uniques", "query")
57 assert.Error(t, err)
58 assert.EqualValues(t, UniqueFailCode, err.Code())
59 assert.Equal(t, "uniques in query shouldn't contain duplicates", err.Error())
60
61 err = DuplicateItems("uniques", "")
62 assert.Error(t, err)
63 assert.EqualValues(t, UniqueFailCode, err.Code())
64 assert.Equal(t, "uniques shouldn't contain duplicates", err.Error())
65
66 err = TooManyItems("something", "query", 5, 6)
67 assert.Error(t, err)
68 assert.EqualValues(t, MaxItemsFailCode, err.Code())
69 assert.Equal(t, "something in query should have at most 5 items", err.Error())
70 assert.Equal(t, 6, err.Value)
71
72 err = TooManyItems("something", "", 5, 6)
73 assert.Error(t, err)
74 assert.EqualValues(t, MaxItemsFailCode, err.Code())
75 assert.Equal(t, "something should have at most 5 items", err.Error())
76 assert.Equal(t, 6, err.Value)
77
78 err = TooFewItems("something", "", 5, 4)
79 assert.Error(t, err)
80 assert.EqualValues(t, MinItemsFailCode, err.Code())
81 assert.Equal(t, "something should have at least 5 items", err.Error())
82 assert.Equal(t, 4, err.Value)
83
84 err = ExceedsMaximumInt("something", "query", 5, false, 6)
85 assert.Error(t, err)
86 assert.EqualValues(t, MaxFailCode, err.Code())
87 assert.Equal(t, "something in query should be less than or equal to 5", err.Error())
88 assert.Equal(t, 6, err.Value)
89
90 err = ExceedsMaximumInt("something", "", 5, false, 6)
91 assert.Error(t, err)
92 assert.EqualValues(t, MaxFailCode, err.Code())
93 assert.Equal(t, "something should be less than or equal to 5", err.Error())
94 assert.Equal(t, 6, err.Value)
95
96 err = ExceedsMaximumInt("something", "query", 5, true, 6)
97 assert.Error(t, err)
98 assert.EqualValues(t, MaxFailCode, err.Code())
99 assert.Equal(t, "something in query should be less than 5", err.Error())
100 assert.Equal(t, 6, err.Value)
101
102 err = ExceedsMaximumInt("something", "", 5, true, 6)
103 assert.Error(t, err)
104 assert.EqualValues(t, MaxFailCode, err.Code())
105 assert.Equal(t, "something should be less than 5", err.Error())
106 assert.Equal(t, 6, err.Value)
107
108 err = ExceedsMaximumUint("something", "query", 5, false, 6)
109 assert.Error(t, err)
110 assert.EqualValues(t, MaxFailCode, err.Code())
111 assert.Equal(t, "something in query should be less than or equal to 5", err.Error())
112 assert.Equal(t, 6, err.Value)
113
114 err = ExceedsMaximumUint("something", "", 5, false, 6)
115 assert.Error(t, err)
116 assert.EqualValues(t, MaxFailCode, err.Code())
117 assert.Equal(t, "something should be less than or equal to 5", err.Error())
118 assert.Equal(t, 6, err.Value)
119
120 err = ExceedsMaximumUint("something", "query", 5, true, 6)
121 assert.Error(t, err)
122 assert.EqualValues(t, MaxFailCode, err.Code())
123 assert.Equal(t, "something in query should be less than 5", err.Error())
124 assert.Equal(t, 6, err.Value)
125
126 err = ExceedsMaximumUint("something", "", 5, true, 6)
127 assert.Error(t, err)
128 assert.EqualValues(t, MaxFailCode, err.Code())
129 assert.Equal(t, "something should be less than 5", err.Error())
130 assert.Equal(t, 6, err.Value)
131
132 err = ExceedsMaximum("something", "query", 5, false, 6)
133 assert.Error(t, err)
134 assert.EqualValues(t, MaxFailCode, err.Code())
135 assert.Equal(t, "something in query should be less than or equal to 5", err.Error())
136 assert.Equal(t, 6, err.Value)
137
138 err = ExceedsMaximum("something", "", 5, false, 6)
139 assert.Error(t, err)
140 assert.EqualValues(t, MaxFailCode, err.Code())
141 assert.Equal(t, "something should be less than or equal to 5", err.Error())
142 assert.Equal(t, 6, err.Value)
143
144 err = ExceedsMaximum("something", "query", 5, true, 6)
145 assert.Error(t, err)
146 assert.EqualValues(t, MaxFailCode, err.Code())
147 assert.Equal(t, "something in query should be less than 5", err.Error())
148 assert.Equal(t, 6, err.Value)
149
150 err = ExceedsMaximum("something", "", 5, true, 6)
151 assert.Error(t, err)
152 assert.EqualValues(t, MaxFailCode, err.Code())
153 assert.Equal(t, "something should be less than 5", err.Error())
154 assert.Equal(t, 6, err.Value)
155
156 err = ExceedsMinimumInt("something", "query", 5, false, 4)
157 assert.Error(t, err)
158 assert.EqualValues(t, MinFailCode, err.Code())
159 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error())
160 assert.Equal(t, 4, err.Value)
161
162 err = ExceedsMinimumInt("something", "", 5, false, 4)
163 assert.Error(t, err)
164 assert.EqualValues(t, MinFailCode, err.Code())
165 assert.Equal(t, "something should be greater than or equal to 5", err.Error())
166 assert.Equal(t, 4, err.Value)
167
168 err = ExceedsMinimumInt("something", "query", 5, true, 4)
169 assert.Error(t, err)
170 assert.EqualValues(t, MinFailCode, err.Code())
171 assert.Equal(t, "something in query should be greater than 5", err.Error())
172 assert.Equal(t, 4, err.Value)
173
174 err = ExceedsMinimumInt("something", "", 5, true, 4)
175 assert.Error(t, err)
176 assert.EqualValues(t, MinFailCode, err.Code())
177 assert.Equal(t, "something should be greater than 5", err.Error())
178 assert.Equal(t, 4, err.Value)
179
180 err = ExceedsMinimumUint("something", "query", 5, false, 4)
181 assert.Error(t, err)
182 assert.EqualValues(t, MinFailCode, err.Code())
183 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error())
184 assert.Equal(t, 4, err.Value)
185
186 err = ExceedsMinimumUint("something", "", 5, false, 4)
187 assert.Error(t, err)
188 assert.EqualValues(t, MinFailCode, err.Code())
189 assert.Equal(t, "something should be greater than or equal to 5", err.Error())
190 assert.Equal(t, 4, err.Value)
191
192 err = ExceedsMinimumUint("something", "query", 5, true, 4)
193 assert.Error(t, err)
194 assert.EqualValues(t, MinFailCode, err.Code())
195 assert.Equal(t, "something in query should be greater than 5", err.Error())
196 assert.Equal(t, 4, err.Value)
197
198 err = ExceedsMinimumUint("something", "", 5, true, 4)
199 assert.Error(t, err)
200 assert.EqualValues(t, MinFailCode, err.Code())
201 assert.Equal(t, "something should be greater than 5", err.Error())
202 assert.Equal(t, 4, err.Value)
203
204 err = ExceedsMinimum("something", "query", 5, false, 4)
205 assert.Error(t, err)
206 assert.EqualValues(t, MinFailCode, err.Code())
207 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error())
208 assert.Equal(t, 4, err.Value)
209
210 err = ExceedsMinimum("something", "", 5, false, 4)
211 assert.Error(t, err)
212 assert.EqualValues(t, MinFailCode, err.Code())
213 assert.Equal(t, "something should be greater than or equal to 5", err.Error())
214 assert.Equal(t, 4, err.Value)
215
216 err = ExceedsMinimum("something", "query", 5, true, 4)
217 assert.Error(t, err)
218 assert.EqualValues(t, MinFailCode, err.Code())
219 assert.Equal(t, "something in query should be greater than 5", err.Error())
220 assert.Equal(t, 4, err.Value)
221
222 err = ExceedsMinimum("something", "", 5, true, 4)
223 assert.Error(t, err)
224 assert.EqualValues(t, MinFailCode, err.Code())
225 assert.Equal(t, "something should be greater than 5", err.Error())
226 assert.Equal(t, 4, err.Value)
227
228 err = NotMultipleOf("something", "query", 5, 1)
229 assert.Error(t, err)
230 assert.EqualValues(t, MultipleOfFailCode, err.Code())
231 assert.Equal(t, "something in query should be a multiple of 5", err.Error())
232 assert.Equal(t, 1, err.Value)
233
234 err = NotMultipleOf("something", "query", float64(5), float64(1))
235 assert.Error(t, err)
236 assert.EqualValues(t, MultipleOfFailCode, err.Code())
237 assert.Equal(t, "something in query should be a multiple of 5", err.Error())
238 assert.Equal(t, float64(1), err.Value)
239
240 err = NotMultipleOf("something", "query", uint64(5), uint64(1))
241 assert.Error(t, err)
242 assert.EqualValues(t, MultipleOfFailCode, err.Code())
243 assert.Equal(t, "something in query should be a multiple of 5", err.Error())
244 assert.Equal(t, uint64(1), err.Value)
245
246 err = NotMultipleOf("something", "", 5, 1)
247 assert.Error(t, err)
248 assert.EqualValues(t, MultipleOfFailCode, err.Code())
249 assert.Equal(t, "something should be a multiple of 5", err.Error())
250 assert.Equal(t, 1, err.Value)
251
252 err = EnumFail("something", "query", "yada", []interface{}{"hello", "world"})
253 assert.Error(t, err)
254 assert.EqualValues(t, EnumFailCode, err.Code())
255 assert.Equal(t, "something in query should be one of [hello world]", err.Error())
256 assert.Equal(t, "yada", err.Value)
257
258 err = EnumFail("something", "", "yada", []interface{}{"hello", "world"})
259 assert.Error(t, err)
260 assert.EqualValues(t, EnumFailCode, err.Code())
261 assert.Equal(t, "something should be one of [hello world]", err.Error())
262 assert.Equal(t, "yada", err.Value)
263
264 err = Required("something", "query")
265 assert.Error(t, err)
266 assert.EqualValues(t, RequiredFailCode, err.Code())
267 assert.Equal(t, "something in query is required", err.Error())
268
269 err = Required("something", "")
270 assert.Error(t, err)
271 assert.EqualValues(t, RequiredFailCode, err.Code())
272 assert.Equal(t, "something is required", err.Error())
273
274 err = TooLong("something", "query", 5, "abcdef")
275 assert.Error(t, err)
276 assert.EqualValues(t, TooLongFailCode, err.Code())
277 assert.Equal(t, "something in query should be at most 5 chars long", err.Error())
278 assert.Equal(t, "abcdef", err.Value)
279
280 err = TooLong("something", "", 5, "abcdef")
281 assert.Error(t, err)
282 assert.EqualValues(t, TooLongFailCode, err.Code())
283 assert.Equal(t, "something should be at most 5 chars long", err.Error())
284 assert.Equal(t, "abcdef", err.Value)
285
286 err = TooShort("something", "query", 5, "a")
287 assert.Error(t, err)
288 assert.EqualValues(t, TooShortFailCode, err.Code())
289 assert.Equal(t, "something in query should be at least 5 chars long", err.Error())
290 assert.Equal(t, "a", err.Value)
291
292 err = TooShort("something", "", 5, "a")
293 assert.Error(t, err)
294 assert.EqualValues(t, TooShortFailCode, err.Code())
295 assert.Equal(t, "something should be at least 5 chars long", err.Error())
296 assert.Equal(t, "a", err.Value)
297
298 err = FailedPattern("something", "query", "\\d+", "a")
299 assert.Error(t, err)
300 assert.EqualValues(t, PatternFailCode, err.Code())
301 assert.Equal(t, "something in query should match '\\d+'", err.Error())
302 assert.Equal(t, "a", err.Value)
303
304 err = FailedPattern("something", "", "\\d+", "a")
305 assert.Error(t, err)
306 assert.EqualValues(t, PatternFailCode, err.Code())
307 assert.Equal(t, "something should match '\\d+'", err.Error())
308 assert.Equal(t, "a", err.Value)
309
310 err = InvalidTypeName("something")
311 assert.Error(t, err)
312 assert.EqualValues(t, InvalidTypeCode, err.Code())
313 assert.Equal(t, "something is an invalid type name", err.Error())
314
315 err = AdditionalItemsNotAllowed("something", "query")
316 assert.Error(t, err)
317 assert.EqualValues(t, NoAdditionalItemsCode, err.Code())
318 assert.Equal(t, "something in query can't have additional items", err.Error())
319
320 err = AdditionalItemsNotAllowed("something", "")
321 assert.Error(t, err)
322 assert.EqualValues(t, NoAdditionalItemsCode, err.Code())
323 assert.Equal(t, "something can't have additional items", err.Error())
324
325 err = InvalidCollectionFormat("something", "query", "yada")
326 assert.Error(t, err)
327 assert.EqualValues(t, InvalidTypeCode, err.Code())
328 assert.Equal(t, "the collection format \"yada\" is not supported for the query param \"something\"", err.Error())
329
330 err2 := CompositeValidationError()
331 assert.Error(t, err2)
332 assert.EqualValues(t, CompositeErrorCode, err2.Code())
333 assert.Equal(t, "validation failure list", err2.Error())
334
335 err2 = CompositeValidationError(fmt.Errorf("First error"), fmt.Errorf("Second error"))
336 assert.Error(t, err2)
337 assert.EqualValues(t, CompositeErrorCode, err2.Code())
338 assert.Equal(t, "validation failure list:\nFirst error\nSecond error", err2.Error())
339
340
341 err = MultipleOfMustBePositive("path", "body", float64(-10))
342 assert.Error(t, err)
343 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code())
344 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error())
345 assert.Equal(t, float64(-10), err.Value)
346
347 err = MultipleOfMustBePositive("path", "body", int64(-10))
348 assert.Error(t, err)
349 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code())
350 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error())
351 assert.Equal(t, int64(-10), err.Value)
352
353
354 err = PropertyNotAllowed("path", "body", "key")
355 assert.Error(t, err)
356 assert.EqualValues(t, UnallowedPropertyCode, err.Code())
357
358 assert.Equal(t, "path.key in body is a forbidden property", err.Error())
359
360 err = PropertyNotAllowed("path", "", "key")
361 assert.Error(t, err)
362 assert.EqualValues(t, UnallowedPropertyCode, err.Code())
363
364 assert.Equal(t, "path.key is a forbidden property", err.Error())
365
366
367 err = TooManyProperties("path", "body", 10, 20)
368 assert.Error(t, err)
369 assert.EqualValues(t, TooManyPropertiesCode, err.Code())
370
371 assert.Equal(t, "path in body should have at most 10 properties", err.Error())
372
373 err = TooManyProperties("path", "", 10, 20)
374 assert.Error(t, err)
375 assert.EqualValues(t, TooManyPropertiesCode, err.Code())
376
377 assert.Equal(t, "path should have at most 10 properties", err.Error())
378
379 err = TooFewProperties("path", "body", 10, 1)
380
381 assert.Error(t, err)
382 assert.EqualValues(t, TooFewPropertiesCode, err.Code())
383
384 assert.Equal(t, "path in body should have at least 10 properties", err.Error())
385
386 err = TooFewProperties("path", "", 10, 1)
387
388 assert.Error(t, err)
389 assert.EqualValues(t, TooFewPropertiesCode, err.Code())
390
391 assert.Equal(t, "path should have at least 10 properties", err.Error())
392
393
394 err = FailedAllPatternProperties("path", "body", "key")
395 assert.Error(t, err)
396 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code())
397
398 assert.Equal(t, "path.key in body failed all pattern properties", err.Error())
399
400 err = FailedAllPatternProperties("path", "", "key")
401 assert.Error(t, err)
402 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code())
403
404 assert.Equal(t, "path.key failed all pattern properties", err.Error())
405 }
406
View as plain text