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