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