Add failing multikey rs delete (and by implication update) test
Peter Rabbitson [Fri, 15 May 2009 08:43:04 +0000 (08:43 +0000)]
t/delete/related.t

index f3fb78b..39aa429 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 use lib qw(t/lib);
 use DBICTest;
 
-plan tests => 3;
+plan tests => 6;
 
 my $schema = DBICTest->init_schema();
 
@@ -43,3 +43,46 @@ is ($cdrs->count, $total_cds -= 2, 'related + condition delete ok');
 # test that related deletion with limit condition works
 $a2_cds->search ({}, { rows => 1})->delete;
 is ($cdrs->count, $total_cds -= 1, 'related + limit delete ok');
+
+my $tkfk = $schema->resultset('FourKeys_to_TwoKeys');
+
+my ($fa, $fb) = $tkfk->related_resultset ('fourkeys')->populate ([
+  [qw/foo bar hello goodbye sensors/],
+  [qw/1   1   1     1       a      /],
+  [qw/2   2   2     2       b      /],
+]);
+
+# This is already provided by DBICTest
+#my ($ta, $tb) = $tkfk->related_resultset ('twokeys')->populate ([
+#  [qw/artist  cd /],
+#  [qw/1       1  /],
+#  [qw/2       2  /],
+#]);
+my ($ta, $tb) = $schema->resultset ('TwoKeys')
+                  ->search ( [ { artist => 1, cd => 1 }, { artist => 2, cd => 2 } ])
+                    ->all;
+
+my $tkfk_cnt = $tkfk->count;
+
+my $non_void_ctx = $tkfk->populate ([
+  { autopilot => 'a', fourkeys =>  $fa, twokeys => $ta },
+  { autopilot => 'b', fourkeys =>  $fb, twokeys => $tb },
+  { autopilot => 'x', fourkeys =>  $fa, twokeys => $tb },
+  { autopilot => 'y', fourkeys =>  $fb, twokeys => $ta },
+]);
+is ($tkfk->count, $tkfk_cnt += 4, 'FourKeys_to_TwoKeys populated succesfully');
+
+my $sub_rs = $tkfk->search (
+  [ 
+    { map { $_ => 1 } qw/artist.artistid cd.cdid fourkeys.foo fourkeys.bar fourkeys.hello fourkeys.goodbye/ },
+    { map { $_ => 2 } qw/artist.artistid cd.cdid fourkeys.foo fourkeys.bar fourkeys.hello fourkeys.goodbye/ },
+  ],
+  {
+    join => [ 'fourkeys', { twokeys => [qw/artist cd/] } ],
+  },
+);
+
+is ($sub_rs->count, 2, 'Only two rows from fourkeys match');
+$sub_rs->delete;
+
+is ($tkfk->count, $tkfk_cnt -= 2, 'Only two rows deleted');