File: openapiv2-headers.t

package info (click to toggle)
libjson-validator-perl 5.14%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,160 kB
  • sloc: perl: 3,015; makefile: 14
file content (78 lines) | stat: -rw-r--r-- 3,101 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
use Mojo::Base -strict;
use JSON::Validator;
use Mojo::Headers;
use Test::More;

my $schema  = JSON::Validator->new->schema('data://main/spec.json')->schema;
my $headers = Mojo::Headers->new;
my $body    = sub { +{exists => 1, value => {}} };
my @errors;

$headers->header('X-Number' => 'x')->header('X-String' => '123');
@errors = $schema->validate_request([get => '/test'], {header => $headers->to_hash(1)});
is "@errors", '/X-Number: Expected number - got string.', 'request header not a number';

$headers->header('X-Number' => '42');
@errors = $schema->validate_request([get => '/test'], {header => $headers->to_hash(1)});
is "@errors", '', 'request header is number';

$headers->header('X-Array' => '42');
@errors = $schema->validate_request([get => '/test'], {header => $headers->to_hash});
is ref $headers->to_hash->{'X-Array'}, '', 'request header is not an array';
is "@errors", '', 'request header is coerced into an array';

@errors = $schema->validate_response([get => '/test'], {body => $body, header => $headers->to_hash});
is "@errors", '', 'response header is coerced into an array';

$headers->add('X-Array' => '3.14');
@errors = $schema->validate_request([get => '/test'], {header => $headers->to_hash(1)});
is ref $headers->to_hash(1)->{'X-Array'}, 'ARRAY', 'header is an array';
is "@errors", '', 'request header as array is valid';

$headers->header('X-Bool' => '42');
@errors = $schema->validate_request([get => '/test'], {header => $headers->to_hash(1)});
is "@errors", '/X-Bool: Expected boolean - got string.', 'request header not a boolean';

@errors = $schema->validate_response([get => '/test'], {body => $body, header => $headers->to_hash(1)});
is "@errors", '/X-Bool: Expected boolean - got string.', 'response header not a boolean';

for my $str (qw(true false 1 0)) {
  $headers->header('X-Bool' => $str);
  @errors = $schema->validate_request([get => '/test'], {header => $headers->to_hash});
  is "@errors", '', q(request header as boolean "$str");

  @errors = $schema->validate_response([get => '/test'], {body => $body, header => $headers->to_hash(1)});
  is "@errors", '', q(response header as boolean "$str");
}

done_testing;

__DATA__
@@ spec.json
{
  "swagger": "2.0",
  "info": {"version": "", "title": "Test headers"},
  "basePath": "/api",
  "paths": {
    "/test": {
      "get": {
        "parameters": [
          {"in": "header", "name": "X-Bool", "type": "boolean", "description": "desc..."},
          {"in": "header", "name": "X-Number", "type": "number", "description": "desc..."},
          {"in": "header", "name": "X-String", "type": "string", "description": "desc..."},
          {"in": "header", "name": "X-Array", "items": {"type": "string"}, "type": "array", "description": "desc..."}
        ],
        "responses": {
          "200": {
            "description": "this is required",
            "headers": {
              "X-Array": {"type": "array", "items": {"type": "string"}, "minItems": 1},
              "X-Bool": {"type": "boolean"}
            },
            "schema": {"type": "object"}
          }
        }
      }
    }
  }
}