The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Shodo::Test::JSONRPC - Test module using Shodo for JSON-RPC Web API.

SYNOPSIS

    use Test::More;
    use Plack::Test;
    use HTTP::Request;
    use JSON qw/to_json/;
    use Shodo::Test::JSONRPC;

    # PSGI application
    my $app = sub {
        my $data = {
            jsonrpc => '2.0',
            result  => {
                entries =>
                  [ { title => 'Hello', body => 'This is an example.' } ]
            },
            id => 1
        };
        my $json = to_json($data);
        return [ 200, [ 'Content-Type' => 'application/json' ], [$json] ];
    };

    # use Plack::Test
    my $plack_test = Plack::Test->create($app);
    shodo_document_root('sample_documents');

    # shodo_test, like a subtest!
    shodo_test 'get_entries' => sub {
        shodo_params(
            category => { isa => 'Str', documentation => 'Category of articles.' },
            limit => { isa => 'Int', default => 20, optional => 1, documentation => 'Limitation numbers per page.' }
        );
        my $data = {
            jsonrpc => '2.0',
            method  => 'get_entries',
            params  => { limit => 1, category => 'technology' }
        };
        my $json = to_json($data);
        my $req  = HTTP::Request->new(
            'POST', '/',
            [
                'Content-Type'   => 'application/json',
                'Content-Length' => length $json
            ],
            $json
        );
        shodo_req_ok( $req, 'Request is valid!' );
        my $res = $plack_test->request($req);
        shodo_res_ok( $res, 200, 'Response is ok!' ); # auto sock document
    };

    shodo_write(); # Generate a markdown-formatted document.

    done_testing();

DESCRIPTION

Shodo-based test module for JSON-RPC Web API.

LICENSE

Copyright (C) Yusuke Wada.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Yusuke Wada <yusuke@kamawada.com>