use strict; use warnings; use Test::More; eval "use DBD::SQLite"; plan skip_all => 'needs DBD::SQLite for testing' if $@; eval "use Cache::MemoryCache"; plan skip_all => 'Cache::Cache required' if $@; plan tests => 7; use lib 't/lib'; use_ok('SweetTest'); # watch the number of selects we're generating unlink 't/var/prefetch.trace' if -e 't/var/prefetch.trace'; DBI->trace(1, 't/var/prefetch.trace'); SweetTest->cache(Cache::MemoryCache->new( { namespace => 'SweetTest', default_expires_in => 60 } ) ); SweetTest->default_search_attributes( { use_resultset_cache => 1, profile_cache => 1 }); SweetTest->profiling_data({ }); my ($cd) = SweetTest::CD->search( { 'cdid' => 2 }, { prefetch => [ qw/artist liner_notes/ ] }); use Data::Dumper; print Dumper(SweetTest->profiling_data->{object_cache}); cmp_ok(scalar @{SweetTest->profiling_data->{object_cache} || []}, '==', 4, 'Three objects created from query'); SweetTest::CD->profiling_data({ }); is($cd->artist->name, 'Caterwauler McCrae', 'artist has_a ok'); cmp_ok(scalar @{SweetTest::CD->profiling_data->{object_cache} || []}, '==', 0, 'No fetch required for has_a'); is($cd->liner_notes->notes, 'Buy Whiskey!', 'liner_notes might_have ok'); cmp_ok(scalar SweetTest::CD->profiling_data->{object_cache}, '==', 0, 'No fetch required for might_have'); use Data::Dumper qw/Dumper/; print Dumper(SweetTest::CD->profiling_data); # check the number of select statements we actually ran DBI->trace(0); my $selects = 0; open TRACE, 't/var/prefetch.trace'; while () { $selects++ if /SELECT/; } close TRACE; unlink 't/var/prefetch.trace'; is($selects, 1, "ran only 1 select statement, ok");