6 use RT::Test tests => 91;
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';
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 my $agent_a = RT::Test::Web->new;
29 ok $agent_a->login('user_a', 'password'), 'logged in as user A';
31 diag "current user has no right to own, nobody selected as owner on create" if $ENV{TEST_VERBOSE};
33 $agent_a->get_ok('/', 'open home page');
34 $agent_a->form_name('CreateTicketInQueue');
35 $agent_a->select( 'Queue', $queue->id );
38 $agent_a->content_like(qr/Create a new ticket/i, 'opened create ticket page');
39 my $form = $agent_a->form_name('TicketCreate');
40 is $form->value('Owner'), $RT::Nobody->id, 'correct owner selected';
41 ok !grep($_ == $user_a->id, $form->find_input('Owner')->possible_values),
42 'user A can not own tickets';
45 $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
46 my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
47 ok $id, 'found id of the ticket';
49 my $ticket = RT::Ticket->new( $RT::SystemUser );
51 ok $ticket->id, 'loaded the ticket';
52 is $ticket->Owner, $RT::Nobody->id, 'correct owner';
55 diag "user can chose owner of a new ticket" if $ENV{TEST_VERBOSE};
57 $agent_a->get_ok('/', 'open home page');
58 $agent_a->form_name('CreateTicketInQueue');
59 $agent_a->select( 'Queue', $queue->id );
62 $agent_a->content_like(qr/Create a new ticket/i, 'opened create ticket page');
63 my $form = $agent_a->form_name('TicketCreate');
64 is $form->value('Owner'), $RT::Nobody->id, 'correct owner selected';
66 ok grep($_ == $user_b->id, $form->find_input('Owner')->possible_values),
67 'user B is listed as potential owner';
68 $agent_a->select('Owner', $user_b->id);
71 $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
72 my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
73 ok $id, 'found id of the ticket';
75 my $ticket = RT::Ticket->new( $RT::SystemUser );
77 ok $ticket->id, 'loaded the ticket';
78 is $ticket->Owner, $user_b->id, 'correct owner';
81 my $agent_b = RT::Test::Web->new;
82 ok $agent_b->login('user_b', 'password'), 'logged in as user B';
84 diag "user A can not change owner after create" if $ENV{TEST_VERBOSE};
86 my $ticket = RT::Ticket->new( $user_a );
87 my ($id, $txn, $msg) = $ticket->Create(
92 ok $id, 'created a ticket #'. $id or diag "error: $msg";
93 is $ticket->Owner, $user_b->id, 'correct owner';
95 # try the following group of tests twice with different agents(logins)
98 $agent->goto_ticket( $id );
99 $agent->follow_link_ok({text => 'Basics'}, 'Ticket -> Basics');
100 my $form = $agent->form_number(3);
101 is $form->value('Owner'), $user_b->id, 'correct owner selected';
102 $agent->select('Owner', $RT::Nobody->id);
105 $agent->content_like(
106 qr/Permission denied/i,
107 'no way to change owner after create if you have no rights'
110 my $ticket = RT::Ticket->new( $RT::SystemUser );
111 $ticket->Load( $id );
112 ok $ticket->id, 'loaded the ticket';
113 is $ticket->Owner, $user_b->id, 'correct owner';
116 $test_cb->($agent_a);
117 diag "even owner(user B) can not change owner" if $ENV{TEST_VERBOSE};
118 $test_cb->($agent_b);
121 diag "on reply correct owner is selected" if $ENV{TEST_VERBOSE};
123 my $ticket = RT::Ticket->new( $user_a );
124 my ($id, $txn, $msg) = $ticket->Create(
126 Owner => $user_b->id,
129 ok $id, 'created a ticket #'. $id or diag "error: $msg";
130 is $ticket->Owner, $user_b->id, 'correct owner';
132 $agent_a->goto_ticket( $id );
133 $agent_a->follow_link_ok({text => 'Reply'}, 'Ticket -> Basics');
135 my $form = $agent_a->form_number(3);
136 is $form->value('Owner'), '', 'empty value selected';
139 $ticket = RT::Ticket->new( $RT::SystemUser );
140 $ticket->Load( $id );
141 ok $ticket->id, 'loaded the ticket';
142 is $ticket->Owner, $user_b->id, 'correct owner';
145 ok( RT::Test->set_rights(
146 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket)] },
147 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
150 diag "Couldn't take without coresponding right" if $ENV{TEST_VERBOSE};
152 my $ticket = RT::Ticket->new( $user_a );
153 my ($id, $txn, $msg) = $ticket->Create(
157 ok $id, 'created a ticket #'. $id or diag "error: $msg";
158 is $ticket->Owner, $RT::Nobody->id, 'correct owner';
160 $agent_a->goto_ticket( $id );
161 ok !($agent_a->find_all_links( text => 'Take' ))[0],
163 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
164 'no Steal link as well';
167 diag "Couldn't steal without coresponding right" if $ENV{TEST_VERBOSE};
169 my $ticket = RT::Ticket->new( $user_a );
170 my ($id, $txn, $msg) = $ticket->Create(
172 Owner => $user_b->id,
175 ok $id, 'created a ticket #'. $id or diag "error: $msg";
176 is $ticket->Owner, $user_b->id, 'correct owner';
178 $agent_a->goto_ticket( $id );
179 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
181 ok !($agent_a->find_all_links( text => 'Take' ))[0],
182 'no Take link as well';
185 ok( RT::Test->set_rights(
186 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket TakeTicket)] },
189 diag "TakeTicket require OwnTicket to work" if $ENV{TEST_VERBOSE};
191 my $ticket = RT::Ticket->new( $user_a );
192 my ($id, $txn, $msg) = $ticket->Create(
196 ok $id, 'created a ticket #'. $id or diag "error: $msg";
197 is $ticket->Owner, $RT::Nobody->id, 'correct owner';
199 $agent_a->goto_ticket( $id );
200 ok !($agent_a->find_all_links( text => 'Take' ))[0],
202 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
203 'no Steal link as well';
206 ok( RT::Test->set_rights(
207 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket TakeTicket)] },
208 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
211 diag "TakeTicket+OwnTicket work" if $ENV{TEST_VERBOSE};
213 my $ticket = RT::Ticket->new( $user_a );
214 my ($id, $txn, $msg) = $ticket->Create(
218 ok $id, 'created a ticket #'. $id or diag "error: $msg";
219 is $ticket->Owner, $RT::Nobody->id, 'correct owner';
221 $agent_a->goto_ticket( $id );
222 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
224 $agent_a->follow_link_ok({text => 'Take'}, 'Ticket -> Take');
226 $ticket = RT::Ticket->new( $RT::SystemUser );
227 $ticket->Load( $id );
228 ok $ticket->id, 'loaded the ticket';
229 is $ticket->Owner, $user_a->id, 'correct owner';
232 diag "TakeTicket+OwnTicket don't work when owner is not nobody" if $ENV{TEST_VERBOSE};
234 my $ticket = RT::Ticket->new( $user_a );
235 my ($id, $txn, $msg) = $ticket->Create(
237 Owner => $user_b->id,
240 ok $id, 'created a ticket #'. $id or diag "error: $msg";
241 is $ticket->Owner, $user_b->id, 'correct owner';
243 $agent_a->goto_ticket( $id );
244 ok !($agent_a->find_all_links( text => 'Take' ))[0],
246 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
250 ok( RT::Test->set_rights(
251 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket StealTicket)] },
252 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
255 diag "StealTicket require OwnTicket to work" if $ENV{TEST_VERBOSE};
257 my $ticket = RT::Ticket->new( $user_a );
258 my ($id, $txn, $msg) = $ticket->Create(
260 Owner => $user_b->id,
263 ok $id, 'created a ticket #'. $id or diag "error: $msg";
264 is $ticket->Owner, $user_b->id, 'correct owner';
266 $agent_a->goto_ticket( $id );
267 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
269 ok !($agent_a->find_all_links( text => 'Take' ))[0],
273 ok( RT::Test->set_rights(
274 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket StealTicket)] },
275 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
278 diag "StealTicket+OwnTicket work" if $ENV{TEST_VERBOSE};
280 my $ticket = RT::Ticket->new( $user_a );
281 my ($id, $txn, $msg) = $ticket->Create(
283 Owner => $user_b->id,
286 ok $id, 'created a ticket #'. $id or diag "error: $msg";
287 is $ticket->Owner, $user_b->id, 'correct owner';
289 $agent_a->goto_ticket( $id );
290 ok !($agent_a->find_all_links( text => 'Take' ))[0],
292 $agent_a->follow_link_ok({text => 'Steal'}, 'Ticket -> Steal');
294 $ticket = RT::Ticket->new( $RT::SystemUser );
295 $ticket->Load( $id );
296 ok $ticket->id, 'loaded the ticket';
297 is $ticket->Owner, $user_a->id, 'correct owner';
300 diag "StealTicket+OwnTicket don't work when owner is nobody" if $ENV{TEST_VERBOSE};
302 my $ticket = RT::Ticket->new( $user_a );
303 my ($id, $txn, $msg) = $ticket->Create(
307 ok $id, 'created a ticket #'. $id or diag "error: $msg";
308 is $ticket->Owner, $RT::Nobody->id, 'correct owner';
310 $agent_a->goto_ticket( $id );
311 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
313 ok !($agent_a->find_all_links( text => 'Take' ))[0],
314 'no Take link as well (no right)';
317 ok( RT::Test->set_rights(
318 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket TakeTicket StealTicket)] },
319 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
322 diag "no Steal link when owner nobody" if $ENV{TEST_VERBOSE};
324 my $ticket = RT::Ticket->new( $user_a );
325 my ($id, $txn, $msg) = $ticket->Create(
329 ok $id, 'created a ticket #'. $id or diag "error: $msg";
330 is $ticket->Owner, $RT::Nobody->id, 'correct owner';
332 $agent_a->goto_ticket( $id );
333 ok !($agent_a->find_all_links( text => 'Steal' ))[0],
335 ok( ($agent_a->find_all_links( text => 'Take' ))[0],
336 'but have Take link');
339 diag "no Take link when owner is not nobody" if $ENV{TEST_VERBOSE};
341 my $ticket = RT::Ticket->new( $user_a );
342 my ($id, $txn, $msg) = $ticket->Create(
344 Owner => $user_b->id,
347 ok $id, 'created a ticket #'. $id or diag "error: $msg";
348 is $ticket->Owner, $user_b->id, 'correct owner';
350 $agent_a->goto_ticket( $id );
351 ok !($agent_a->find_all_links( text => 'Take' ))[0],
353 ok( ($agent_a->find_all_links( text => 'Steal' ))[0],
354 'but have Steal link');