diff options
Diffstat (limited to 'rt/t/web/reminder-permissions.t')
-rw-r--r-- | rt/t/web/reminder-permissions.t | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/rt/t/web/reminder-permissions.t b/rt/t/web/reminder-permissions.t new file mode 100644 index 0000000..dd859cd --- /dev/null +++ b/rt/t/web/reminder-permissions.t @@ -0,0 +1,178 @@ +use strict; +use warnings; +use RT::Test tests => 40; + +my $user_a = RT::Test->load_or_create_user( + Name => 'user_a', + Password => 'password', +); + +ok( $user_a && $user_a->id, 'created user_a' ); +ok( + RT::Test->add_rights( + { + Principal => $user_a, + Right => [qw/SeeQueue CreateTicket ShowTicket OwnTicket/] + }, + ), + 'add basic rights for user_a' +); + +ok( + RT::Test->add_rights( + { + Principal => 'Owner', + Right => [qw/ModifyTicket/], + }, + ), + 'add basic rights for owner' +); + +my $ticket = RT::Test->create_ticket( + Subject => 'test reminder permission', + Queue => 'General', +); + +ok( $ticket->id, 'created a ticket' ); + +my ( $baseurl, $m ) = RT::Test->started_ok; +$m->login; + +my ( $root_reminder_id, $user_a_reminder_id ); +diag "create two reminders, with owner root and user_a, respectively"; +{ + $m->goto_ticket( $ticket->id ); + $m->text_contains( 'New reminder:', 'can create a new reminder' ); + $m->form_name('UpdateReminders'); + $m->field( 'NewReminder-Subject' => "root reminder" ); + $m->submit; + $m->text_contains( "Reminder 'root reminder': Created", + 'created root reminder' ); + + $m->form_name('UpdateReminders'); + $m->field( 'NewReminder-Subject' => "user_a reminder", ); + $m->field( 'NewReminder-Owner' => $user_a->id, ); + $m->submit; + $m->text_contains( "Reminder 'user_a reminder': Created", + 'created user_a reminder' ); + + my $reminders = RT::Reminders->new($user_a); + $reminders->Ticket( $ticket->id ); + my $col = $reminders->Collection; + while ( my $c = $col->Next ) { + if ( $c->Subject eq 'root reminder' ) { + $root_reminder_id = $c->id; + } + elsif ( $c->Subject eq 'user_a reminder' ) { + $user_a_reminder_id = $c->id; + } + } +} + +diag "check root_a can update user_a reminder but not root reminder"; +my $m_a = RT::Test::Web->new; +{ + ok( $m_a->login( user_a => 'password' ), 'logged in as user_a' ); + $m_a->goto_ticket( $ticket->id ); + $m_a->content_lacks( 'New reminder:', 'can not create a new reminder' ); + $m_a->content_contains( 'root reminder', 'can see root reminder' ); + $m_a->content_contains( 'user_a reminder', 'can see user_a reminder' ); + $m_a->content_like( +qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!, + "root reminder checkbox is disabled" + ); + + $m_a->form_name('UpdateReminders'); + $m_a->tick( "Complete-Reminder-$user_a_reminder_id" => 1 ); + $m_a->submit; + $m_a->text_contains( + "Reminder 'user_a reminder': Status changed from 'open' to 'resolved'", + 'complete user_a reminder' ); + + $m_a->follow_link_ok( { id => 'page-reminders' } ); + $m_a->title_is( "Reminders for ticket #" . $ticket->id ); + $m_a->content_contains( 'root reminder', 'can see root reminder' ); + $m_a->content_contains( 'user_a reminder', 'can see user_a reminder' ); + $m_a->content_lacks( 'New reminder:', 'can not create a new reminder' ); + $m_a->content_like( +qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!, + "root reminder checkbox is disabled" + ); + + $m_a->form_name('UpdateReminders'); + $m_a->untick( "Complete-Reminder-$user_a_reminder_id", 1 ); + $m_a->submit; + $m_a->text_contains( + "Reminder 'user_a reminder': Status changed from 'resolved' to 'open'", + 'reopen user_a reminder' + ); + +} + +diag "set ticket owner to user_a to let user_a grant modify ticket right"; +{ + $ticket->SetOwner( $user_a->id ); + + $m_a->goto_ticket( $ticket->id ); + $m_a->content_contains( 'New reminder:', 'can create a new reminder' ); + $m_a->content_like( +qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!, + "root reminder checkbox is still disabled" + ); + $m_a->form_name('UpdateReminders'); + $m_a->field( 'NewReminder-Subject' => "user_a from display reminder" ); + $m_a->submit; + $m_a->text_contains( "Reminder 'user_a from display reminder': Created", + 'created user_a from display reminder' ); + + $m_a->follow_link_ok( { id => 'page-reminders' } ); + $m_a->title_is( "Reminders for ticket #" . $ticket->id ); + $m_a->content_contains( 'New reminder:', 'can create a new reminder' ); + $m_a->content_like( +qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!, + "root reminder checkbox is still disabled" + ); + $m_a->form_name('UpdateReminders'); + $m_a->field( 'NewReminder-Subject' => "user_a from reminders reminder" ); + $m_a->submit; + $m_a->text_contains( "Reminder 'user_a from reminders reminder': Created", + 'created user_a from reminders reminder' ); +} + +diag "grant user_a with ModifyTicket globally"; +{ + ok( + RT::Test->add_rights( + { + Principal => $user_a, + Right => [qw/ModifyTicket/], + }, + ), + 'add ModifyTicket rights to user_a' + ); + + $m_a->goto_ticket( $ticket->id ); + $m_a->content_unlike( +qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!, + "root reminder checkbox is enabled" + ); + $m_a->form_name('UpdateReminders'); + $m_a->tick( "Complete-Reminder-$root_reminder_id" => 1 ); + $m_a->submit; + $m_a->text_contains( + "Reminder 'root reminder': Status changed from 'open' to 'resolved'", + 'complete root reminder' ); + + $m_a->follow_link_ok( { id => 'page-reminders' } ); + $m_a->content_unlike( +qr!<input[^/]+name="Complete-Reminder-$root_reminder_id"[^/]+disabled="disabled"!, + "root reminder checkbox is enabled" + ); + $m_a->form_name('UpdateReminders'); + $m_a->untick( "Complete-Reminder-$root_reminder_id" => 1 ); + $m_a->submit; + $m_a->text_contains( + "Reminder 'root reminder': Status changed from 'resolved' to 'open'", + 'reopen root reminder' ); +} + |