The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use Test::More tests => 27;

BEGIN {
    use lib 'lib';
    use_ok('Web::API::Mapper');
}


use Web::API::Mapper;
use warnings;
use strict;

{
    my $m = Web::API::Mapper->new( "/foo" => {
        post => [
            '/timeline/add/' => sub {
                my $args = shift;
                ok( $args->{name} , 'got name' );
                return "ok";
            },
        ],
        get => [
            '/timeline/get/(\w+)' => sub { 
                my $args = shift;
                is( $1 , 'c9s' );
                ok( $args->{name} );
                is( $args->{name} , 'amy' );
                return { timeline => [ 1 .. 10 ] };
            },
        ],
    }  );
    ok( $m , 'obj' );
    my $ret = $m->post->dispatch( '/foo/timeline/add/', { name => 'john' } );
    ok( $ret );
    is( $ret , 'ok' );

    $ret = $m->get->dispatch(  '/foo/timeline/get/c9s' , { name => 'amy' } );
    ok( $ret );
    is( ref($ret) , 'HASH' );

    $ret = $m->dispatch( '/foo/timeline/add/', { name => 'john' } );
    ok( $ret );
    is( $ret , 'ok' );
}


{
    my $m = Web::API::Mapper->new->mount( "/foo" => {
        post => [
            '/timeline/add/' => sub {
                my $args = shift;
                ok( $args->{name} , 'got name' );
                return "ok";
            },
        ],
        get => [
            '/timeline/get/(\w+)' => sub { 
                my $args = shift;
                is( $1 , 'c9s' );
                ok( $args->{name} );
                is( $args->{name} , 'amy' );
                return { timeline => [ 1 .. 10 ] };
            },
        ] })->mount( '/twitter' =>  { get => [ 
               '/timeline/(\w+)' => sub { ok($1); return $1; }
            ] } );

    ok( $m , 'obj' );
    my $ret = $m->post->dispatch( '/foo/timeline/add/', { name => 'john' } );
    ok( $ret );
    is( $ret , 'ok' );

    $ret = $m->get->dispatch(  '/foo/timeline/get/c9s' , { name => 'amy' } );
    ok( $ret );
    is( ref($ret) , 'HASH' );

    $ret = $m->dispatch( '/foo/timeline/add/', { name => 'john' } );
    ok( $ret );
    is( $ret , 'ok' );

    $ret = $m->dispatch( '/twitter/timeline/blah' );
    is( $ret , 'blah' );
}