first pass RT4 merge, RT#13852
[freeside.git] / rt / t / api / has_rights.t
diff --git a/rt/t/api/has_rights.t b/rt/t/api/has_rights.t
new file mode 100644 (file)
index 0000000..990fc01
--- /dev/null
@@ -0,0 +1,43 @@
+use RT::Test nodata => 1, tests => 9;
+
+use strict;
+use warnings;
+
+my $queue = RT::Test->load_or_create_queue( Name => 'A' );
+ok $queue && $queue->id, 'loaded or created queue_a';
+my $qid = $queue->id;
+
+my $user = RT::Test->load_or_create_user(
+    Name => 'user',
+    Password => 'password',
+    EmailAddress => 'test@example.com',
+);
+ok $user && $user->id, 'loaded or created user';
+
+{
+    cleanup();
+    RT::Test->set_rights(
+        { Principal => 'Everyone', Right => [qw(SeeQueue)] },
+        { Principal => 'Cc',       Right => [qw(ShowTicket)] },
+    );
+    my ($t) = RT::Test->create_tickets(
+        { Queue => $queue->id },
+        { },
+    );
+    my $rights = $user->PrincipalObj->HasRights( Object => $t );
+    is_deeply( $rights, { SeeQueue => 1 }, 'got it' );
+
+    ($t) = RT::Test->create_tickets(
+        { Queue => $queue->id },
+        { Cc => $user->EmailAddress },
+    );
+    ok($t->Cc->HasMember( $user->id ), 'user is cc');
+    $rights = $user->PrincipalObj->HasRights( Object => $t );
+    is_deeply( $rights, { SeeQueue => 1, ShowTicket => 1 }, 'got it' )
+}
+
+sub cleanup {
+    RT::Test->delete_tickets( "Queue = $qid" );
+    RT::Test->delete_queue_watchers( $queue );
+}; 
+