6 use RT::Test nodata => 1, tests => 105;
8 my $queue = RT::Test->load_or_create_queue( Name => 'Regression' );
9 ok $queue && $queue->id, 'loaded or created queue';
11 my $user_a = RT::Test->load_or_create_user(
12 Name => 'user_a', Password => 'password',
14 ok $user_a && $user_a->id, 'loaded or created user';
16 my $user_b = RT::Test->load_or_create_user(
17 Name => 'user_b', Password => 'password',
19 ok $user_b && $user_b->id, 'loaded or created user';
21 my ($baseurl, $agent_a) = RT::Test->started_ok;
23 ok( RT::Test->set_rights(
24 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket ReplyToTicket)] },
25 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
28 ok $agent_a->login('user_a', 'password'), 'logged in as user A';
30 diag "current user has no right to own, nobody selected as owner on create";
32 $agent_a->get_ok('/', 'open home page');
33 $agent_a->form_name('CreateTicketInQueue');
34 $agent_a->select( 'Queue', $queue->id );
37 $agent_a->content_contains('Create a new ticket', 'opened create ticket page');
38 my $form = $agent_a->form_name('TicketCreate');
39 is $form->value('Owner'), RT->Nobody->id, 'correct owner selected';
40 ok !grep($_ == $user_a->id, $form->find_input('Owner')->possible_values),
41 'user A can not own tickets';
44 $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
45 my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
46 ok $id, 'found id of the ticket';
48 my $ticket = RT::Ticket->new( RT->SystemUser );
50 ok $ticket->id, 'loaded the ticket';
51 is $ticket->Owner, RT->Nobody->id, 'correct owner';
54 diag "user can chose owner of a new ticket";
56 $agent_a->get_ok('/', 'open home page');
57 $agent_a->form_name('CreateTicketInQueue');
58 $agent_a->select( 'Queue', $queue->id );
61 $agent_a->content_contains('Create a new ticket', 'opened create ticket page');
62 my $form = $agent_a->form_name('TicketCreate');
63 is $form->value('Owner'), RT->Nobody->id, 'correct owner selected';
65 ok grep($_ == $user_b->id, $form->find_input('Owner')->possible_values),
66 'user B is listed as potential owner';
67 $agent_a->select('Owner', $user_b->id);
70 $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
71 my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
72 ok $id, 'found id of the ticket';
74 my $ticket = RT::Ticket->new( RT->SystemUser );
76 ok $ticket->id, 'loaded the ticket';
77 is $ticket->Owner, $user_b->id, 'correct owner';
80 my $agent_b = RT::Test::Web->new;
81 ok $agent_b->login('user_b', 'password'), 'logged in as user B';
83 diag "user A can not change owner after create";
85 my $ticket = RT::Ticket->new( $user_a );
86 my ($id, $txn, $msg) = $ticket->Create(
91 ok $id, 'created a ticket #'. $id or diag "error: $msg";
92 is $ticket->Owner, $user_b->id, 'correct owner';
94 # try the following group of tests twice with different agents(logins)
97 $agent->get("/Ticket/Modify.html?id=$id");
98 my $form = $agent->form_name('TicketModify');
99 is $form->value('Owner'), $user_b->id, 'correct owner selected';
100 $agent->select('Owner', RT->Nobody->id);
103 $agent->content_contains(
105 'no way to change owner after create if you have no rights'
108 my $ticket = RT::Ticket->new( RT->SystemUser );
109 $ticket->Load( $id );
110 ok $ticket->id, 'loaded the ticket';
111 is $ticket->Owner, $user_b->id, 'correct owner';
114 $test_cb->($agent_a);
115 diag "even owner(user B) can not change owner";
116 $test_cb->($agent_b);
119 diag "on reply correct owner is selected";
121 my $ticket = RT::Ticket->new( $user_a );
122 my ($id, $txn, $msg) = $ticket->Create(
124 Owner => $user_b->id,
127 ok $id, 'created a ticket #'. $id or diag "error: $msg";
128 is $ticket->Owner, $user_b->id, 'correct owner';
130 $agent_a->goto_ticket( $id );
131 $agent_a->follow_link_ok({text => 'Reply'}, 'Ticket -> Reply');
133 my $form = $agent_a->form_name('TicketUpdate');
134 is $form->value('Owner'), '', 'empty value selected';
137 $ticket = RT::Ticket->new( RT->SystemUser );
138 $ticket->Load( $id );
139 ok $ticket->id, 'loaded the ticket';
140 is $ticket->Owner, $user_b->id, 'correct owner';
143 ok( RT::Test->set_rights(
144 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket)] },
145 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
148 diag "Couldn't take without coresponding right";
150 my $ticket = RT::Ticket->new( $user_a );
151 my ($id, $txn, $msg) = $ticket->Create(
155 ok $id, 'created a ticket #'. $id or diag "error: $msg";
156 is $ticket->Owner, RT->Nobody->id, 'correct owner';
158 $agent_a->goto_ticket( $id );
159 ok !($agent_a->find_all_links( text => 'Take' ))[0],
161 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
162 'no Steal link as well';
165 diag "Couldn't steal without coresponding right";
167 my $ticket = RT::Ticket->new( $user_a );
168 my ($id, $txn, $msg) = $ticket->Create(
170 Owner => $user_b->id,
173 ok $id, 'created a ticket #'. $id or diag "error: $msg";
174 is $ticket->Owner, $user_b->id, 'correct owner';
176 $agent_a->goto_ticket( $id );
177 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
179 ok !($agent_a->find_all_links( text => 'Take' ))[0],
180 'no Take link as well';
183 ok( RT::Test->set_rights(
184 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket TakeTicket)] },
187 diag "TakeTicket require OwnTicket to work";
189 my $ticket = RT::Ticket->new( $user_a );
190 my ($id, $txn, $msg) = $ticket->Create(
194 ok $id, 'created a ticket #'. $id or diag "error: $msg";
195 is $ticket->Owner, RT->Nobody->id, 'correct owner';
197 $agent_a->goto_ticket( $id );
198 ok !($agent_a->find_all_links( text => 'Take' ))[0],
200 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
201 'no Steal link as well';
204 ok( RT::Test->set_rights(
205 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket TakeTicket)] },
206 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
209 diag "TakeTicket+OwnTicket work";
211 my $ticket = RT::Ticket->new( $user_a );
212 my ($id, $txn, $msg) = $ticket->Create(
216 ok $id, 'created a ticket #'. $id or diag "error: $msg";
217 is $ticket->Owner, RT->Nobody->id, 'correct owner';
219 $agent_a->goto_ticket( $id );
220 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
222 $agent_a->follow_link_ok({text => 'Take'}, 'Ticket -> Take');
224 $ticket = RT::Ticket->new( RT->SystemUser );
225 $ticket->Load( $id );
226 ok $ticket->id, 'loaded the ticket';
227 is $ticket->Owner, $user_a->id, 'correct owner';
230 diag "TakeTicket+OwnTicket don't work when owner is not nobody";
232 my $ticket = RT::Ticket->new( $user_a );
233 my ($id, $txn, $msg) = $ticket->Create(
235 Owner => $user_b->id,
238 ok $id, 'created a ticket #'. $id or diag "error: $msg";
239 is $ticket->Owner, $user_b->id, 'correct owner';
241 $agent_a->goto_ticket( $id );
242 ok !($agent_a->find_all_links( text => 'Take' ))[0],
244 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
248 ok( RT::Test->set_rights(
249 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket StealTicket)] },
250 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
253 diag "StealTicket require OwnTicket to work";
255 my $ticket = RT::Ticket->new( $user_a );
256 my ($id, $txn, $msg) = $ticket->Create(
258 Owner => $user_b->id,
261 ok $id, 'created a ticket #'. $id or diag "error: $msg";
262 is $ticket->Owner, $user_b->id, 'correct owner';
264 $agent_a->goto_ticket( $id );
265 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
267 ok !($agent_a->find_all_links( text => 'Take' ))[0],
271 ok( RT::Test->set_rights(
272 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket StealTicket)] },
273 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
276 diag "StealTicket+OwnTicket work";
278 my $ticket = RT::Ticket->new( $user_a );
279 my ($id, $txn, $msg) = $ticket->Create(
281 Owner => $user_b->id,
284 ok $id, 'created a ticket #'. $id or diag "error: $msg";
285 is $ticket->Owner, $user_b->id, 'correct owner';
287 $agent_a->goto_ticket( $id );
288 ok !($agent_a->find_all_links( text => 'Take' ))[0],
290 $agent_a->follow_link_ok({text => 'Steal'}, 'Ticket -> Steal');
292 $ticket = RT::Ticket->new( RT->SystemUser );
293 $ticket->Load( $id );
294 ok $ticket->id, 'loaded the ticket';
295 is $ticket->Owner, $user_a->id, 'correct owner';
298 diag "StealTicket+OwnTicket don't work when owner is nobody";
300 my $ticket = RT::Ticket->new( $user_a );
301 my ($id, $txn, $msg) = $ticket->Create(
305 ok $id, 'created a ticket #'. $id or diag "error: $msg";
306 is $ticket->Owner, RT->Nobody->id, 'correct owner';
308 $agent_a->goto_ticket( $id );
309 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
311 ok !($agent_a->find_all_links( text => 'Take' ))[0],
312 'no Take link as well (no right)';
315 ok( RT::Test->set_rights(
316 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket TakeTicket StealTicket)] },
317 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
320 diag "no Steal link when owner nobody";
322 my $ticket = RT::Ticket->new( $user_a );
323 my ($id, $txn, $msg) = $ticket->Create(
327 ok $id, 'created a ticket #'. $id or diag "error: $msg";
328 is $ticket->Owner, RT->Nobody->id, 'correct owner';
330 $agent_a->goto_ticket( $id );
331 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
333 ok( ($agent_a->find_all_links( text => 'Take' ))[0],
334 'but have Take link');
337 diag "no Take link when owner is not nobody";
339 my $ticket = RT::Ticket->new( $user_a );
340 my ($id, $txn, $msg) = $ticket->Create(
342 Owner => $user_b->id,
345 ok $id, 'created a ticket #'. $id or diag "error: $msg";
346 is $ticket->Owner, $user_b->id, 'correct owner';
348 $agent_a->goto_ticket( $id );
349 ok !($agent_a->find_all_links( text => 'Take' ))[0],
351 ok( ($agent_a->find_all_links( text => 'Steal' ))[0],
352 'but have Steal link');
356 RT::Test->set_rights(
358 Principal => $user_a,
360 qw(SeeQueue ShowTicket CreateTicket ReplyToTicket OwnTicket TakeTicket StealTicket)
363 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
369 "action is Take if old owner is nobody and new owner is current user in update page";
371 my $ticket = RT::Ticket->new( $user_a );
372 my ( $id, $txn, $msg ) = $ticket->Create(
376 ok $id, 'created a ticket #'. $id or diag "error: $msg";
377 is $ticket->Owner, RT->Nobody->id, 'correct owner';
379 $agent_a->goto_ticket( $id );
380 $agent_a->content_lacks('Taken', 'no Taken');
381 $agent_a->follow_link_ok({text => 'Reply'}, 'Ticket -> Reply');
382 $agent_a->submit_form(
383 form_name => 'TicketUpdate',
384 fields => { Owner => $user_a->id },
385 button => 'SubmitTicket',
387 $agent_a->content_like( qr/user_a\s+-\s+Taken/, 'got user_a Taken message' );
389 $agent_b->goto_ticket($id);
390 $agent_b->content_like( qr/user_a\s+-\s+Taken/, 'got user_a Taken message for user b ' );
394 "action is Take if old owner is nobody and new owner is current user in basics page";
396 my $ticket = RT::Ticket->new($user_a);
397 my ( $id, $txn, $msg ) = $ticket->Create(
401 ok $id, 'created a ticket #' . $id or diag "error: $msg";
402 is $ticket->Owner, RT->Nobody->id, 'correct owner';
404 $agent_a->goto_ticket($id);
405 $agent_a->content_lacks('Taken', 'no Taken');
406 $agent_a->follow_link_ok( { text => 'Basics' }, 'Ticket -> Basics' );
407 $agent_a->submit_form(
408 form_name => 'TicketModify',
409 fields => { Owner => $user_a->id },
411 $agent_a->content_contains( 'Owner changed from Nobody to user_a',
412 'got set message in Basics' );
413 $agent_a->goto_ticket($id);
414 $agent_a->content_like( qr/user_a\s+-\s+Taken/, 'got user_a Taken message' );
416 $agent_b->goto_ticket($id);
417 $agent_b->content_like( qr/user_a\s+-\s+Taken/, 'got user_a Taken message for user b ' );