Fix very subtle but deadly bug in single()
[dbsrgits/DBIx-Class.git] / t / search / reentrancy.t
diff --git a/t/search/reentrancy.t b/t/search/reentrancy.t
new file mode 100644 (file)
index 0000000..8790603
--- /dev/null
@@ -0,0 +1,50 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+use lib qw(t/lib);
+use DBICTest;
+
+my $schema = DBICTest->init_schema();
+
+my $track_titles = { map { @$_ }
+  $schema->resultset('Track')
+          ->search({}, { columns => [qw(trackid title)] })
+           ->cursor
+            ->all
+};
+
+my $rs = $schema->resultset('Track');
+
+for my $pass (1,2,3) {
+  for my $meth (qw(search single find)) {
+
+    my $id = (keys %$track_titles)[0];
+    my $tit = delete $track_titles->{$id};
+
+    my ($o) = $rs->$meth({ trackid => $id });
+
+    is(
+      $rs->count({ trackid => $id }),
+      1,
+      "Count works (pass $pass)",
+    );
+
+    is(
+      $o->title,
+      $tit,
+      "Correct object retrieved via $meth() (pass $pass)"
+    );
+
+    $o->delete;
+
+    is(
+      $rs->count_rs({ trackid => $id })->next,
+      0,
+      "Count_rs works (pass $pass)",
+    );
+  }
+}
+
+done_testing;