6 use RT::Test nodata => 1, tests => 43;
7 use JSON qw(from_json);
9 my $queue = RT::Test->load_or_create_queue( Name => 'Regression' );
10 ok $queue && $queue->id, 'loaded or created queue';
12 my $user_a = RT::Test->load_or_create_user(
13 Name => 'user_a', Password => 'password',
15 ok $user_a && $user_a->id, 'loaded or created user';
17 my $user_b = RT::Test->load_or_create_user(
18 Name => 'user_b', Password => 'password',
20 ok $user_b && $user_b->id, 'loaded or created user';
22 RT->Config->Set( AutocompleteOwners => 1 );
23 my ($baseurl, $agent_a) = RT::Test->started_ok;
25 ok( RT::Test->set_rights(
26 { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket ReplyToTicket)] },
27 { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
30 ok $agent_a->login('user_a', 'password'), 'logged in as user A';
32 diag "current user has no right to own, nobody selected as owner on create";
34 $agent_a->get_ok('/', 'open home page');
35 $agent_a->form_name('CreateTicketInQueue');
36 $agent_a->select( 'Queue', $queue->id );
39 $agent_a->content_contains('Create a new ticket', 'opened create ticket page');
40 my $form = $agent_a->form_name('TicketCreate');
41 is $form->value('Owner'), RT->Nobody->Name, 'correct owner selected';
42 autocomplete_lacks( 'RT::Queue-'.$queue->id, 'user_a' );
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";
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_contains('Create a new ticket', 'opened create ticket page');
63 my $form = $agent_a->form_name('TicketCreate');
64 is $form->value('Owner'), RT->Nobody->Name, 'correct owner selected';
66 autocomplete_contains( 'RT::Queue-'.$queue->id, 'user_b' );
67 $form->value('Owner', $user_b->Name);
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->Name, 'correct owner selected';
100 $form->value('Owner', RT->Nobody->Name);
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( { id => 'page-actions-reply' }, 'Reply' );
133 my $form = $agent_a->form_number(3);
134 is $form->value('Owner'), 'user_b', 'current user 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';
146 $agent->get_ok("/Helpers/Autocomplete/Owners?term=&limit=$limit&return=Name", "fetched autocomplete values");
147 return from_json($agent->content);
150 sub autocomplete_contains {
152 my $expected = shift;
156 $agent = RT::Test::Web->new;
157 $agent->login('user_a', 'password');
160 my $results = autocomplete( $limit, $agent );
163 $seen{$_->{value}}++ for @$results;
164 $expected = [$expected] unless ref $expected eq 'ARRAY';
165 is((scalar grep { not $seen{$_} } @$expected), 0, "got all expected values");
168 sub autocomplete_lacks {
174 $agent = RT::Test::Web->new;
175 $agent->login('user_a', 'password');
178 my $results = autocomplete( $limit, $agent );
181 $seen{$_->{value}}++ for @$results;
182 $lacks = [$lacks] unless ref $lacks eq 'ARRAY';
183 is((scalar grep { $seen{$_} } @$lacks), 0, "didn't get any unexpected values");