@@ -71,6 +71,32 @@ paths:
71
71
assert .Equal (t , "" , errors [0 ].SpecPath )
72
72
}
73
73
74
+ func TestNewValidator_HeaderParamDefaultEncoding_InvalidParamTypeInteger (t * testing.T ) {
75
+ spec := `openapi: 3.1.0
76
+ paths:
77
+ /vending/drinks:
78
+ get:
79
+ parameters:
80
+ - name: coffeeCups
81
+ in: header
82
+ required: true
83
+ schema:
84
+ type: integer`
85
+
86
+ doc , _ := libopenapi .NewDocument ([]byte (spec ))
87
+ m , _ := doc .BuildV3Model ()
88
+ v := NewParameterValidator (& m .Model )
89
+
90
+ request , _ := http .NewRequest (http .MethodGet , "https://things.com/vending/drinks" , nil )
91
+ request .Header .Set ("coffeecups" , "two" ) // headers are case-insensitive
92
+
93
+ valid , errors := v .ValidateHeaderParams (request )
94
+
95
+ assert .False (t , valid )
96
+ assert .Equal (t , 1 , len (errors ))
97
+ assert .Equal (t , "Header parameter 'coffeeCups' is not a valid integer" , errors [0 ].Message )
98
+ }
99
+
74
100
func TestNewValidator_HeaderParamDefaultEncoding_InvalidParamTypeNumber (t * testing.T ) {
75
101
spec := `openapi: 3.1.0
76
102
paths:
@@ -154,7 +180,7 @@ paths:
154
180
assert .Equal (t , "Header parameter 'coffeeCups' cannot be decoded" , errors [0 ].Message )
155
181
}
156
182
157
- func TestNewValidator_HeaderParamDefaultEncoding_InvalidParamTypeObjectNumber (t * testing.T ) {
183
+ func TestNewValidator_HeaderParamDefaultEncoding_InvalidParamTypeObjectInteger (t * testing.T ) {
158
184
spec := `openapi: 3.1.0
159
185
paths:
160
186
/vending/drinks:
@@ -167,7 +193,7 @@ paths:
167
193
type: object
168
194
properties:
169
195
milk:
170
- type: number
196
+ type: integer
171
197
sugar:
172
198
type: boolean`
173
199
@@ -182,10 +208,10 @@ paths:
182
208
183
209
assert .False (t , valid )
184
210
assert .Equal (t , 1 , len (errors ))
185
- assert .Equal (t , "got boolean, want number " , errors [0 ].SchemaValidationErrors [0 ].Reason )
211
+ assert .Equal (t , "got boolean, want integer " , errors [0 ].SchemaValidationErrors [0 ].Reason )
186
212
}
187
213
188
- func TestNewValidator_HeaderParamDefaultEncoding_InvalidParamTypeObjectBoolean (t * testing.T ) {
214
+ func TestNewValidator_HeaderParamDefaultEncoding_InvalidParamTypeObjectNumber (t * testing.T ) {
189
215
spec := `openapi: 3.1.0
190
216
paths:
191
217
/vending/drinks:
@@ -308,7 +334,7 @@ paths:
308
334
assert .Len (t , errors , 0 )
309
335
}
310
336
311
- func TestNewValidator_HeaderParamNonDefaultEncoding_InvalidParamTypeObject (t * testing.T ) {
337
+ func TestNewValidator_HeaderParamNonDefaultEncoding_InvalidParamTypeObjectNumber (t * testing.T ) {
312
338
spec := `openapi: 3.1.0
313
339
paths:
314
340
/vending/drinks:
@@ -340,6 +366,38 @@ paths:
340
366
assert .Equal (t , "got boolean, want number" , errors [0 ].SchemaValidationErrors [0 ].Reason )
341
367
}
342
368
369
+ func TestNewValidator_HeaderParamNonDefaultEncoding_InvalidParamTypeObjectInteger (t * testing.T ) {
370
+ spec := `openapi: 3.1.0
371
+ paths:
372
+ /vending/drinks:
373
+ get:
374
+ parameters:
375
+ - name: coffeeCups
376
+ in: header
377
+ required: true
378
+ explode: true
379
+ schema:
380
+ type: object
381
+ properties:
382
+ milk:
383
+ type: integer
384
+ sugar:
385
+ type: boolean`
386
+
387
+ doc , _ := libopenapi .NewDocument ([]byte (spec ))
388
+ m , _ := doc .BuildV3Model ()
389
+ v := NewParameterValidator (& m .Model )
390
+
391
+ request , _ := http .NewRequest (http .MethodGet , "https://things.com/vending/drinks" , nil )
392
+ request .Header .Set ("coffeecups" , "milk=true,sugar=true" ) // default encoding.
393
+
394
+ valid , errors := v .ValidateHeaderParams (request )
395
+
396
+ assert .False (t , valid )
397
+ assert .Len (t , errors , 1 )
398
+ assert .Equal (t , "got boolean, want integer" , errors [0 ].SchemaValidationErrors [0 ].Reason )
399
+ }
400
+
343
401
func TestNewValidator_HeaderParamNonDefaultEncoding_ValidParamTypeArrayString (t * testing.T ) {
344
402
spec := `openapi: 3.1.0
345
403
paths:
@@ -385,6 +443,33 @@ paths:
385
443
m , _ := doc .BuildV3Model ()
386
444
v := NewParameterValidator (& m .Model )
387
445
446
+ request , _ := http .NewRequest (http .MethodGet , "https://things.com/vending/drinks" , nil )
447
+ request .Header .Set ("coffeecups" , "1.22,2.33,3.44,4.55,5.66" ) // default encoding.
448
+
449
+ valid , errors := v .ValidateHeaderParams (request )
450
+
451
+ assert .True (t , valid )
452
+ assert .Len (t , errors , 0 )
453
+ }
454
+
455
+ func TestNewValidator_HeaderParamNonDefaultEncoding_ValidParamTypeArrayInteger (t * testing.T ) {
456
+ spec := `openapi: 3.1.0
457
+ paths:
458
+ /vending/drinks:
459
+ get:
460
+ parameters:
461
+ - name: coffeeCups
462
+ in: header
463
+ required: true
464
+ schema:
465
+ type: array
466
+ items:
467
+ type: integer`
468
+
469
+ doc , _ := libopenapi .NewDocument ([]byte (spec ))
470
+ m , _ := doc .BuildV3Model ()
471
+ v := NewParameterValidator (& m .Model )
472
+
388
473
request , _ := http .NewRequest (http .MethodGet , "https://things.com/vending/drinks" , nil )
389
474
request .Header .Set ("coffeecups" , "1,2,3,4,5" ) // default encoding.
390
475
@@ -557,6 +642,34 @@ paths:
557
642
558
643
func TestNewValidator_HeaderParamNumberInvalidEnum (t * testing.T ) {
559
644
spec := `openapi: 3.1.0
645
+ paths:
646
+ /vending/drinks:
647
+ get:
648
+ parameters:
649
+ - name: coffeeCups
650
+ in: header
651
+ required: true
652
+ schema:
653
+ type: number
654
+ enum: [1.2,2.3,99.8]`
655
+
656
+ doc , _ := libopenapi .NewDocument ([]byte (spec ))
657
+ m , _ := doc .BuildV3Model ()
658
+ v := NewParameterValidator (& m .Model )
659
+
660
+ request , _ := http .NewRequest (http .MethodGet , "https://things.com/vending/drinks" , nil )
661
+ request .Header .Set ("coffeecups" , "1200.3" ) // that's a lot of cups dude, we only have one dishwasher.
662
+
663
+ valid , errors := v .ValidateHeaderParams (request )
664
+
665
+ assert .False (t , valid )
666
+ assert .Len (t , errors , 1 )
667
+ assert .Equal (t , "Instead of '1200.3', " +
668
+ "use one of the allowed values: '1.2, 2.3, 99.8'" , errors [0 ].HowToFix )
669
+ }
670
+
671
+ func TestNewValidator_HeaderParamIntegerInvalidEnum (t * testing.T ) {
672
+ spec := `openapi: 3.1.0
560
673
paths:
561
674
/vending/drinks:
562
675
get:
0 commit comments