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