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 )