X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frun%2F06relationship.tl;h=a66211e1bd326d9cba26ff880a68604b0794b6b3;hb=5642f1ec77b5215598728ae7e5188f3bb1b4b318;hp=04d1e366e1c1ca745c6fb8baf6a1093508f67b03;hpb=0f57d214e83ec8b31825c924f996a6e50f73499e;p=dbsrgits%2FDBIx-Class.git diff --git a/t/run/06relationship.tl b/t/run/06relationship.tl index 04d1e36..a66211e 100644 --- a/t/run/06relationship.tl +++ b/t/run/06relationship.tl @@ -3,7 +3,7 @@ my $schema = shift; use strict; use warnings; -plan tests => 25; +plan tests => 32; # has_a test my $cd = $schema->resultset("CD")->find(4); @@ -38,6 +38,12 @@ if ($INC{'DBICTest/HelperRels.pm'}) { is( ($artist->search_related('cds'))[3]->title, 'Big Flop', 'create_related ok' ); +my( $rs_from_list ) = $artist->search_related_rs('cds'); +is( ref($rs_from_list), 'DBIx::Class::ResultSet', 'search_related_rs in list context returns rs' ); + +( $rs_from_list ) = $artist->cds_rs(); +is( ref($rs_from_list), 'DBIx::Class::ResultSet', 'relation_rs in list context returns rs' ); + # count_related is( $artist->count_related('cds'), 4, 'count_related ok' ); @@ -50,12 +56,17 @@ my $track = $schema->resultset("Track")->create( { } ); $track->set_from_related( cd => $cd ); -if ($INC{'DBICTest/HelperRels.pm'}) { # except inflated object +if ($INC{'DBICTest/HelperRels.pm'}) { # expect inflated object is($track->disc->cdid, 4, 'set_from_related ok, including alternative accessor' ); } else { is( $track->cd, 4, 'set_from_related ok' ); } +$track->set_from_related( cd => undef ); + +ok( !defined($track->cd), 'set_from_related with undef ok'); + + # update_from_related, the same as set_from_related, but it calls update afterwards $track = $schema->resultset("Track")->create( { trackid => 2, @@ -89,6 +100,19 @@ is( ($artist->search_related('cds'))[4]->title, 'Greatest Hits', 'find_or_create $artist->delete_related( cds => { title => 'Greatest Hits' }); cmp_ok( $schema->resultset("CD")->search( title => 'Greatest Hits' ), '==', 0, 'delete_related ok' ); +# find_or_new_related with an existing record +$cd = $artist->find_or_new_related( 'cds', { title => 'Big Flop' } ); +is( $cd->year, 2005, 'find_or_new_related on existing record ok' ); +ok( $cd->in_storage, 'find_or_new_related on existing record: is in_storage' ); + +# find_or_new_related instantiating a new record +$cd = $artist->find_or_new_related( 'cds', { + title => 'Greatest Hits 2: Louder Than Ever', + year => 2007, +} ); +is( $cd->title, 'Greatest Hits 2: Louder Than Ever', 'find_or_new_related new record ok' ); +ok( ! $cd->in_storage, 'find_or_new_related on a new record: not in_storage' ); + SKIP: { skip "relationship checking needs fixing", 1; # try to add a bogus relationship using the wrong cols