APISchema

 view release on metacpan or  search on metacpan

t/Plack-Middleware-APISchema-ResponseValidator.t  view on Meta::CPAN

package t::Plack::Middleware::APISchema::ResponseValidator;
use lib '.';
use t::test;
use t::test::fixtures;
use Plack::Test;
use Plack::Request;
use HTTP::Request::Common;
use JSON::XS qw(encode_json);

sub _require : Test(startup => 1) {
    my ($self) = @_;

    use_ok 'Plack::Middleware::APISchema::ResponseValidator';
}

sub instantiate : Tests {
    my $schema = APISchema::Schema->new;
    my $middleware = Plack::Middleware::APISchema::ResponseValidator->new(schema => $schema);
    isa_ok $middleware, 'Plack::Middleware::APISchema::ResponseValidator';

    is $middleware->schema, $schema;

    isa_ok $middleware->router, 'Router::Simple';
}

sub response_validator : Tests {
    my $schema = t::test::fixtures::prepare_bmi;
    $schema->register_route(
        method => 'POST',
        route => '/bmi_strict',
        response_resource => {
            encoding => { 'application/json' => 'json' },
            body => 'bmi',
        },
    );
    $schema->register_route(
        method => 'POST',
        route => '/bmi_force_json',
        response_resource => {
            encoding => 'json',
            body => 'bmi',
        },
    );
    $schema->register_resource(bmi_header => {
        type => 'object',
        properties => {
            'x_value' => { type => 'number' },
        },
        required => ['x_value'],
    });
    $schema->register_route(
        method => 'POST',
        route => '/bmi_by_header',
        response_resource => {
            header => 'bmi_header',
        },
    );

    my $content_type;
    my $json;
    my $middleware = Plack::Middleware::APISchema::ResponseValidator->new(schema => $schema);
    my $header = [];
    $middleware->wrap(sub {
        [200, [ 'Content-Type' => $content_type, @$header ], [ $json ]  ]
    });

    subtest 'when valid response' => sub {
        test_psgi $middleware => sub {



( run in 0.687 second using v1.01-cache-2.11-cpan-39bf76dae61 )