Reorganize CDBICompat tests - centralize prereq checks in one place
[dbsrgits/DBIx-Class.git] / t / cdbi / 23-cascade.t
CommitLineData
37702ea5 1use strict;
2use Test::More;
dec1bfe0 3use Data::Dumper;
37702ea5 4
deff792e 5INIT {
50891152 6 use lib 't/cdbi/testlib';
deff792e 7 use Film;
8 use Director;
37702ea5 9}
deff792e 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
29for 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;
dec1bfe0 42 local $Data::Dumper::Terse = 1;
43 ok +Film->retrieve("Alligator"), 'has_many with ' . Dumper ($args);;
deff792e 44 $kk->delete;
45}
46
47
48#{ # Fail on cascade
49# local $TODO = 'cascade => "Fail" unimplemented';
8273e845 50#
deff792e 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#}
d9bd5195 69
70done_testing;