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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
use strict;
use warnings;
use RT::Extension::RepeatTicket::Test tests => 27;
use_ok('RT::Extension::RepeatTicket');
require_ok('bin/rt-repeat-ticket');
my ( $baseurl, $m ) = RT::Test->started_ok();
ok( $m->login( 'root', 'password' ), 'logged in' );
$m->submit_form_ok( { form_name => 'CreateTicketInQueue', }, 'Click to create ticket' );
$m->content_contains('Enable Recurrence');
diag "Create a ticket with a recurrence in the General queue.";
my $day = DateTime->now->add( days => 14 ); # Start in two weeks
diag "Repeat start date is: " . $day->ymd;
$m->submit_form_ok(
{ form_name => 'TicketCreate',
fields => {
'Subject' => 'Set up recurring aperture maintenance',
'Content' => 'Perform work on portals on Thursday',
'repeat-lead-time' => 7,
'repeat-coexistent-number' => 2,
'repeat-enabled' => 1,
'repeat-type' => 'weekly',
'repeat-details-weekly' => 'week',
'repeat-details-weekly-week' => 1,
'repeat-details-weekly-weeks' => 'th',
'repeat-start-date' => $day->ymd,
'repeat-create-on-recurring-date' => 0,
},
button => 'SubmitTicket',
},
'Create'
);
$m->text_like( qr/Ticket\s(\d+)\screated in queue/);
my $weekly_id = $m->content =~ /Ticket\s(\d+)\screated in queue/;
ok($weekly_id, "Created ticket with id: $weekly_id");
GetThursday($day);
ok(!(RT::Repeat::Ticket::Run->run('-date=' . $day->ymd)),
'Ran recurrence script for two weeks from now: ' . $day->ymd );
my $second = $weekly_id + 1;
ok( $m->goto_ticket($second), "Recurrence ticket $second created.");
my $ticket2 = RT::Ticket->new(RT->SystemUser);
$ticket2->Load($second);
is($ticket2->StartsObj->ISO(Time => 0), $day->ymd, 'Starts in 2 weeks: ' . $day->ymd);
$day->add( days => 7 );
is( $ticket2->DueObj->ISO(Time => 0), $day->ymd, 'Due in 2 weeks + 7 days lead time: ' . $day->ymd);
my $tomorrow = DateTime->now->add( days => 1 );
my $ticket1 = RT::Ticket->new(RT->SystemUser);
ok( $ticket1->Load($weekly_id), "Loaded ticket $weekly_id");
ok($ticket1->SetStatus('resolved'), "Ticket $weekly_id resolved");
ok(!(RT::Repeat::Ticket::Run->run('-date=' . $tomorrow->ymd)), 'Ran recurrence script for tomorrow.');
my $third = $weekly_id + 2;
ok( $m->goto_ticket($third), "Recurrence ticket $third created.");
$m->text_like( qr/Set up recurring aperture maintenance/);
my $ticket3 = RT::Ticket->new(RT->SystemUser);
$ticket3->Load($third);
GetThursday($day);
is($ticket3->StartsObj->ISO(Time => 0), $day->ymd, 'Next starts is 3 weeks out: ' . $day->ymd);
$day->add( days => 7 );
is( $ticket3->DueObj->ISO(Time => 0), $day->ymd, 'Due in 3 weeks + 7 days lead time: ' . $day->ymd);
my $thurs = DateTime->now;
GetThursday($thurs);
ok(!(RT::Repeat::Ticket::Run->run('-date=' . $thurs->ymd)),
'Ran recurrence script for next Thursday: ' . $thurs->ymd );
my $ticket4 = RT::Ticket->new(RT->SystemUser);
ok(!($ticket4->Load($third + 1)), 'No fourth ticket created.');
# Didn't want to add DateTime::Format::Natural as a dependency.
sub GetThursday {
my $dt = shift;
foreach (1..7){
return if $dt->day_of_week == 4; # It's Thursday
$dt->add( days => 1);
}
}
|