Implement cascade => "None"
[dbsrgits/DBIx-Class.git] / t / cdbi-t / 23-cascade.t
CommitLineData
37702ea5 1use strict;
2use Test::More;
3
4BEGIN {
deff792e 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);
37702ea5 12}
13
deff792e 14INIT {
15 use lib 't/testlib';
16 use Film;
17 use Director;
37702ea5 18}
deff792e 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
38for 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#}