import rt 3.8.7
[freeside.git] / rt / t / ticket / action_linear_escalate.t
1 #!/usr/bin/perl -w
2
3 use strict;
4 use warnings;
5
6 use RT;
7 use RT::Test tests => 17;
8
9 my ($id, $msg);
10 my $RecordTransaction;
11 my $UpdateLastUpdated;
12
13
14 use_ok('RT::Action::LinearEscalate');
15
16 my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
17 ok $q && $q->id, 'loaded or created queue';
18
19 # rt-cron-tool uses Gecos name to get rt user, so we'd better create one
20 my $gecos = RT::Test->load_or_create_user(
21     Name => 'gecos',
22     Password => 'password',
23     Gecos => ($^O eq 'MSWin32') ? Win32::LoginName() : (getpwuid($<))[0],
24 );
25 ok $gecos && $gecos->id, 'loaded or created gecos user';
26
27 # get rid of all right permissions
28 $gecos->PrincipalObj->GrantRight( Right => 'SuperUser' );
29
30
31 my $user = RT::Test->load_or_create_user(
32     Name => 'user', Password => 'password',
33 );
34 ok $user && $user->id, 'loaded or created user';
35
36 $user->PrincipalObj->GrantRight( Right => 'SuperUser' );
37 my $current_user = RT::CurrentUser->new($RT::SystemUser);
38 ($id, $msg) = $current_user->Load($user->id);
39 ok( $id, "Got current user? $msg" );
40
41 #defaults
42 $RecordTransaction = 0;
43 $UpdateLastUpdated = 1;
44 my $ticket2 = create_ticket_as_ok($current_user);
45 escalate_ticket_ok($ticket2);
46 ok( $ticket2->LastUpdatedBy != $user->id, "Set LastUpdated" );
47 ok( $ticket2->Transactions->Last->Type =~ /Create/i, "Did not record a transaction" );
48
49 $RecordTransaction = 1;
50 $UpdateLastUpdated = 1;
51 my $ticket1 = create_ticket_as_ok($current_user);
52 escalate_ticket_ok($ticket1);
53 ok( $ticket1->LastUpdatedBy != $user->id, "Set LastUpdated" );
54 ok( $ticket1->Transactions->Last->Type !~ /Create/i, "Recorded a transaction" );
55
56 $RecordTransaction = 0;
57 $UpdateLastUpdated = 0;
58 my $ticket3 = create_ticket_as_ok($current_user);
59 escalate_ticket_ok($ticket3);
60 ok( $ticket3->LastUpdatedBy == $user->id, "Did not set LastUpdated" );
61 ok( $ticket3->Transactions->Last->Type =~ /Create/i, "Did not record a transaction" );
62
63 1;
64
65
66 sub create_ticket_as_ok {
67     my $user = shift;
68
69     my $created = RT::Date->new($RT::SystemUser);
70     $created->Unix(time() - ( 7 * 24 * 60**2 ));
71     my $due = RT::Date->new($RT::SystemUser);
72     $due->Unix(time() + ( 7 * 24 * 60**2 ));
73
74     my $ticket = RT::Ticket->new($user);
75     ($id, $msg) = $ticket->Create( Queue => $q->id,
76                                    Subject => "Escalation test",
77                                    Priority => 0,
78                                    InitialPriority => 0,
79                                    FinalPriority => 50,
80                                  );
81     ok($id, "Created ticket? ".$id);
82     $ticket->__Set( Field => 'Created',
83                     Value => $created->ISO,
84                   );
85     $ticket->__Set( Field => 'Due',
86                     Value => $due->ISO,
87                   );
88
89     return $ticket;
90 }
91
92 sub escalate_ticket_ok {
93     my $ticket = shift;
94     my $id = $ticket->id;
95     print "$RT::BinPath/rt-crontool --search RT::Search::FromSQL --search-arg \"id = @{[$id]}\" --action RT::Action::LinearEscalate --action-arg \"RecordTransaction:$RecordTransaction; UpdateLastUpdated:$UpdateLastUpdated\"\n";
96     print STDERR `$RT::BinPath/rt-crontool --search RT::Search::FromSQL --search-arg "id = @{[$id]}" --action RT::Action::LinearEscalate --action-arg "RecordTransaction:$RecordTransaction; UpdateLastUpdated:$UpdateLastUpdated"`;
97
98     $ticket->Load($id);     # reload, because otherwise we get the cached value
99     ok( $ticket->Priority != 0, "Escalated ticket" );
100 }