File: create_on_recurring_date.t

package info (click to toggle)
rt-extension-repeatticket 2.04-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 472 kB
  • sloc: perl: 4,006; sh: 70; makefile: 45
file content (109 lines) | stat: -rw-r--r-- 5,097 bytes parent folder | download
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
use strict;
use warnings;

use RT::Extension::RepeatTicket::Test tests => undef;

use_ok('RT::Extension::RepeatTicket');
require_ok('bin/rt-repeat-ticket');

my ( $baseurl, $m ) = RT::Test->started_ok();
{
    diag "Run with repeat-create-on-recurring-date value of 1 so repeat-coexistent-number is 0";
    my $daily_id = run_tests($baseurl, $m);

    # A new ticket should be created for any day recurrence script runs for after start date of today
    my $today = DateTime->now;
    my $next_id = $daily_id + 1;
    ok(!(RT::Repeat::Ticket::Run->run()), 'Ran recurrence script for today.');
    my $ticket = RT::Ticket->new(RT->SystemUser);
    ok(!($ticket->Load($next_id)), "No ticket created for today");

    my $tomorrow = DateTime->now->add( days => 1 );
    ok(!(RT::Repeat::Ticket::Run->run('-date=' . $tomorrow->ymd)), 'Ran recurrence script for tomorrow.');
    ok($m->goto_ticket($next_id), "Recurrence ticket $next_id created for tomorrow.");
    $m->text_like( qr/Set up recurring aperture maintenance/);
    $ticket = RT::Ticket->new(RT->SystemUser);
    ok($ticket->Load($next_id), "Loaded ticket $next_id");
    is($ticket->StartsObj->ISO(Time => 0), $tomorrow->ymd, 'Starts tomorrow');
    $tomorrow->add( days => 3 );
    is($ticket->DueObj->ISO(Time => 0), $tomorrow->ymd, 'Due 3 days from tomorrow');

    my $three_months = DateTime->now->add( months => 3 );
    $next_id = $next_id + 1;
    ok(!(RT::Repeat::Ticket::Run->run('-date=' . $three_months->ymd)), 'Ran recurrence script for 3 months from now.');
    ok($m->goto_ticket($next_id), "Recurrence ticket $next_id created for 3 months from now.");
    $m->text_like( qr/Set up recurring aperture maintenance/);
    $ticket = RT::Ticket->new(RT->SystemUser);
    ok($ticket->Load($next_id), "Loaded ticket $next_id");
    is($ticket->StartsObj->ISO(Time => 0), $three_months->ymd, 'Starts 3 months from now');
    $three_months->add( days => 3 );
    is($ticket->DueObj->ISO(Time => 0), $three_months->ymd, 'Due 3 days from 3 months from now');

    # a new ticket should be created even if there are existing tickets on the same day
    $tomorrow = DateTime->now->add( days => 1 );
    $next_id = $next_id + 1;
    ok(!(RT::Repeat::Ticket::Run->run('-date=' . $tomorrow->ymd)), 'Ran recurrence script for tomorrow.');
    ok($m->goto_ticket($next_id), "Recurrence ticket $next_id created for tomorrow.");
    $m->text_like( qr/Set up recurring aperture maintenance/);
    $ticket = RT::Ticket->new(RT->SystemUser);
    ok($ticket->Load($next_id), "Loaded ticket $next_id");
    is($ticket->StartsObj->ISO(Time => 0), $tomorrow->ymd, 'Starts tomorrow');
    $tomorrow->add( days => 3 );
    is($ticket->DueObj->ISO(Time => 0), $tomorrow->ymd, 'Due 3 days from tomorrow');

    $three_months = DateTime->now->add( months => 3 );
    $next_id = $next_id + 1;
    ok(!(RT::Repeat::Ticket::Run->run('-date=' . $three_months->ymd)), 'Ran recurrence script for 3 months from now.');
    ok($m->goto_ticket($next_id), "Recurrence ticket $next_id created for 3 months from now.");
    $m->text_like( qr/Set up recurring aperture maintenance/);
    $ticket = RT::Ticket->new(RT->SystemUser);
    ok($ticket->Load($next_id), "Loaded ticket $next_id");
    is($ticket->StartsObj->ISO(Time => 0), $three_months->ymd, 'Starts 3 months from now');
    $three_months->add( days => 3 );
    is($ticket->DueObj->ISO(Time => 0), $three_months->ymd, 'Due 3 days from 3 months from now');
}

sub run_tests{
    my ($baseurl, $m) = @_;

    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.";

    $m->submit_form_ok(
        {   form_name => 'TicketCreate',
            fields    => {
                'Subject'                         => 'Set up recurring aperture maintenance',
                'Content'                         => 'Perform work on portals once per day M - F',
                'repeat-enabled'                  => 1,
                'repeat-type'                     => 'daily',
                'repeat-details-daily'            => 'day',
                'repeat-details-daily-day'        => 1,
                'repeat-create-on-recurring-date' => 1,
                'repeat-coexistent-number'        => 0,
                'repeat-lead-time'                => 3,
                'repeat-start-date'               => DateTime->now->ymd,
            },
            button => 'SubmitTicket',
        },
        'Create'
    );

    $m->text_like( qr/Ticket\s(\d+)\screated in queue/);

    my ($daily_id) = $m->content =~ /Ticket\s(\d+)\screated in queue/;
    ok($daily_id, "Created ticket with id: $daily_id");

    # resolving the parent ticket should have no affect on creating new tickets
    my $ticket = RT::Ticket->new(RT->SystemUser);
    ok($ticket->Load($daily_id), "Loaded ticket $daily_id");
    ok($ticket->SetStatus('resolved'), "Ticket $daily_id resolved");

    return $daily_id;
}

done_testing;