From: Peter Rabbitson Date: Fri, 11 Sep 2009 21:06:54 +0000 (+0000) Subject: Extend prefetch tests X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5e8cb53cf70528d4e17526dba967cff67e13cde9;p=dbsrgits%2FDBIx-Class-Historic.git Extend prefetch tests --- diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm index 59db157..24018f3 100644 --- a/lib/DBIx/Class/ResultSource.pm +++ b/lib/DBIx/Class/ResultSource.pm @@ -1462,7 +1462,7 @@ sub _resolve_prefetch { $p = $p->{$_} for (@$pref_path, $pre); $self->throw_exception ( - "Unable to resolve prefetch $pre - join alias map does not contain an entry for path: " + "Unable to resolve prefetch '$pre' - join alias map does not contain an entry for path: " . join (' -> ', @$pref_path, $pre) ) if (ref $p->{-join_aliases} ne 'ARRAY' or not @{$p->{-join_aliases}} ); diff --git a/t/prefetch/via_search_related.t b/t/prefetch/via_search_related.t index 041c341..7725c6e 100644 --- a/t/prefetch/via_search_related.t +++ b/t/prefetch/via_search_related.t @@ -57,34 +57,46 @@ lives_ok (sub { # test where conditions at the root of the related chain - my $artist_rs = $schema->resultset("Artist")->search({artistid => 11}); - + my $artist_rs = $schema->resultset("Artist")->search({artistid => 2}); + my $artist = $artist_rs->next; + $artist->create_related ('cds', $_) for ( + { + year => 1999, title => 'vague cd', genre => { name => 'vague genre' } + }, + { + year => 1999, title => 'vague cd2', genre => { name => 'vague genre' } + }, + ); $rs = $artist_rs->search_related('cds')->search_related('genre', - { 'genre.name' => 'foo' }, + { 'genre.name' => 'vague genre' }, { prefetch => 'cds' }, ); - is($rs->all, 0, 'prefetch without distinct (objects)'); - is($rs->count, 0, 'prefetch without distinct (count)'); - + is($rs->all, 1, 'base without distinct (objects)'); + is($rs->count, 1, 'base without distinct (count)'); + # artist -> 2 cds -> 2 genres -> 2 cds for each genre = 4 + is($rs->search_related('cds')->all, 4, 'prefetch without distinct (objects)'); + is($rs->search_related('cds')->count, 4, 'prefetch without distinct (count)'); $rs = $artist_rs->search(undef, {distinct => 1}) ->search_related('cds')->search_related('genre', - { 'genre.name' => 'foo' }, + { 'genre.name' => 'vague genre' }, ); - is($rs->all, 0, 'distinct without prefetch (objects)'); - is($rs->count, 0, 'distinct without prefetch (count)'); - + is($rs->all, 1, 'distinct without prefetch (objects)'); + is($rs->count, 1, 'distinct without prefetch (count)'); $rs = $artist_rs->search({}, {distinct => 1}) ->search_related('cds')->search_related('genre', - { 'genre.name' => 'foo' }, + { 'genre.name' => 'vague genre' }, { prefetch => 'cds' }, ); - is($rs->all, 0, 'distinct with prefetch (objects)'); - is($rs->count, 0, 'distinct with prefetch (count)'); + is($rs->all, 1, 'distinct with prefetch (objects)'); + is($rs->count, 1, 'distinct with prefetch (count)'); + # artist -> 2 cds -> 2 genres -> 2 cds for each genre + distinct = 2 + is($rs->search_related('cds')->all, 2, 'prefetched distinct with prefetch (objects)'); + is($rs->search_related('cds')->count, 2, 'prefetched distinct with prefetch (count)'); diff --git a/t/relationship/after_update.t b/t/relationship/after_update.t index aaf7300..7ec8d00 100644 --- a/t/relationship/after_update.t +++ b/t/relationship/after_update.t @@ -1,7 +1,5 @@ -#!/usr/bin/perl -w - use strict; -use warnings; +use warnings; use Test::More; use lib qw(t/lib); diff --git a/t/relationship/doesnt_exist.t b/t/relationship/doesnt_exist.t index d440b52..b68d083 100644 --- a/t/relationship/doesnt_exist.t +++ b/t/relationship/doesnt_exist.t @@ -1,7 +1,5 @@ -#!/usr/bin/perl -w - use strict; -use warnings; +use warnings; use Test::More; use lib qw(t/lib); diff --git a/t/relationship/update_or_create_single.t b/t/relationship/update_or_create_single.t index 1675525..a0e31fb 100644 --- a/t/relationship/update_or_create_single.t +++ b/t/relationship/update_or_create_single.t @@ -78,7 +78,7 @@ is_deeply ( # expect a year update on the only related row -# (non-qunique column only) +# (non-unique column only) $genre->update_or_create_related ('model_cd', { year => 2011, }); @@ -95,5 +95,3 @@ is_deeply ( }, 'CD year column updated correctly without a disambiguator', ); - -