fdee3f79ac77f6ad5cd9d76d6079e4981e11ce83
[dbsrgits/DBIx-Class.git] / t / cdbi / 23-cascade.t
1 use strict;
2 use Test::More;
3 use Data::Dumper;
4
5 INIT {
6     use lib 't/cdbi/testlib';
7     use Film;
8     use Director;
9 }
10
11 { # Cascade on delete
12     Director->has_many(nasties => 'Film');
13
14     my $dir = Director->insert({
15         name => "Lewis Teague",
16     });
17     my $kk = $dir->add_to_nasties({
18         Title => 'Alligator'
19     });
20     is $kk->director, $dir, "Director set OK";
21     is $dir->nasties, 1, "We have one nasty";
22
23     ok $dir->delete;
24     ok !Film->retrieve("Alligator"), "has_many cascade deletes by default";
25 }
26
27
28 # Two ways of saying not to cascade
29 for my $args ({ no_cascade_delete => 1 }, { cascade => "None" }) {
30     Director->has_many(nasties => 'Film', $args);
31
32     my $dir = Director->insert({
33         name => "Lewis Teague",
34     });
35     my $kk = $dir->add_to_nasties({
36         Title => 'Alligator'
37     });
38     is $kk->director, $dir, "Director set OK";
39     is $dir->nasties, 1, "We have one nasty";
40
41     ok $dir->delete;
42     local $Data::Dumper::Terse = 1;
43     ok +Film->retrieve("Alligator"), 'has_many with ' . Dumper ($args);;
44     $kk->delete;
45 }
46
47
48 #{ # Fail on cascade
49 #    local $TODO = 'cascade => "Fail" unimplemented';
50 #
51 #    Director->has_many(nasties => Film => { cascade => 'Fail' });
52 #
53 #    my $dir = Director->insert({ name => "Nasty Noddy" });
54 #    my $kk = $dir->add_to_nasties({ Title => 'Killer Killers' });
55 #    is $kk->director, $dir, "Director set OK";
56 #    is $dir->nasties, 1, "We have one nasty";
57 #
58 #    ok !eval { $dir->delete };
59 #    like $@, qr/1/, "Can't delete while films exist";
60 #
61 #    my $rr = $dir->add_to_nasties({ Title => 'Revenge of the Revengers' });
62 #    ok !eval { $dir->delete };
63 #    like $@, qr/2/, "Still can't delete";
64 #
65 #    $dir->nasties->delete_all;
66 #    ok eval { $dir->delete };
67 #    is $@, '', "Can delete once films are gone";
68 #}
69
70 done_testing;