X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frelationship%2Fcore.t;h=720ca2670485acb7aa267f0195dfa83040246016;hb=bbdda28109ffb2442af84b3cbe5c4921714a52dd;hp=90873336e59aa383ad37a7912f14a6812d0ca0d0;hpb=c98169a74e44ef761b38d738d1d16f8a693d0a46;p=dbsrgits%2FDBIx-Class.git diff --git a/t/relationship/core.t b/t/relationship/core.t index 9087333..720ca26 100644 --- a/t/relationship/core.t +++ b/t/relationship/core.t @@ -5,12 +5,11 @@ use Test::More; use Test::Exception; use lib qw(t/lib); use DBICTest; +use DBIC::SqlMakerTest; my $schema = DBICTest->init_schema(); my $sdebug = $schema->storage->debug; -plan tests => 78; - # has_a test my $cd = $schema->resultset("CD")->find(4); my ($artist) = ($INC{'DBICTest/HelperRels'} @@ -80,6 +79,10 @@ my $track = $schema->resultset("Track")->create( { } ); $track->set_from_related( cd => $cd ); +# has_relationship +ok(! $track->has_relationship( 'foo' ), 'Track has no relationship "foo"'); +ok($track->has_relationship( 'disc' ), 'Track has relationship "disk"' ); + is($track->disc->cdid, 4, 'set_from_related ok, including alternative accessor' ); $track->set_from_related( cd => undef ); @@ -134,7 +137,7 @@ $cd = $artist->find_or_new_related( 'cds', { 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' ); +is( $cd->in_storage, 0, 'find_or_new_related on a new record: not in_storage' ); $cd->artist(undef); my $newartist = $cd->find_or_new_related( 'artist', { @@ -260,8 +263,22 @@ is($def_artist_cd->has_column_loaded('artist'), 1, 'FK loaded'); is($def_artist_cd->search_related('artist')->count, 0, 'closed search on null FK'); # test undirected many-to-many relationship (e.g. "related artists") -my $undir_maps = $schema->resultset("Artist")->find(1)->artist_undirected_maps; +my $undir_maps = $schema->resultset("Artist") + ->search ({artistid => 1}) + ->search_related ('artist_undirected_maps'); is($undir_maps->count, 1, 'found 1 undirected map for artist 1'); +is_same_sql_bind ( + $undir_maps->as_query, + '( + SELECT artist_undirected_maps.id1, artist_undirected_maps.id2 + FROM artist me + JOIN artist_undirected_map artist_undirected_maps + ON artist_undirected_maps.id1 = me.artistid OR artist_undirected_maps.id2 = me.artistid + WHERE ( artistid = ? ) + )', + [[artistid => 1]], + 'expected join sql produced', +); $undir_maps = $schema->resultset("Artist")->find(2)->artist_undirected_maps; is($undir_maps->count, 1, 'found 1 undirected map for artist 2'); @@ -276,10 +293,11 @@ my $searched = $mapped_rs->search({'mapped_artists.artistid' => {'!=', undef}}); cmp_ok($searched->count, '==', 2, "Both artist returned from map after adding another condition"); -# check join through cascaded has_many relationships +# check join through cascaded has_many relationships (also empty has_many rels) $artist = $schema->resultset("Artist")->find(1); my $trackset = $artist->cds->search_related('tracks'); -cmp_ok($trackset->count, '==', 10, "Correct number of tracks for artist"); +is($trackset->count, 10, "Correct number of tracks for artist"); +is($trackset->all, 10, "Correct number of track objects for artist"); # now see about updating eveything that belongs to artist 2 to artist 3 $artist = $schema->resultset("Artist")->find(2); @@ -309,3 +327,5 @@ is($cds->count, 1, "subjoins under left joins force_left (arrayref)"); $cds = $schema->resultset("CD")->search({ 'me.cdid' => 5 }, { join => { single_track => { cd => {} } } }); is($cds->count, 1, "subjoins under left joins force_left (hashref)"); + +done_testing;