First of a two-parter :)
[dbsrgits/DBIx-Class.git] / t / cdbi-t / 11-triggers.t
1 use strict;
2 use Test::More;
3
4 BEGIN {
5         eval "use DBD::SQLite";
6         plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 13);
7 }
8
9 use lib 't/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(
24         before_create => \&default_rating,
25         after_create  => \&create_trigger2,
26         after_delete  => \&delete_trigger,
27         before_update => \&pre_up_trigger,
28         after_update  => \&pst_up_trigger,
29 );
30
31 ok(
32         my $ver = Film->create({
33                         title    => 'La Double Vie De Veronique',
34                         director => 'Kryzstof Kieslowski',
35
36                         # rating           => '15',
37                         numexplodingsheep => 0,
38                 }
39         ),
40         "Create Veronique"
41 );
42
43 is $ver->Rating,            15, "Default rating";
44 is $ver->NumExplodingSheep, 0,  "Original sheep count";
45 ok $ver->Rating('12') && $ver->update, "Change the rating";
46 is $ver->NumExplodingSheep, 1, "Updated object's sheep count";
47 is + (
48         $ver->db_Main->selectall_arrayref(
49                     'SELECT numexplodingsheep FROM '
50                         . $ver->table
51                         . ' WHERE '
52                         . $ver->primary_column . ' = '
53                         . $ver->db_Main->quote($ver->id))
54 )->[0]->[0], 1, "Updated database's sheep count";
55 ok $ver->delete, "Delete";
56
57 {
58         Film->add_trigger(before_create => sub { 
59                 my $self = shift;
60                 ok !$self->_attribute_exists('title'), "PK doesn't auto-vivify";
61         });
62         Film->create({director => "Me"});
63 }