RT 4.0.13
[freeside.git] / rt / t / ticket / add-watchers.t
1 use RT::Test nodata => 1, tests => 32;
2
3 use strict;
4 use warnings;
5
6 use RT::Queue;
7 use RT::User;
8 use RT::Group;
9 use RT::Ticket;
10 use RT::CurrentUser;
11
12
13 # clear all global right
14 my $acl = RT::ACL->new(RT->SystemUser);
15 $acl->Limit( FIELD => 'RightName', OPERATOR => '!=', VALUE => 'SuperUser' );
16 $acl->LimitToObject( RT->System );
17 while( my $ace = $acl->Next ) {
18         $ace->Delete;
19 }
20
21 # create new queue to be sure we do not mess with rights
22 my $queue = RT::Queue->new(RT->SystemUser);
23 my ($queue_id) = $queue->Create( Name => 'watcher tests '.$$);
24 ok( $queue_id, 'queue created for watcher tests' );
25
26 # new privileged user to check rights
27 my $user = RT::User->new( RT->SystemUser );
28 my ($user_id) = $user->Create( Name => 'watcher'.$$,
29                            EmailAddress => "watcher$$".'@localhost',
30                            Privileged => 1,
31                            Password => 'qwe123',
32                          );
33 my $cu= RT::CurrentUser->new($user);
34
35 # make sure user can see tickets in the queue
36 my $principal = $user->PrincipalObj;
37 ok( $principal, "principal loaded" );
38 $principal->GrantRight( Right => 'ShowTicket', Object => $queue );
39 $principal->GrantRight( Right => 'SeeQueue'  , Object => $queue );
40
41 ok(  $user->HasRight( Right => 'SeeQueue',     Object => $queue ), "user can see queue" );
42 ok(  $user->HasRight( Right => 'ShowTicket',   Object => $queue ), "user can show queue tickets" );
43 ok( !$user->HasRight( Right => 'ModifyTicket', Object => $queue ), "user can't modify queue tickets" );
44 ok( !$user->HasRight( Right => 'Watch',        Object => $queue ), "user can't watch queue tickets" );
45
46 my $ticket = RT::Ticket->new( RT->SystemUser );
47 my ($rv, $msg) = $ticket->Create( Subject => 'watcher tests', Queue => $queue->Name );
48 ok( $ticket->id, "ticket created" );
49
50 my $ticket2 = RT::Ticket->new( $cu );
51 $ticket2->Load( $ticket->id );
52 ok( $ticket2->Subject, "ticket load by user" );
53
54 # user can add self to ticket only after getting Watch right
55 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
56 ok( !$rv, "user can't add self as Cc" );
57 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
58 ok( !$rv, "user can't add self as Requestor" );
59 $principal->GrantRight( Right => 'Watch'  , Object => $queue );
60 ok(  $user->HasRight( Right => 'Watch',        Object => $queue ), "user can watch queue tickets" );
61 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
62 ok(  $rv, "user can add self as Cc by PrincipalId" );
63 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
64 ok(  $rv, "user can add self as Requestor by PrincipalId" );
65
66 # remove user and try adding with Email address
67 ($rv, $msg) = $ticket->DeleteWatcher( Type => 'Cc',        PrincipalId => $user->PrincipalId );
68 ok( $rv, "watcher removed by PrincipalId" );
69 ($rv, $msg) = $ticket->DeleteWatcher( Type => 'Requestor', Email => $user->EmailAddress );
70 ok( $rv, "watcher removed by Email" );
71
72 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', Email => $user->EmailAddress );
73 ok(  $rv, "user can add self as Cc by Email" );
74 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', Email => $user->EmailAddress );
75 ok(  $rv, "user can add self as Requestor by Email" );
76
77 # remove user and try adding by username
78 # This worked in 3.6 and is a regression in 3.8
79 ($rv, $msg) = $ticket->DeleteWatcher( Type => 'Cc', Email => $user->EmailAddress );
80 ok( $rv, "watcher removed by Email" );
81 ($rv, $msg) = $ticket->DeleteWatcher( Type => 'Requestor', Email => $user->EmailAddress );
82 ok( $rv, "watcher removed by Email" );
83
84 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Cc', Email => $user->Name );
85 ok(  $rv, "user can add self as Cc by username" );
86 ($rv, $msg) = $ticket2->AddWatcher( Type => 'Requestor', Email => $user->Name );
87 ok(  $rv, "user can add self as Requestor by username" );
88
89 # Queue watcher tests
90 $principal->RevokeRight( Right => 'Watch'  , Object => $queue );
91 ok( !$user->HasRight( Right => 'Watch',        Object => $queue ), "user queue watch right revoked" );
92
93 my $queue2 = RT::Queue->new( $cu );
94 ($rv, $msg) = $queue2->Load( $queue->id );
95 ok( $rv, "user loaded queue" );
96
97 # user can add self to queue only after getting Watch right
98 ($rv, $msg) = $queue2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
99 ok( !$rv, "user can't add self as Cc" );
100 ($rv, $msg) = $queue2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
101 ok( !$rv, "user can't add self as Requestor" );
102 $principal->GrantRight( Right => 'Watch'  , Object => $queue );
103 ok(  $user->HasRight( Right => 'Watch',        Object => $queue ), "user can watch queue queues" );
104 ($rv, $msg) = $queue2->AddWatcher( Type => 'Cc', PrincipalId => $user->PrincipalId );
105 ok(  $rv, "user can add self as Cc by PrincipalId" );
106 ($rv, $msg) = $queue2->AddWatcher( Type => 'Requestor', PrincipalId => $user->PrincipalId );
107 ok(  $rv, "user can add self as Requestor by PrincipalId" );
108
109 # remove user and try adding with Email address
110 ($rv, $msg) = $queue->DeleteWatcher( Type => 'Cc',        PrincipalId => $user->PrincipalId );
111 ok( $rv, "watcher removed by PrincipalId" );
112 ($rv, $msg) = $queue->DeleteWatcher( Type => 'Requestor', Email => $user->EmailAddress );
113 ok( $rv, "watcher removed by Email" );
114
115 ($rv, $msg) = $queue2->AddWatcher( Type => 'Cc', Email => $user->EmailAddress );
116 ok(  $rv, "user can add self as Cc by Email" );
117 ($rv, $msg) = $queue2->AddWatcher( Type => 'Requestor', Email => $user->EmailAddress );
118 ok(  $rv, "user can add self as Requestor by Email" );
119