Fix tests failing due to unspecified resultset retrieval order
[dbsrgits/DBIx-Class.git] / t / 83cache.t
index f220a35..9edfe71 100644 (file)
@@ -1,5 +1,5 @@
 use strict;
-use warnings;  
+use warnings;
 
 use Test::More;
 use lib qw(t/lib);
@@ -8,7 +8,7 @@ use DBICTest;
 my $schema = DBICTest->init_schema();
 
 my $queries;
-$schema->storage->debugcb( sub{ $queries++ } );
+my $debugcb = sub{ $queries++ };
 my $sdebug = $schema->storage->debug;
 
 plan tests => 23;
@@ -45,6 +45,7 @@ $rs->clear_cache;
 
 $queries = 0;
 $schema->storage->debug(1);
+$schema->storage->debugcb ($debugcb);
 
 $rs = $schema->resultset('Artist')->search( undef, { cache => 1 } );
 while( $artist = $rs->next ) {}
@@ -53,6 +54,7 @@ $artist = $rs->first();
 is( $queries, 1, 'revisiting a row does not issue a query when cache => 1' );
 
 $schema->storage->debug($sdebug);
+$schema->storage->debugcb (undef);
 
 my @a = $schema->resultset("Artist")->search(
   { },
@@ -72,11 +74,10 @@ $rs = $schema->resultset("Artist")->search(
   }
 );
 
-use Data::Dumper; $Data::Dumper::Deparse = 1;
-
 # start test for prefetch SELECT count
 $queries = 0;
 $schema->storage->debug(1);
+$schema->storage->debugcb ($debugcb);
 
 $artist = $rs->first;
 $rs->reset();
@@ -99,6 +100,7 @@ is( $artist->count_related('cds'), 3, 'artist->count_related returns correct val
 is($queries, 1, 'only one SQL statement executed');
 
 $schema->storage->debug($sdebug);
+$schema->storage->debugcb (undef);
 
 # make sure related_resultset is deleted after object is updated
 $artist->set_column('name', 'New Name');
@@ -114,6 +116,7 @@ $rs = $schema->resultset("Artist")->search(
     prefetch => {
       cds => 'tags'
     },
+    order_by => { -desc => 'cds.cdid' },
   }
 );
 {
@@ -130,19 +133,15 @@ is($artist->cds, 0, 'No cds for this artist');
 # SELECT count for nested has_many prefetch
 $queries = 0;
 $schema->storage->debug(1);
+$schema->storage->debugcb ($debugcb);
 
 $artist = ($rs->all)[0];
 
 is($queries, 1, 'only one SQL statement executed');
 
-$schema->storage->debug($sdebug);
-
-my @objs;
-#$artist = $rs->find(1);
-
 $queries = 0;
-$schema->storage->debug(1);
 
+my @objs;
 my $cds = $artist->cds;
 my $tags = $cds->next->tags;
 while( my $tag = $tags->next ) {
@@ -157,7 +156,7 @@ while( my $tag = $tags->next ) {
   push @objs, $tag->id; #warn "tag: ", $tag->ID;
 }
 
-is_deeply( \@objs, [ 1 ], 'second cd has correct tags' );
+is_deeply( [ sort @objs] , [ 2, 5, 8 ], 'third cd has correct tags' );
 
 $tags = $cds->next->tags;
 @objs = ();
@@ -165,7 +164,7 @@ while( my $tag = $tags->next ) {
   push @objs, $tag->id; #warn "tag: ", $tag->ID;
 }
 
-is_deeply( \@objs, [ 2, 5, 8 ], 'third cd has correct tags' );
+is_deeply( \@objs, [ 1 ], 'second cd has correct tags' );
 
 is( $queries, 0, 'no additional SQL statements while checking nested data' );
 
@@ -185,4 +184,4 @@ $artist = $rs->find(1);
 is( $queries, 1, 'only one select statement on find with has_many prefetch on resultset' );
 
 $schema->storage->debug($sdebug);
-
+$schema->storage->debugcb (undef);