File: 11-triggers.t

package info (click to toggle)
libdbix-class-perl 0.082843-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,320 kB
  • sloc: perl: 27,215; sql: 322; sh: 29; makefile: 16
file content (59 lines) | stat: -rw-r--r-- 1,617 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use strict;
use warnings;
use Test::More;

use lib 't/cdbi/testlib';
use Film;

sub create_trigger2 { ::ok(1, "Running create trigger 2"); }
sub delete_trigger  { ::ok(1, "Deleting " . shift->Title) }

sub pre_up_trigger {
  $_[0]->_attribute_set(numexplodingsheep => 1);
  ::ok(1, "Running pre-update trigger");
}
sub pst_up_trigger { ::ok(1, "Running post-update trigger"); }

sub default_rating { $_[0]->Rating(15); }

Film->add_trigger(before_create => \&default_rating);
Film->add_trigger(after_create  => \&create_trigger2);
Film->add_trigger(after_delete  => \&delete_trigger);
Film->add_trigger(before_update => \&pre_up_trigger);
Film->add_trigger(after_update  => \&pst_up_trigger);

ok(
  my $ver = Film->create({
      title    => 'La Double Vie De Veronique',
      director => 'Kryzstof Kieslowski',

      # rating           => '15',
      numexplodingsheep => 0,
    }
  ),
  "Create Veronique"
);

is $ver->Rating,            15, "Default rating";
is $ver->NumExplodingSheep, 0,  "Original sheep count";
ok $ver->Rating('12') && $ver->update, "Change the rating";
is $ver->NumExplodingSheep, 1, "Updated object's sheep count";
is + (
  $ver->db_Main->selectall_arrayref(
        'SELECT numexplodingsheep FROM '
      . $ver->table
      . ' WHERE '
      . $ver->primary_column . ' = '
      . $ver->db_Main->quote($ver->id))
)->[0]->[0], 1, "Updated database's sheep count";
ok $ver->delete, "Delete";

{
  Film->add_trigger(before_create => sub {
    my $self = shift;
    ok !$self->_attribute_exists('title'), "PK doesn't auto-vivify";
  });
  Film->create({director => "Me"});
}

done_testing;