| 12
 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
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 
 | #!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Test::Fatal;
use t::lib::Test::HT;
ht_test(BadRequest => {}, {
    code   => 400,
    reason => 'Bad Request',
});
ht_test(400 => {}, {
    code   => 400,
    reason => 'Bad Request',
});
ht_test(
    Unauthorized => { www_authenticate => 'Basic realm="realm"' },
    {
        code    => 401,
        reason  => 'Unauthorized',
        headers => [ 'WWW-Authenticate' => 'Basic realm="realm"' ],
    },
);
ht_test(
    Unauthorized => {
        www_authenticate => [
            'Basic realm="basic realm"',
            'Digest realm="digest realm"',
        ]
    },
    {
        code    => 401,
        reason  => 'Unauthorized',
        headers => [
            'WWW-Authenticate' => 'Basic realm="basic realm"',
            'WWW-Authenticate' => 'Digest realm="digest realm"',
        ],
    },
);
ht_test(Forbidden => {}, {
    code   => 403,
    reason => 'Forbidden',
});
ht_test(NotFound=> {}, {
    code   => 404,
    reason => 'Not Found',
});
ht_test(MethodNotAllowed => { allow => [ qw(GET PUT) ] }, {
    code    => 405,
    reason  => 'Method Not Allowed',
    headers => [ Allow => 'GET,PUT' ],
});
like(
    exception {
        HTTP::Throwable::Factory->throw(MethodNotAllowed => {
            allow => [ 'GET', 'PUT', 'OPTIONS', 'PUT' ],
        });
    },
    qr/did not pass type constraint.+\{"allow"\}/,
    '... type check works (must be unique list)',
);
like(
    exception {
        HTTP::Throwable::Factory->throw(MethodNotAllowed => {
            allow => [ 'GET', 'PUT', 'OPTIONS', 'TEST' ],
        });
    },
    qr/did not pass type constraint.+\{"allow"\}/,
    '... type check works (must be all known methods)',
);
ht_test(NotAcceptable => {}, {
    code   => 406,
    reason => 'Not Acceptable',
});
ht_test(
    ProxyAuthenticationRequired => {
        proxy_authenticate => 'Basic realm="realm"'
    },
    {
        code    => 407,
        reason  => 'Proxy Authentication Required',
        headers => [ 'Proxy-Authenticate' => 'Basic realm="realm"' ],
    },
);
ht_test(
    ProxyAuthenticationRequired => {
        proxy_authenticate => [
            'Basic realm="realm"',
            'Digest realm="other_realm"',
        ],
    },
    {
        code    => 407,
        reason  => 'Proxy Authentication Required',
        headers => [
            'Proxy-Authenticate' => 'Basic realm="realm"',
            'Proxy-Authenticate' => 'Digest realm="other_realm"',
        ],
    },
);
ht_test(RequestTimeout => {}, {
    code   => 408,
    reason => 'Request Timeout',
});
ht_test(Conflict => {}, {
    code   => 409,
    reason => 'Conflict',
});
done_testing;
 |