6 use lib "$FindBin::Bin/lib";
7 use Test::More 'no_plan';
8 use Storable qw/lock_store lock_retrieve/;
9 use Catalyst::Test 'TestApp';
11 our $HOME = "$FindBin::Bin/lib/TestApp";
12 our $STATE = "$HOME/scheduler.state";
13 our $URL = 'http://localhost/';
14 our $BASE = 'Catalyst::Plugin::Scheduler::Base';
17 # event # prio # label
18 [ '/cron/every_minute', -10, ],
19 [ TestApp::Controller::Cron->can('every_minute'), 10, "EM" ],
23 END { 1 while unlink $STATE }
25 ### set up some schedules
26 { for my $aref ( @Map ) {
30 for my $key ( qw[event priority label] ) {
31 my $val = $aref->[ $i++ ] or next;
35 TestApp->schedule( at => '@always', %args );
39 ### get events, inspect them
40 { my @events = TestApp->scheduler->list_events;
41 ok( scalar(@events), "Found events" );
42 is( scalar(@events), scalar(@Map),
43 " All events retrieved" );
44 isa_ok( $_, "Catalyst::Plugin::Scheduler::Event" ) for @events;
46 { # hack the last event check to make all events execute immediately
47 $BASE->_last_check_time( 0 );
49 my @pending_events = TestApp->scheduler->list_pending_events;
50 is( scalar( @pending_events ), scalar( @events ),
51 " All pending events retrieved" );
53 ### key our template on event name.
54 my %map = map { $_->[0] => $_ } @Map;
57 for my $event ( @pending_events ) {
59 ### check our accessors
60 { my $meth = 'ls_accessors';
61 can_ok( $event, $meth );
62 can_ok( $event, $event->$meth );
66 { my $re = __PACKAGE__ # package that sheduled
68 . quotemeta($0) # this file
69 . ':\d+'; # the line number
70 my $by = $event->scheduled_by;
72 " Caller registered: '$by'" );
76 ok( $event->active, " Event is active" );
79 cmp_ok( $prio, '>=', $event->priority,
80 " Sorted in right order"
81 ) unless defined $prio; # first in the chain.
82 $prio = $event->priority;
84 ### check some properties
85 my $aref = $map{ $event->event };
86 ok( $aref, " Event retrieved from template" );
87 is( $event->event, $aref->[0],
88 " Right event: ".$event->event );
89 is( $event->priority, $aref->[1],
90 " Right priority: ".$event->priority );
91 is( $event->label, ($aref->[2] || $aref->[0]),
92 " Right label: ".$event->label );
95 ### this should fail, our $c is not an object
97 ok( $@, " Can not run event" );
98 like( $@, qr/not an object/,
99 ' $c is not an object' );
104 # hack the last event check to make all events execute immediately
105 $BASE->_last_check_time( 0 );
106 { $_->active(0) for @events;
107 ok( !scalar(TestApp->scheduler->list_pending_events),
108 " All events disabled" );
109 $_->active(1) for @events;