Merge the relationship resolution rework
[dbsrgits/DBIx-Class.git] / t / cdbi / 11-triggers.t
1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2 use DBIx::Class::Optional::Dependencies -skip_all_without => 'cdbicompat';
3
4 use strict;
5 use warnings;
6
7 use Test::More;
8
9 use lib 't/cdbi/testlib';
10 use Film;
11
12 sub create_trigger2 { ::ok(1, "Running create trigger 2"); }
13 sub delete_trigger  { ::ok(1, "Deleting " . shift->Title) }
14
15 sub pre_up_trigger {
16   $_[0]->_attribute_set(numexplodingsheep => 1);
17   ::ok(1, "Running pre-update trigger");
18 }
19 sub pst_up_trigger { ::ok(1, "Running post-update trigger"); }
20
21 sub default_rating { $_[0]->Rating(15); }
22
23 Film->add_trigger(before_create => \&default_rating);
24 Film->add_trigger(after_create  => \&create_trigger2);
25 Film->add_trigger(after_delete  => \&delete_trigger);
26 Film->add_trigger(before_update => \&pre_up_trigger);
27 Film->add_trigger(after_update  => \&pst_up_trigger);
28
29 ok(
30   my $ver = Film->create({
31       title    => 'La Double Vie De Veronique',
32       director => 'Kryzstof Kieslowski',
33
34       # rating           => '15',
35       numexplodingsheep => 0,
36     }
37   ),
38   "Create Veronique"
39 );
40
41 is $ver->Rating,            15, "Default rating";
42 is $ver->NumExplodingSheep, 0,  "Original sheep count";
43 ok $ver->Rating('12') && $ver->update, "Change the rating";
44 is $ver->NumExplodingSheep, 1, "Updated object's sheep count";
45 is + (
46   $ver->db_Main->selectall_arrayref(
47         'SELECT numexplodingsheep FROM '
48       . $ver->table
49       . ' WHERE '
50       . $ver->primary_column . ' = '
51       . $ver->db_Main->quote($ver->id))
52 )->[0]->[0], 1, "Updated database's sheep count";
53 ok $ver->delete, "Delete";
54
55 {
56   Film->add_trigger(before_create => sub {
57     my $self = shift;
58     ok !$self->_attribute_exists('title'), "PK doesn't auto-vivify";
59   });
60   Film->create({director => "Me"});
61 }
62
63 done_testing;