rt 4.2.14 (#13852)
[freeside.git] / rt / t / api / ticket.t
index 2ca0997..cfba3e9 100644 (file)
@@ -2,17 +2,17 @@
 use strict;
 use warnings;
 use RT;
-use RT::Test tests => 87;
+use RT::Test tests => undef;
 
 
 {
 
 use_ok ('RT::Queue');
-ok(my $testqueue = RT::Queue->new($RT::SystemUser));
+ok(my $testqueue = RT::Queue->new(RT->SystemUser));
 ok($testqueue->Create( Name => 'ticket tests'));
 isnt($testqueue->Id , 0);
 use_ok('RT::CustomField');
-ok(my $testcf = RT::CustomField->new($RT::SystemUser));
+ok(my $testcf = RT::CustomField->new(RT->SystemUser));
 my ($ret, $cmsg) = $testcf->Create( Name => 'selectmulti',
                     Queue => $testqueue->id,
                                Type => 'SelectMultiple');
@@ -34,10 +34,10 @@ is($testcf->Values->Count , 3);
 
 use_ok('RT::Ticket');
 
-my $u = RT::User->new($RT::SystemUser);
+my $u = RT::User->new(RT->SystemUser);
 $u->Load("root");
 ok ($u->Id, "Found the root user");
-ok(my $t = RT::Ticket->new($RT::SystemUser));
+ok(my $t = RT::Ticket->new(RT->SystemUser));
 ok(my ($id, $msg) = $t->Create( Queue => $testqueue->Id,
                Subject => 'Testing',
                Owner => $u->Id
@@ -56,13 +56,13 @@ ok(my ($cfdv, $cfdm) = $t->DeleteCustomFieldValue(Field => $testcf->Id,
 isnt ($cfdv , 0, "Deleted a custom field value: $cfdm");
 is($t->CustomFieldValues($testcf->Id)->Count , 0);
 
-ok(my $t2 = RT::Ticket->new($RT::SystemUser));
+ok(my $t2 = RT::Ticket->new(RT->SystemUser));
 ok($t2->Load($id));
 is($t2->Subject, 'Testing');
 is($t2->QueueObj->Id, $testqueue->id);
 is($t2->OwnerObj->Id, $u->Id);
 
-my $t3 = RT::Ticket->new($RT::SystemUser);
+my $t3 = RT::Ticket->new(RT->SystemUser);
 my ($id3, $msg3) = $t3->Create( Queue => $testqueue->Id,
                                 Subject => 'Testing',
                                 Owner => $u->Id);
@@ -93,33 +93,32 @@ ok(require RT::Ticket, "Loading the RT::Ticket library");
 
 {
 
-my $t = RT::Ticket->new($RT::SystemUser);
+my $t = RT::Ticket->new(RT->SystemUser);
 
 ok( $t->Create(Queue => 'General', Due => '2002-05-21 00:00:00', ReferredToBy => 'http://www.cpan.org', RefersTo => 'http://fsck.com', Subject => 'This is a subject'), "Ticket Created");
 
 ok ( my $id = $t->Id, "Got ticket id");
 like ($t->RefersTo->First->Target , qr/fsck.com/, "Got refers to");
 like ($t->ReferredToBy->First->Base , qr/cpan.org/, "Got referredtoby");
-is ($t->ResolvedObj->Unix, 0, "It hasn't been resolved - ". $t->ResolvedObj->Unix);
+ok (!$t->ResolvedObj->IsSet, "It hasn't been resolved");
 
 
 }
 
 {
 
-my $ticket = RT::Ticket->new($RT::SystemUser);
+my $ticket = RT::Ticket->new(RT->SystemUser);
 my ($id, $msg) = $ticket->Create(Subject => "Foo",
-                Owner => $RT::SystemUser->Id,
+                Owner => RT->SystemUser->Id,
                 Status => 'open',
                 Requestor => ['jesse@example.com'],
                 Queue => '1'
                 );
 ok ($id, "Ticket $id was created");
-ok(my $group = RT::Group->new($RT::SystemUser));
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Requestor'));
+ok(my $group = $ticket->RoleGroup('Requestor'));
 ok ($group->Id, "Found the requestors object for this ticket");
 
-ok(my $jesse = RT::User->new($RT::SystemUser), "Creating a jesse rt::user");
+ok(my $jesse = RT::User->new(RT->SystemUser), "Creating a jesse rt::user");
 $jesse->LoadByEmail('jesse@example.com');
 ok($jesse->Id,  "Found the jesse rt user");
 
@@ -127,7 +126,7 @@ ok($jesse->Id,  "Found the jesse rt user");
 ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $jesse->PrincipalId), "The ticket actually has jesse at fsck.com as a requestor");
 ok (my ($add_id, $add_msg) = $ticket->AddWatcher(Type => 'Requestor', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor");
 ok ($add_id, "Add succeeded: ($add_msg)");
-ok(my $bob = RT::User->new($RT::SystemUser), "Creating a bob rt::user");
+ok(my $bob = RT::User->new(RT->SystemUser), "Creating a bob rt::user");
 $bob->LoadByEmail('bob@fsck.com');
 ok($bob->Id,  "Found the bob rt user");
 ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $bob->PrincipalId), "The ticket actually has bob at fsck.com as a requestor");
@@ -135,23 +134,20 @@ ok ( ($add_id, $add_msg) = $ticket->DeleteWatcher(Type =>'Requestor', Email => '
 ok (!$ticket->IsWatcher(Type => 'Requestor', PrincipalId => $bob->PrincipalId), "The ticket no longer has bob at fsck.com as a requestor");
 
 
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Cc'));
+$group = $ticket->RoleGroup('Cc');
 ok ($group->Id, "Found the cc object for this ticket");
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'AdminCc'));
+$group = $ticket->RoleGroup('AdminCc');
 ok ($group->Id, "Found the AdminCc object for this ticket");
-$group = RT::Group->new($RT::SystemUser);
-ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Owner'));
+$group = $ticket->RoleGroup('Owner');
 ok ($group->Id, "Found the Owner object for this ticket");
-ok($group->HasMember($RT::SystemUser->UserObj->PrincipalObj), "the owner group has the member 'RT_System'");
+ok($group->HasMember(RT->SystemUser->UserObj->PrincipalObj), "the owner group has the member 'RT_System'");
 
 
 }
 
 {
 
-my $t = RT::Ticket->new($RT::SystemUser);
+my $t = RT::Ticket->new(RT->SystemUser);
 ok($t->Create(Queue => 'general', Subject => 'SquelchTest', SquelchMailTo => 'nobody@example.com'));
 
 my @returned = $t->SquelchMailTo();
@@ -183,21 +179,34 @@ ok($ret, "Removed nobody as a squelched recipient - ".$msg);
 @returned = $t->SquelchMailTo();
 is($#returned, -1, "The ticket has no squelched recipients". join(',',@returned));
 
+@returned = $t->SquelchMailTo('somebody@example.com','nobody@example.com');
+is($#returned, 1, "The ticket has two squelched recipients, multiple args");
 
+@returned = $t->SquelchMailTo('third@example.com');
+is($#returned, 2, "The ticket has three squelched recipients, additive calls");
+
+my $t2 = RT::Ticket->new(RT->SystemUser);
+ok($t2->Create(Queue => 'general', Subject => 'SquelchTest', SquelchMailTo => [ 'nobody@example.com', 'test@example.com' ]));
+my @returned2 = $t2->SquelchMailTo();
+is($#returned2,1, "The ticket has two squelched recipients");
+
+$t2->SquelchMailTo('test@example.com');
+my @returned3 = $t2->SquelchMailTo();
+is($#returned2,1, "The ticket still has two squelched recipients, no duplicate squelchers");
 
 }
 
 {
 
-my $t1 = RT::Ticket->new($RT::SystemUser);
+my $t1 = RT::Ticket->new(RT->SystemUser);
 $t1->Create ( Subject => 'Merge test 1', Queue => 'general', Requestor => 'merge1@example.com');
 my $t1id = $t1->id;
-my $t2 = RT::Ticket->new($RT::SystemUser);
+my $t2 = RT::Ticket->new(RT->SystemUser);
 $t2->Create ( Subject => 'Merge test 2', Queue => 'general', Requestor => 'merge2@example.com');
 my $t2id = $t2->id;
 my ($msg, $val) = $t1->MergeInto($t2->id);
 ok ($msg,$val);
-$t1 = RT::Ticket->new($RT::SystemUser);
+$t1 = RT::Ticket->new(RT->SystemUser);
 is ($t1->id, undef, "ok. we've got a blank ticket1");
 $t1->Load($t1id);
 
@@ -209,33 +218,76 @@ is ($t1->Requestors->MembersObj->Count, 2);
 
 }
 
+diag "Test owner changes";
 {
 
-my $root = RT::User->new($RT::SystemUser);
+my $root = RT::User->new(RT->SystemUser);
 $root->Load('root');
 ok ($root->Id, "Loaded the root user");
-my $t = RT::Ticket->new($RT::SystemUser);
-$t->Load(1);
-$t->SetOwner('root');
+my $t = RT::Ticket->new(RT->SystemUser);
+my ($val, $msg) = $t->Create( Subject => 'Owner test 1', Queue => 'General');
+ok( $t->Id, "Created a new ticket with id $val: $msg");
+
+($val, $msg) = $t->SetOwner('bogususer');
+ok( !$val, "Can't set owner to bogus user");
+is( $msg, "That user does not exist", "Got message: $msg");
+
+($val, $msg) = $t->SetOwner('root');
 is ($t->OwnerObj->Name, 'root' , "Root owns the ticket");
+
+($val, $msg) = $t->SetOwner('root');
+ok( !$val, "User already owns ticket");
+is( $msg, "That user already owns that ticket", "Got message: $msg");
+
 $t->Steal();
-is ($t->OwnerObj->id, $RT::SystemUser->id , "SystemUser owns the ticket");
-my $txns = RT::Transactions->new($RT::SystemUser);
+is ($t->OwnerObj->id, RT->SystemUser->id , "SystemUser owns the ticket");
+my $txns = RT::Transactions->new(RT->SystemUser);
 $txns->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$txns->Limit(FIELD => 'ObjectId', VALUE => '1');
+$txns->Limit(FIELD => 'ObjectId', VALUE => $t->Id);
 $txns->Limit(FIELD => 'ObjectType', VALUE => 'RT::Ticket');
 $txns->Limit(FIELD => 'Type', OPERATOR => '!=',  VALUE => 'EmailRecord');
 
 my $steal  = $txns->First;
 is($steal->OldValue , $root->Id , "Stolen from root");
-is($steal->NewValue , $RT::SystemUser->Id , "Stolen by the systemuser");
+is($steal->NewValue , RT->SystemUser->Id , "Stolen by the systemuser");
+
+ok(my $user1 = RT::User->new(RT->SystemUser), "Creating a user1 rt::user");
+($val, $msg) = $user1->Create(Name => 'User1', EmailAddress => 'user1@example.com');
+ok( $val, "Created new user with id: $val");
+ok( $user1->Id,  "Found the user1 rt user");
+
+my $t1 = RT::Ticket->new($user1);
+($val, $msg) = $t1->Load($t->Id);
+ok( $t1->Id, "Loaded ticket with id $val");
 
+($val, $msg) = $t1->SetOwner('root');
+ok( !$val, "user1 can't set owner to root: $msg");
+is ($t->OwnerObj->id, RT->SystemUser->id , "SystemUser still owns ticket " . $t1->Id);
+
+my $queue = RT::Queue->new(RT->SystemUser);
+$queue->Load("General");
+
+($val, $msg) = $user1->PrincipalObj->GrantRight(
+         Object => $queue, Right => 'ModifyTicket'
+     );
+
+($val, $msg) = $t1->SetOwner('root');
+ok( !$val, "With ModifyTicket user1 can't set owner to root: $msg");
+is ($t->OwnerObj->id, RT->SystemUser->id , "SystemUser still owns ticket " . $t1->Id);
+
+($val, $msg) = $user1->PrincipalObj->GrantRight(
+         Object => $queue, Right => 'ReassignTicket'
+     );
+
+($val, $msg) = $t1->SetOwner('root');
+ok( $val, "With ReassignTicket user1 reassigned ticket " . $t1->Id . " to root: $msg");
+is ($t1->OwnerObj->Name, 'root' , "Root owns ticket " . $t1->Id);
 
 }
 
 {
 
-my $tt = RT::Ticket->new($RT::SystemUser);
+my $tt = RT::Ticket->new(RT->SystemUser);
 my ($id, $tid, $msg)= $tt->Create(Queue => 'general',
             Subject => 'test');
 ok($id, $msg);
@@ -250,8 +302,45 @@ like($msg, qr/resolved/i, "Status message is correct");
 ($id, $msg) = $tt->SetStatus('resolved');
 ok(!$id,$msg);
 
+my $dep = RT::Ticket->new( RT->SystemUser );
+my ( $dep_id, undef, $dep_msg ) = $dep->Create(
+    Queue          => 'general',
+    Subject        => 'dep ticket',
+    'DependedOnBy' => $tt->id,
+);
+ok( $dep->id, $dep_msg );
+
+($id, $msg) = $tt->SetStatus('rejected');
+ok( $id, $msg );
 
+}
 
+diag("Test ticket types with different cases");
+{
+    my $t = RT::Ticket->new(RT->SystemUser);
+    my ($ok) = $t->Create(
+        Queue => 'general',
+        Subject => 'type test',
+        Type => 'Ticket',
+    );
+    ok($ok, "Ticket allows passing upper-case Ticket as type during Create");
+    is($t->Type, "ticket", "Ticket type is lowercased during create");
+
+    ($ok) = $t->SetType("REMINDER");
+    ok($ok, "Ticket allows passing upper-case REMINDER to SetType");
+    is($t->Type, "reminder", "Ticket type is lowercased during set");
+
+    ($ok) = $t->SetType("OTHER");
+    ok($ok, "Allows setting Type to non-RT types");
+    is($t->Type, "OTHER", "Non-RT types are case-insensitive");
+
+    ($ok) = $t->Create(
+        Queue => 'general',
+        Subject => 'type test',
+        Type => 'Approval',
+    );
+    ok($ok, "Tickets can be created with an upper-case Approval type");
+    is($t->Type, "approval", "Approvals, the third and final internal type, are also lc'd during Create");
 }
 
-1;
+done_testing;