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"}
}
}
}
}
}
}
|