CatalystX-CRUD-Model-RDBO

 view release on metacpan or  search on metacpan

t/02-rest.t  view on Meta::CPAN

#!/usr/bin/env perl
use strict;

use Test::More tests => 25;

BEGIN {
    use lib qw( ../../CatalystX-CRUD/trunk/lib );
    use_ok('CatalystX::CRUD::Model::RDBO');
    use_ok('CatalystX::CRUD::Object::RDBO');
    use_ok('Rose::DBx::TestDB');
    use_ok('Rose::DB::Object');
}

SKIP: {
    # if we do not have required modules, skip everything
    eval { require CatalystX::CRUD::Controller::REST; use JSON; };
    if ($@) {
        warn "$@";
        skip "CatalystX::CRUD::Controller::REST not installed", 21;
    }

    use lib qw( t/lib );
    use Catalyst::Test 'MyApp';
    use Data::Dump qw( dump );
    use HTTP::Request::Common;

    diag( "testing against Catalyst-Runtime version "
            . $Catalyst::Runtime::VERSION );

    my $res;

    ok( $res = request('/rest/foo/1'), "GET /rest/1" );
    is( $res->code, 200, "get 200" );
    is_deeply(
        decode_json( $res->content ),
        { "name" => "blue", "id" => 1 },
        "get foo/1"
    );

    ok( $res = request('/rest/foo/1/bars/2'), "GET /foo/1/bars/2" );
    is( $res->code, 404, "GET related does not yet exist" );
    is_deeply(
        decode_json( $res->content ),
        { error => "No such bars with id '2'" },
        "GET related 404 error"
    );

    # add a new foobar
    ok( $res = request( POST( '/rest/foo/1/bars/2', [] ) ),
        "POST /foo/1/bars/2/add" );

    is( $res->code, 204, "POST add related OK" );

    ok( $res = request('/rest/foo/1/bars/2'), "GET /foo/1/bars/2" );
    is( $res->code, 200, "GET related now exists" );

    #diag( dump decode_json( $res->content ) );
    is_deeply(
        decode_json( $res->content ),
        [ { id => 2, name => 'red' } ],
        "GET related 200"
    );

    # remove an old foobar
    ok( $res = request(
            POST( '/rest/foo/1/bars/1', [ 'x-tunneled-method' => 'DELETE' ] )
        ),
        "DELETE /foo/1/bars/1"
    );

    is( $res->code, 204, "DELETE related foobar" );

    ok( $res = request('/rest/foo/search?id=1&cxc-order=id'),
        "search id=1 with order" );

    #diag( dump decode_json( $res->content ) );

    is_deeply(
        decode_json( $res->content ),
        {   count => 1,
            query => {
                limit           => 50,
                offset          => 0,
                plain_query     => { id => [1] },
                plain_query_str => "(id='1')",



( run in 0.628 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )