[Rt-commit] rt branch, owner-autocomplete, updated. rt-3.8.8-493-gda7567d
Thomas Sibley
trs at bestpractical.com
Fri Aug 20 17:44:52 EDT 2010
The branch, owner-autocomplete has been updated
via da7567debe4ac823abf1e5134296c1137ad890f2 (commit)
via 12f85aba155439bfb6e5b6f52ca393a61febc3a9 (commit)
from 6b9a774321978b8ae2eaf534fa6405324a75c503 (commit)
Summary of changes:
lib/RT/Interface/Web.pm | 14 +++--
t/web/ticket_owner_autocomplete.t | 143 +++++++++++++++++++++++++++++++++++++
2 files changed, 152 insertions(+), 5 deletions(-)
create mode 100644 t/web/ticket_owner_autocomplete.t
- Log -----------------------------------------------------------------
commit 12f85aba155439bfb6e5b6f52ca393a61febc3a9
Author: Thomas Sibley <trs at bestpractical.com>
Date: Fri Aug 20 17:26:57 2010 -0400
Basic tests of owner inputs when autocomplete is enabled
This copies many of the tests in ticket_owner.t, but expects text inputs
instead of select dropdowns.
diff --git a/t/web/ticket_owner_autocomplete.t b/t/web/ticket_owner_autocomplete.t
new file mode 100644
index 0000000..a9fe326
--- /dev/null
+++ b/t/web/ticket_owner_autocomplete.t
@@ -0,0 +1,143 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use RT::Test tests => 37;
+
+my $queue = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $queue && $queue->id, 'loaded or created queue';
+
+my $user_a = RT::Test->load_or_create_user(
+ Name => 'user_a', Password => 'password',
+);
+ok $user_a && $user_a->id, 'loaded or created user';
+
+my $user_b = RT::Test->load_or_create_user(
+ Name => 'user_b', Password => 'password',
+);
+ok $user_b && $user_b->id, 'loaded or created user';
+
+RT->Config->Set( AutocompleteOwners => 1 );
+RT::Test->started_ok;
+
+ok( RT::Test->set_rights(
+ { Principal => $user_a, Right => [qw(SeeQueue ShowTicket CreateTicket ReplyToTicket)] },
+ { Principal => $user_b, Right => [qw(SeeQueue ShowTicket OwnTicket)] },
+), 'set rights');
+
+my $agent_a = RT::Test::Web->new;
+ok $agent_a->login('user_a', 'password'), 'logged in as user A';
+
+diag "current user has no right to own, nobody selected as owner on create" if $ENV{TEST_VERBOSE};
+{
+ $agent_a->get_ok('/', 'open home page');
+ $agent_a->form_name('CreateTicketInQueue');
+ $agent_a->select( 'Queue', $queue->id );
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Create a new ticket/i, 'opened create ticket page');
+ my $form = $agent_a->form_name('TicketCreate');
+ is $form->value('Owner'), $RT::Nobody->Name, 'correct owner selected';
+# ok !grep($_ == $user_a->id, $form->find_input('Owner')->possible_values),
+# 'user A can not own tickets';
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
+ my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
+ ok $id, 'found id of the ticket';
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $RT::Nobody->id, 'correct owner';
+}
+
+diag "user can chose owner of a new ticket" if $ENV{TEST_VERBOSE};
+{
+ $agent_a->get_ok('/', 'open home page');
+ $agent_a->form_name('CreateTicketInQueue');
+ $agent_a->select( 'Queue', $queue->id );
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Create a new ticket/i, 'opened create ticket page');
+ my $form = $agent_a->form_name('TicketCreate');
+ is $form->value('Owner'), $RT::Nobody->Name, 'correct owner selected';
+
+# ok grep($_ == $user_b->id, $form->find_input('Owner')->possible_values),
+# 'user B is listed as potential owner';
+ $form->value('Owner', $user_b->Name);
+ $agent_a->submit;
+
+ $agent_a->content_like(qr/Ticket \d+ created in queue/i, 'created ticket');
+ my ($id) = ($agent_a->content =~ /Ticket (\d+) created in queue/);
+ ok $id, 'found id of the ticket';
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_b->id, 'correct owner';
+}
+
+my $agent_b = RT::Test::Web->new;
+ok $agent_b->login('user_b', 'password'), 'logged in as user B';
+
+diag "user A can not change owner after create" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ # try the following group of tests twice with different agents(logins)
+ my $test_cb = sub {
+ my $agent = shift;
+ $agent->get("/Ticket/Modify.html?id=$id");
+ my $form = $agent->form_number(3);
+ is $form->value('Owner'), $user_b->Name, 'correct owner selected';
+ $form->value('Owner', $RT::Nobody->Name);
+ $agent->submit;
+
+ $agent->content_like(
+ qr/Permission denied/i,
+ 'no way to change owner after create if you have no rights'
+ );
+
+ my $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_b->id, 'correct owner';
+ };
+
+ $test_cb->($agent_a);
+ diag "even owner(user B) can not change owner" if $ENV{TEST_VERBOSE};
+ $test_cb->($agent_b);
+}
+
+diag "on reply correct owner is selected" if $ENV{TEST_VERBOSE};
+{
+ my $ticket = RT::Ticket->new( $user_a );
+ my ($id, $txn, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Owner => $user_b->id,
+ Subject => 'test',
+ );
+ ok $id, 'created a ticket #'. $id or diag "error: $msg";
+ is $ticket->Owner, $user_b->id, 'correct owner';
+
+ $agent_a->goto_ticket( $id );
+ $agent_a->follow_link_ok({text => 'Reply'}, 'Ticket -> Basics');
+
+ my $form = $agent_a->form_number(3);
+ is $form->value('Owner'), '', 'empty value selected';
+ $agent_a->submit;
+
+ $ticket = RT::Ticket->new( $RT::SystemUser );
+ $ticket->Load( $id );
+ ok $ticket->id, 'loaded the ticket';
+ is $ticket->Owner, $user_b->id, 'correct owner';
+}
commit da7567debe4ac823abf1e5134296c1137ad890f2
Author: Thomas Sibley <trs at bestpractical.com>
Date: Fri Aug 20 17:46:40 2010 -0400
Also canonicalize Owner to an ID if it's non-numeric
diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index 75c83dd..2f5d045 100755
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -1536,11 +1536,15 @@ sub ProcessTicketBasics {
Queue
);
- if ( $ARGSRef->{'Queue'} and ( $ARGSRef->{'Queue'} !~ /^(\d+)$/ ) ) {
- my $tempqueue = RT::Queue->new($RT::SystemUser);
- $tempqueue->Load( $ARGSRef->{'Queue'} );
- if ( $tempqueue->id ) {
- $ARGSRef->{'Queue'} = $tempqueue->id;
+ # Canonicalize Queue and Owner to their IDs if they aren't numeric
+ for my $field (qw(Queue Owner)) {
+ if ( $ARGSRef->{$field} and ( $ARGSRef->{$field} !~ /^(\d+)$/ ) ) {
+ my $class = $field eq 'Owner' ? "RT::User" : "RT::$field";
+ my $temp = $class->new($RT::SystemUser);
+ $temp->Load( $ARGSRef->{$field} );
+ if ( $temp->id ) {
+ $ARGSRef->{$field} = $temp->id;
+ }
}
}
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list