From: Dagfinn Ilmari Mannsåker Date: Wed, 15 Mar 2017 22:58:17 +0000 (+0000) Subject: Explicitly test that prefetched rels get inflated by HRI X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=6b44e3b08d4d855e971ccb756fc2038a7cb206cb;p=dbsrgits%2FDBIx-Class.git Explicitly test that prefetched rels get inflated by HRI The test only checked that anything inflated by HRI matched what the object inflator does, not that HRI actually inflated the prefetched rels. In passing, improve the test descriptions to include the full path to the fields. --- diff --git a/t/inflate/hri.t b/t/inflate/hri.t index 0564cad..f780696 100644 --- a/t/inflate/hri.t +++ b/t/inflate/hri.t @@ -81,33 +81,43 @@ my $schema = DBICTest->init_schema(); } sub check_cols_of { - my ($dbic_obj, $datahashref) = @_; + my ($dbic_obj, $datahashref, $prefetch, $prefix) = @_; + + $prefetch ||= []; + $prefix ||= ''; + my %prefetch; @prefetch{@$prefetch} = (); foreach my $col (keys %$datahashref) { # plain column if (not ref ($datahashref->{$col}) ) { - is ($datahashref->{$col}, $dbic_obj->get_column($col), 'same value'); + is ($datahashref->{$col}, $dbic_obj->get_column($col), "value for $prefix$col"); } # related table entry (belongs_to) elsif (ref ($datahashref->{$col}) eq 'HASH') { - check_cols_of($dbic_obj->$col, $datahashref->{$col}); + delete $prefetch{$col}; + check_cols_of($dbic_obj->$col, $datahashref->{$col}, [], "$col."); } # multiple related entries (has_many) elsif (ref ($datahashref->{$col}) eq 'ARRAY') { + delete $prefetch{$col}; my @dbic_reltable = $dbic_obj->$col; my @hashref_reltable = @{$datahashref->{$col}}; - is (scalar @hashref_reltable, scalar @dbic_reltable, 'number of related entries'); + is (scalar @hashref_reltable, scalar @dbic_reltable, "number of related $col"); # for my $index (0..scalar @hashref_reltable) { for my $index (0..scalar @dbic_reltable) { my $dbic_reltable_obj = $dbic_reltable[$index]; my $hashref_reltable_entry = $hashref_reltable[$index]; - check_cols_of($dbic_reltable_obj, $hashref_reltable_entry); + check_cols_of($dbic_reltable_obj, $hashref_reltable_entry, [], "$col\[$index\]."); } } } + if (@$prefetch) { + is 0+(keys %prefetch), 0, "prefetched " . join ", ", @$prefetch + or diag "missed: " . join ", ", keys %prefetch; + } } # create a cd without tracks for testing empty has_many relationship @@ -136,7 +146,7 @@ for my $index (0 .. $#hashrefinf) { my $dbic_obj = $dbic[$index]; my $datahashref = $hashrefinf[$index]; - check_cols_of($dbic_obj, $datahashref); + check_cols_of($dbic_obj, $datahashref, [qw(artist tracks)]); } # sometimes for ultra-mega-speed you want to fetch columns in esoteric ways