[Catalyst-commits] r9718 - in Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t: lib/RestTest/Controller/API/REST lib/RestTest/Controller/API/RPC rest rpc

abraxxa at dev.catalyst.perl.org abraxxa at dev.catalyst.perl.org
Fri Apr 17 12:53:10 GMT 2009


Author: abraxxa
Date: 2009-04-17 13:53:09 +0100 (Fri, 17 Apr 2009)
New Revision: 9718

Added:
   Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rest/list_prefetch.t
   Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rpc/list_prefetch.t
Modified:
   Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/REST/Artist.pm
   Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/RPC/Artist.pm
Log:
added tests for prefetch support


Modified: Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/REST/Artist.pm
===================================================================
--- Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/REST/Artist.pm	2009-04-16 18:02:11 UTC (rev 9717)
+++ Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/REST/Artist.pm	2009-04-17 12:53:09 UTC (rev 9718)
@@ -10,7 +10,8 @@
       class => 'RestTestDB::Artist',
       create_requires => ['name'],
       create_allows => ['name'],
-      update_allows => ['name']
+      update_allows => ['name'],
+      list_prefetch_allows => [[qw/ cds /],{ 'cds' => 'tracks'}],
       );
 
 1;

Modified: Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/RPC/Artist.pm
===================================================================
--- Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/RPC/Artist.pm	2009-04-16 18:02:11 UTC (rev 9717)
+++ Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/lib/RestTest/Controller/API/RPC/Artist.pm	2009-04-17 12:53:09 UTC (rev 9718)
@@ -10,7 +10,8 @@
       class => 'RestTestDB::Artist',
       create_requires => ['name'],
       create_allows => ['name'],
-      update_allows => ['name']
+      update_allows => ['name'],
+      list_prefetch_allows => [[qw/ cds /],{ 'cds' => 'tracks'}],
       );
 
 1;

Added: Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rest/list_prefetch.t
===================================================================
--- Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rest/list_prefetch.t	                        (rev 0)
+++ Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rest/list_prefetch.t	2009-04-17 12:53:09 UTC (rev 9718)
@@ -0,0 +1,63 @@
+use 5.6.0;
+
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+my $base = 'http://localhost';
+
+use RestTest;
+use DBICTest;
+use URI;
+use Test::More tests => 7;
+use Test::WWW::Mechanize::Catalyst 'RestTest';
+use HTTP::Request::Common;
+use JSON::Syck;
+
+my $mech = Test::WWW::Mechanize::Catalyst->new;
+ok(my $schema = DBICTest->init_schema(), 'got schema');
+
+my $artist_list_url = "$base/api/rest/artist";
+my $cd_list_url = "$base/api/rest/cd";
+
+{
+    my $uri = URI->new( $artist_list_url );
+    $uri->query_form({ 'list_prefetch' => '["cds"]' });	
+    my $req = GET( $uri, 'Accept' => 'text/x-json' );
+    $mech->request($req);
+    cmp_ok( $mech->status, '==', 200, 'search with simple prefetch request okay' );
+    my $rs = $schema->resultset('Artist')->search(undef, { prefetch => ['cds'] });
+    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
+    my @rows = $rs->all;
+    my $expected_response = { list => \@rows, success => 'true' };
+    my $response = JSON::Syck::Load( $mech->content);
+    is_deeply( $expected_response, $response, 'correct data returned for search with simple prefetch specified as param' );
+}
+
+{
+    my $uri = URI->new( $artist_list_url );
+    $uri->query_form({ 'list_prefetch' => '{"cds":"tracks"}' });	
+    my $req = GET( $uri, 'Accept' => 'text/x-json' );
+    $mech->request($req);
+    cmp_ok( $mech->status, '==', 200, 'search with multi-level prefetch request okay' );
+    my $rs = $schema->resultset('Artist')->search(undef, { prefetch => {'cds' => 'tracks'} });
+    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
+    my @rows = $rs->all;
+    my $expected_response = { list => \@rows, success => 'true' };
+    my $response = JSON::Syck::Load( $mech->content);
+    #use Data::Dumper; warn Dumper($response, $expected_response);
+    is_deeply( $expected_response, $response, 'correct data returned for search with multi-level prefetch specified as param' );
+}
+
+{
+    my $uri = URI->new( $cd_list_url );
+    $uri->query_form({ 'list_prefetch' => '["artist"]' });	
+    my $req = GET( $uri, 'Accept' => 'text/x-json' );
+    $mech->request($req);
+    cmp_ok( $mech->status, '==', 400, 'prefetch of artist not okay' );
+
+    my $expected_response = map { { $_->get_columns } } $schema->resultset('CD')->all;
+    my $response = JSON::Syck::Load( $mech->content);
+    is_deeply({ success => 'false',messages => ["prefetch validation failed"]}, $response, 'correct message returned' );
+}

Added: Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rpc/list_prefetch.t
===================================================================
--- Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rpc/list_prefetch.t	                        (rev 0)
+++ Catalyst-Controller-DBIC-API/1.003/branches/prefetch/t/rpc/list_prefetch.t	2009-04-17 12:53:09 UTC (rev 9718)
@@ -0,0 +1,63 @@
+use 5.6.0;
+
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+my $base = 'http://localhost';
+
+use RestTest;
+use DBICTest;
+use URI;
+use Test::More tests => 7;
+use Test::WWW::Mechanize::Catalyst 'RestTest';
+use HTTP::Request::Common;
+use JSON::Syck;
+
+my $mech = Test::WWW::Mechanize::Catalyst->new;
+ok(my $schema = DBICTest->init_schema(), 'got schema');
+
+my $artist_list_url = "$base/api/rpc/artist/list";
+my $cd_list_url = "$base/api/rpc/cd/list";
+
+{
+    my $uri = URI->new( $artist_list_url );
+    $uri->query_form({ 'list_prefetch' => '["cds"]' });	
+    my $req = GET( $uri, 'Accept' => 'text/x-json' );
+    $mech->request($req);
+    cmp_ok( $mech->status, '==', 200, 'search with simple prefetch request okay' );
+    my $rs = $schema->resultset('Artist')->search(undef, { prefetch => ['cds'] });
+    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
+    my @rows = $rs->all;
+    my $expected_response = { list => \@rows, success => 'true' };
+    my $response = JSON::Syck::Load( $mech->content);
+    is_deeply( $expected_response, $response, 'correct data returned for search with simple prefetch specified as param' );
+}
+
+{
+    my $uri = URI->new( $artist_list_url );
+    $uri->query_form({ 'list_prefetch' => '{"cds":"tracks"}' });	
+    my $req = GET( $uri, 'Accept' => 'text/x-json' );
+    $mech->request($req);
+    cmp_ok( $mech->status, '==', 200, 'search with multi-level prefetch request okay' );
+    my $rs = $schema->resultset('Artist')->search(undef, { prefetch => {'cds' => 'tracks'} });
+    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
+    my @rows = $rs->all;
+    my $expected_response = { list => \@rows, success => 'true' };
+    my $response = JSON::Syck::Load( $mech->content);
+    #use Data::Dumper; warn Dumper($response, $expected_response);
+    is_deeply( $expected_response, $response, 'correct data returned for search with multi-level prefetch specified as param' );
+}
+
+{
+    my $uri = URI->new( $cd_list_url );
+    $uri->query_form({ 'list_prefetch' => '["artist"]' });	
+    my $req = GET( $uri, 'Accept' => 'text/x-json' );
+    $mech->request($req);
+    cmp_ok( $mech->status, '==', 400, 'prefetch of artist not okay' );
+
+    my $expected_response = map { { $_->get_columns } } $schema->resultset('CD')->all;
+    my $response = JSON::Syck::Load( $mech->content);
+    is_deeply({ success => 'false',messages => ["prefetch validation failed"]}, $response, 'correct message returned' );
+}




More information about the Catalyst-commits mailing list