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