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