rt 4.2.15
[freeside.git] / rt / t / web / reminder-permissions.t
1 use strict;
2 use warnings;
3 use RT::Test tests => 40;
4
5 my $user_a = RT::Test->load_or_create_user(
6     Name     => 'user_a',
7     Password => 'password',
8 );
9
10 ok( $user_a && $user_a->id, 'created user_a' );
11 ok(
12     RT::Test->add_rights(
13         {
14             Principal => $user_a,
15             Right     => [qw/SeeQueue CreateTicket ShowTicket OwnTicket/]
16         },
17     ),
18     'add basic rights for user_a'
19 );
20
21 ok(
22     RT::Test->add_rights(
23         {
24             Principal => 'Owner',
25             Right     => [qw/ModifyTicket/],
26         },
27     ),
28     'add basic rights for owner'
29 );
30
31 my $ticket = RT::Test->create_ticket(
32     Subject => 'test reminder permission',
33     Queue   => 'General',
34 );
35
36 ok( $ticket->id, 'created a ticket' );
37
38 my ( $baseurl, $m ) = RT::Test->started_ok;
39 $m->login;
40
41 my ( $root_reminder_id, $user_a_reminder_id );
42 diag "create two reminders, with owner root and user_a, respectively";
43 {
44     $m->goto_ticket( $ticket->id );
45     $m->text_contains( 'New reminder:', 'can create a new reminder' );
46     $m->form_name('UpdateReminders');
47     $m->field( 'NewReminder-Subject' => "root reminder" );
48     $m->submit;
49     $m->text_contains( "Reminder 'root reminder': Created",
50         'created root reminder' );
51
52     $m->form_name('UpdateReminders');
53     $m->field( 'NewReminder-Subject' => "user_a reminder", );
54     $m->field( 'NewReminder-Owner'   => $user_a->id, );
55     $m->submit;
56     $m->text_contains( "Reminder 'user_a reminder': Created",
57         'created user_a reminder' );
58
59     my $reminders = RT::Reminders->new($user_a);
60     $reminders->Ticket( $ticket->id );
61     my $col = $reminders->Collection;
62     while ( my $c = $col->Next ) {
63         if ( $c->Subject eq 'root reminder' ) {
64             $root_reminder_id = $c->id;
65         }
66         elsif ( $c->Subject eq 'user_a reminder' ) {
67             $user_a_reminder_id = $c->id;
68         }
69     }
70 }
71
72 diag "check root_a can update user_a reminder but not root reminder";
73 my $m_a = RT::Test::Web->new;
74 {
75     ok( $m_a->login( user_a => 'password' ), 'logged in as user_a' );
76     $m_a->goto_ticket( $ticket->id );
77     $m_a->content_lacks( 'New reminder:', 'can not create a new reminder' );
78     $m_a->content_contains( 'root reminder',   'can see root reminder' );
79     $m_a->content_contains( 'user_a reminder', 'can see user_a reminder' );
80     $m_a->content_like(
81 qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!,
82         "root reminder checkbox is disabled"
83     );
84
85     $m_a->form_name('UpdateReminders');
86     $m_a->tick( "Complete-Reminder-$user_a_reminder_id" => 1 );
87     $m_a->submit;
88     $m_a->text_contains(
89         "Reminder 'user_a reminder': Status changed from 'open' to 'resolved'",
90         'complete user_a reminder' );
91
92     $m_a->follow_link_ok( { id => 'page-reminders' } );
93     $m_a->title_is("Reminders for ticket #" . $ticket->id . ": " . $ticket->Subject);
94     $m_a->content_contains( 'root reminder',   'can see root reminder' );
95     $m_a->content_contains( 'user_a reminder', 'can see user_a reminder' );
96     $m_a->content_lacks( 'New reminder:', 'can not create a new reminder' );
97     $m_a->content_like(
98 qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!,
99         "root reminder checkbox is disabled"
100     );
101
102     $m_a->form_name('UpdateReminders');
103     $m_a->untick( "Complete-Reminder-$user_a_reminder_id", 1 );
104     $m_a->submit;
105     $m_a->text_contains(
106         "Reminder 'user_a reminder': Status changed from 'resolved' to 'open'",
107         'reopen user_a reminder'
108     );
109
110 }
111
112 diag "set ticket owner to user_a to let user_a grant modify ticket right";
113 {
114     $ticket->SetOwner( $user_a->id );
115
116     $m_a->goto_ticket( $ticket->id );
117     $m_a->content_contains( 'New reminder:', 'can create a new reminder' );
118     $m_a->content_like(
119 qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!,
120         "root reminder checkbox is still disabled"
121     );
122     $m_a->form_name('UpdateReminders');
123     $m_a->field( 'NewReminder-Subject' => "user_a from display reminder" );
124     $m_a->submit;
125     $m_a->text_contains( "Reminder 'user_a from display reminder': Created",
126         'created user_a from display reminder' );
127
128     $m_a->follow_link_ok( { id => 'page-reminders' } );
129     $m_a->title_is("Reminders for ticket #" . $ticket->id . ": " . $ticket->Subject);
130     $m_a->content_contains( 'New reminder:', 'can create a new reminder' );
131     $m_a->content_like(
132 qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!,
133         "root reminder checkbox is still disabled"
134     );
135     $m_a->form_name('UpdateReminders');
136     $m_a->field( 'NewReminder-Subject' => "user_a from reminders reminder" );
137     $m_a->submit;
138     $m_a->text_contains( "Reminder 'user_a from reminders reminder': Created",
139         'created user_a from reminders reminder' );
140 }
141
142 diag "grant user_a with ModifyTicket globally";
143 {
144     ok(
145         RT::Test->add_rights(
146             {
147                 Principal => $user_a,
148                 Right     => [qw/ModifyTicket/],
149             },
150         ),
151         'add ModifyTicket rights to user_a'
152     );
153
154     $m_a->goto_ticket( $ticket->id );
155     $m_a->content_unlike(
156 qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!,
157         "root reminder checkbox is enabled"
158     );
159     $m_a->form_name('UpdateReminders');
160     $m_a->tick( "Complete-Reminder-$root_reminder_id" => 1 );
161     $m_a->submit;
162     $m_a->text_contains(
163         "Reminder 'root reminder': Status changed from 'open' to 'resolved'",
164         'complete root reminder' );
165
166     $m_a->follow_link_ok( { id => 'page-reminders' } );
167     $m_a->content_unlike(
168 qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!,
169         "root reminder checkbox is enabled"
170     );
171     $m_a->form_name('UpdateReminders');
172     $m_a->untick( "Complete-Reminder-$root_reminder_id" => 1 );
173     $m_a->submit;
174     $m_a->text_contains(
175         "Reminder 'root reminder': Status changed from 'resolved' to 'open'",
176         'reopen root reminder' );
177 }
178