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