summaryrefslogtreecommitdiff
path: root/rt/t/web/reminder-permissions.t
blob: 6f204975993d95f5111d1764ff883bf55d593ee1 (plain)
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' );
}