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!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!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!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!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!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!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' ); }