X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F68inflate_resultclass_hashrefinflator.t;h=35329000de87029d853e684dc5d7940fcc2ff1d9;hb=6f8af42b9b952d3ad7c1f1475620bab15a46bfb2;hp=221626a414116e738d1a3e3e72a56ae7bc3551ad;hpb=b0930c1e503ce8b2bd0329323851fe6ca3942cd0;p=dbsrgits%2FDBIx-Class.git diff --git a/t/68inflate_resultclass_hashrefinflator.t b/t/68inflate_resultclass_hashrefinflator.t index 221626a..3532900 100644 --- a/t/68inflate_resultclass_hashrefinflator.t +++ b/t/68inflate_resultclass_hashrefinflator.t @@ -4,7 +4,6 @@ use warnings; use Test::More qw(no_plan); use lib qw(t/lib); use DBICTest; -use DBIx::Class::ResultClass::HashRefInflator; my $schema = DBICTest->init_schema(); @@ -62,6 +61,7 @@ sub check_cols_of { $schema->resultset('CD')->create({ title => 'Silence is golden', artist => 3, year => 2006 }); # order_by to ensure both resultsets have the rows in the same order +# also check result_class-as-an-attribute syntax my $rs_dbic = $schema->resultset('CD')->search(undef, { prefetch => [ qw/ artist tracks / ], @@ -72,16 +72,55 @@ my $rs_hashrefinf = $schema->resultset('CD')->search(undef, { prefetch => [ qw/ artist tracks / ], order_by => [ 'me.cdid', 'tracks.position' ], + result_class => 'DBIx::Class::ResultClass::HashRefInflator', } ); -$rs_hashrefinf->result_class('DBIx::Class::ResultClass::HashRefInflator'); my @dbic = $rs_dbic->all; my @hashrefinf = $rs_hashrefinf->all; -for my $index (0..scalar @hashrefinf) { +for my $index (0 .. $#hashrefinf) { my $dbic_obj = $dbic[$index]; my $datahashref = $hashrefinf[$index]; check_cols_of($dbic_obj, $datahashref); } + +# sometimes for ultra-mega-speed you want to fetch columns in esoteric ways +# check the inflator over a non-fetching join +$rs_dbic = $schema->resultset ('Artist')->search ({ 'me.artistid' => 1}, { + prefetch => { cds => 'tracks' }, + order_by => [qw/cds.cdid tracks.trackid/], +}); + +$rs_hashrefinf = $schema->resultset ('Artist')->search ({ 'me.artistid' => 1}, { + join => { cds => 'tracks' }, + select => [qw/name tracks.title tracks.cd /], + as => [qw/name cds.tracks.title cds.tracks.cd /], + order_by => [qw/cds.cdid tracks.trackid/], + result_class => 'DBIx::Class::ResultClass::HashRefInflator', +}); + +@dbic = map { $_->tracks->all } ($rs_dbic->first->cds->all); +@hashrefinf = $rs_hashrefinf->all; + +is (scalar @dbic, scalar @hashrefinf, 'Equal number of tracks fetched'); + +for my $index (0 .. $#hashrefinf) { + my $track = $dbic[$index]; + my $datahashref = $hashrefinf[$index]; + + is ($track->cd->artist->name, $datahashref->{name}, 'Brought back correct artist'); + for my $col (keys %{$datahashref->{cds}{tracks}}) { + is ($track->get_column ($col), $datahashref->{cds}{tracks}{$col}, "Correct track '$col'"); + } +} + +# check for same query as above but using extended columns syntax +$rs_hashrefinf = $schema->resultset ('Artist')->search ({ 'me.artistid' => 1}, { + join => { cds => 'tracks' }, + columns => {name => 'name', 'cds.tracks.title' => 'tracks.title', 'cds.tracks.cd' => 'tracks.cd'}, + order_by => [qw/cds.cdid tracks.trackid/], +}); +$rs_hashrefinf->result_class('DBIx::Class::ResultClass::HashRefInflator'); +is_deeply [$rs_hashrefinf->all], \@hashrefinf, 'Check query using extended columns syntax';