From: Peter Rabbitson Date: Sun, 15 Nov 2009 13:11:03 +0000 (+0000) Subject: Extensive test of virtual and classic view relationships X-Git-Tag: v0.08116~140^2~1 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=f549392f2e93fec75fa5190363d0a465dd5a8f55;p=dbsrgits%2FDBIx-Class.git Extensive test of virtual and classic view relationships --- diff --git a/t/104view.t b/t/104view.t index 3efdcf1..e7eb46a 100644 --- a/t/104view.t +++ b/t/104view.t @@ -1,5 +1,5 @@ use strict; -use warnings; +use warnings; use Test::More; use Test::Exception; @@ -8,8 +8,6 @@ use DBICTest; my $schema = DBICTest->init_schema(); -plan tests => 2; - ## Real view my $cds_rs_2000 = $schema->resultset('CD')->search( { year => 2000 }); my $year2kcds_rs = $schema->resultset('Year2000CDs'); @@ -24,5 +22,50 @@ my $year1999cds_rs = $schema->resultset('Year1999CDs'); is($cds_rs_1999->count, $year1999cds_rs->count, 'View Year1999CDs sees all CDs in year 1999'); +# Test if relationships work correctly +is_deeply ( + [ + $schema->resultset('Year1999CDs')->search ( + {}, + { + result_class => 'DBIx::Class::ResultClass::HashRefInflator', + prefetch => ['artist', { tracks => [qw/cd year1999cd year2000cd/] } ], + }, + )->all + ], + [ + $schema->resultset('CD')->search ( + { 'me.year' => '1999'}, + { + result_class => 'DBIx::Class::ResultClass::HashRefInflator', + prefetch => ['artist', { tracks => [qw/cd year1999cd year2000cd/] } ], + columns => [qw/cdid single_track title/], # to match the columns retrieved by the virtview + }, + )->all + ], + 'Prefetch over virtual view gives expected result', +); +is_deeply ( + [ + $schema->resultset('Year2000CDs')->search ( + {}, + { + result_class => 'DBIx::Class::ResultClass::HashRefInflator', + prefetch => ['artist', { tracks => [qw/cd year1999cd year2000cd/] } ], + }, + )->all + ], + [ + $schema->resultset('CD')->search ( + { 'me.year' => '2000'}, + { + result_class => 'DBIx::Class::ResultClass::HashRefInflator', + prefetch => ['artist', { tracks => [qw/cd year1999cd year2000cd/] } ], + }, + )->all + ], + 'Prefetch over regular view gives expected result', +); +done_testing; diff --git a/t/lib/DBICTest/Schema/Track.pm b/t/lib/DBICTest/Schema/Track.pm index 0a6c346..12f7296 100644 --- a/t/lib/DBICTest/Schema/Track.pm +++ b/t/lib/DBICTest/Schema/Track.pm @@ -54,11 +54,13 @@ __PACKAGE__->belongs_to( "year1999cd", "DBICTest::Schema::Year1999CDs", { "foreign.cdid" => "self.cd" }, + { join_type => 'left' }, # the relationship is of course optional ); __PACKAGE__->belongs_to( "year2000cd", "DBICTest::Schema::Year2000CDs", { "foreign.cdid" => "self.cd" }, + { join_type => 'left' }, ); 1; diff --git a/t/lib/DBICTest/Schema/Year1999CDs.pm b/t/lib/DBICTest/Schema/Year1999CDs.pm index e629e45..76606d4 100644 --- a/t/lib/DBICTest/Schema/Year1999CDs.pm +++ b/t/lib/DBICTest/Schema/Year1999CDs.pm @@ -9,7 +9,7 @@ __PACKAGE__->table_class('DBIx::Class::ResultSource::View'); __PACKAGE__->table('year1999cds'); __PACKAGE__->result_source_instance->is_virtual(1); __PACKAGE__->result_source_instance->view_definition( - "SELECT cdid, artist, title FROM cd WHERE year ='1999'" + "SELECT cdid, artist, title, single_track FROM cd WHERE year ='1999'" ); __PACKAGE__->add_columns( 'cdid' => { @@ -23,7 +23,11 @@ __PACKAGE__->add_columns( data_type => 'varchar', size => 100, }, - + 'single_track' => { + data_type => 'integer', + is_nullable => 1, + is_foreign_key => 1, + }, ); __PACKAGE__->set_primary_key('cdid'); __PACKAGE__->add_unique_constraint([ qw/artist title/ ]);