6 use RT::Test tests => 17;
10 my $UpdateLastUpdated;
13 use_ok('RT::Action::LinearEscalate');
15 my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
16 ok $q && $q->id, 'loaded or created queue';
18 # rt-cron-tool uses Gecos name to get rt user, so we'd better create one
19 my $gecos = RT::Test->load_or_create_user(
21 Password => 'password',
22 Gecos => ($^O eq 'MSWin32') ? Win32::LoginName() : (getpwuid($<))[0],
24 ok $gecos && $gecos->id, 'loaded or created gecos user';
26 # get rid of all right permissions
27 $gecos->PrincipalObj->GrantRight( Right => 'SuperUser' );
30 my $user = RT::Test->load_or_create_user(
31 Name => 'user', Password => 'password',
33 ok $user && $user->id, 'loaded or created user';
35 $user->PrincipalObj->GrantRight( Right => 'SuperUser' );
36 my $current_user = RT::CurrentUser->new(RT->SystemUser);
37 ($id, $msg) = $current_user->Load($user->id);
38 ok( $id, "Got current user? $msg" );
41 $RecordTransaction = 0;
42 $UpdateLastUpdated = 1;
43 my $ticket2 = create_ticket_as_ok($current_user);
44 escalate_ticket_ok($ticket2);
45 ok( $ticket2->LastUpdatedBy != $user->id, "Set LastUpdated" );
46 ok( $ticket2->Transactions->Last->Type =~ /Create/i, "Did not record a transaction" );
48 $RecordTransaction = 1;
49 $UpdateLastUpdated = 1;
50 my $ticket1 = create_ticket_as_ok($current_user);
51 escalate_ticket_ok($ticket1);
52 ok( $ticket1->LastUpdatedBy != $user->id, "Set LastUpdated" );
53 ok( $ticket1->Transactions->Last->Type !~ /Create/i, "Recorded a transaction" );
55 $RecordTransaction = 0;
56 $UpdateLastUpdated = 0;
57 my $ticket3 = create_ticket_as_ok($current_user);
58 escalate_ticket_ok($ticket3);
59 ok( $ticket3->LastUpdatedBy == $user->id, "Did not set LastUpdated" );
60 ok( $ticket3->Transactions->Last->Type =~ /Create/i, "Did not record a transaction" );
62 sub create_ticket_as_ok {
65 my $created = RT::Date->new(RT->SystemUser);
66 $created->Unix(time() - ( 7 * 24 * 60**2 ));
67 my $due = RT::Date->new(RT->SystemUser);
68 $due->Unix(time() + ( 7 * 24 * 60**2 ));
70 my $ticket = RT::Ticket->new($user);
71 ($id, $msg) = $ticket->Create( Queue => $q->id,
72 Subject => "Escalation test",
77 ok($id, "Created ticket? ".$id);
78 $ticket->__Set( Field => 'Created',
79 Value => $created->ISO,
81 $ticket->__Set( Field => 'Due',
88 sub escalate_ticket_ok {
91 print "$RT::BinPath/rt-crontool --search RT::Search::FromSQL --search-arg \"id = @{[$id]}\" --action RT::Action::LinearEscalate --action-arg \"RecordTransaction:$RecordTransaction; UpdateLastUpdated:$UpdateLastUpdated\"\n";
92 print STDERR `$RT::BinPath/rt-crontool --search RT::Search::FromSQL --search-arg "id = @{[$id]}" --action RT::Action::LinearEscalate --action-arg "RecordTransaction:$RecordTransaction; UpdateLastUpdated:$UpdateLastUpdated"`;
94 $ticket->Load($id); # reload, because otherwise we get the cached value
95 ok( $ticket->Priority != 0, "Escalated ticket" );