1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 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 . ": " . $ticket->Subject);
$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 . ": " . $ticket->Subject);
$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' );
}
|