-#!/usr/bin/perl
-
use strict;
+use warnings;
use HTTP::Request::Common;
use HTTP::Cookies;
use LWP;
-use Encode;
-use RT::Test tests => 50;
+use RT::Test tests => 70;
my $cookie_jar = HTTP::Cookies->new;
my ($baseurl, $agent) = RT::Test->started_ok;
my $url = $agent->rt_base_url;
ok $agent->login, "logged in";
-# {{{ Query Builder tests
my $response = $agent->get($url."Search/Build.html");
ok $response->is_success, "Fetched ". $url ."Search/Build.html";
sub getQueryFromForm {
+ my $agent = shift;
$agent->form_name('BuildQuery');
# This pulls out the "hidden input" query from the page
my $q = $agent->current_form->find_input("Query")->value;
}
sub selectedClauses {
+ my $agent = shift;
my @clauses = grep { defined } map { $_->value } $agent->current_form->find_input("clauses");
return [ @clauses ];
}
-diag "add the first condition" if $ENV{'TEST_VERBOSE'};
+diag "add the first condition";
{
ok $agent->form_name('BuildQuery'), "found the form once";
$agent->field("ActorField", "Owner");
$agent->field("ActorOp", "=");
$agent->field("ValueOfActor", "Nobody");
$agent->submit;
- is getQueryFromForm, "Owner = 'Nobody'", 'correct query';
+ is getQueryFromForm($agent), "Owner = 'Nobody'", 'correct query';
}
-diag "set the next condition" if $ENV{'TEST_VERBOSE'};
+diag "set the next condition";
{
ok($agent->form_name('BuildQuery'), "found the form again");
$agent->field("QueueOp", "!=");
$agent->field("ValueOfQueue", "Regression");
$agent->submit;
- is getQueryFromForm, "Owner = 'Nobody' AND Queue != 'Regression'",
+ is getQueryFromForm($agent), "Owner = 'Nobody' AND Queue != 'Regression'",
'correct query';
}
-diag "We're going to delete the owner" if $ENV{'TEST_VERBOSE'};
+diag "We're going to delete the owner";
{
$agent->select("clauses", ["0"] );
$agent->click("DeleteClause");
ok $agent->form_name('BuildQuery'), "found the form";
- is getQueryFromForm, "Queue != 'Regression'", 'correct query';
+ is getQueryFromForm($agent), "Queue != 'Regression'", 'correct query';
}
-diag "add a cond with OR and se number by the way" if $ENV{'TEST_VERBOSE'};
+diag "add a cond with OR and se number by the way";
{
$agent->field("AndOr", "OR");
$agent->select("idOp", ">");
$agent->field("ValueOfid" => "1234");
$agent->click("AddClause");
ok $agent->form_name('BuildQuery'), "found the form again";
- is getQueryFromForm, "Queue != 'Regression' OR id > 1234",
+ is getQueryFromForm($agent), "Queue != 'Regression' OR id > 1234",
"added something as OR, and number not quoted";
- is_deeply selectedClauses, ["1"], 'the id that we just entered is still selected';
+ is_deeply selectedClauses($agent), ["1"], 'the id that we just entered is still selected';
}
-diag "Move the second one up a level" if $ENV{'TEST_VERBOSE'};
+diag "Move the second one up a level";
{
$agent->click("Up");
ok $agent->form_name('BuildQuery'), "found the form again";
- is getQueryFromForm, "id > 1234 OR Queue != 'Regression'", "moved up one";
- is_deeply selectedClauses, ["0"], 'the one we moved up is selected';
+ is getQueryFromForm($agent), "id > 1234 OR Queue != 'Regression'", "moved up one";
+ is_deeply selectedClauses($agent), ["0"], 'the one we moved up is selected';
}
-diag "Move the second one right" if $ENV{'TEST_VERBOSE'};
+diag "Move the second one right";
{
$agent->click("Right");
ok $agent->form_name('BuildQuery'), "found the form again";
- is getQueryFromForm, "Queue != 'Regression' OR ( id > 1234 )",
+ is getQueryFromForm($agent), "Queue != 'Regression' OR ( id > 1234 )",
"moved over to the right (and down)";
- is_deeply selectedClauses, ["2"], 'the one we moved right is selected';
+ is_deeply selectedClauses($agent), ["2"], 'the one we moved right is selected';
}
-diag "Move the block up" if $ENV{'TEST_VERBOSE'};
+diag "Move the block up";
{
$agent->select("clauses", ["1"]);
$agent->click("Up");
ok $agent->form_name('BuildQuery'), "found the form again";
- is getQueryFromForm, "( id > 1234 ) OR Queue != 'Regression'", "moved up";
- is_deeply selectedClauses, ["0"], 'the one we moved up is selected';
+ is getQueryFromForm($agent), "( id > 1234 ) OR Queue != 'Regression'", "moved up";
+ is_deeply selectedClauses($agent), ["0"], 'the one we moved up is selected';
}
-diag "Can not move up the top most clause" if $ENV{'TEST_VERBOSE'};
+diag "Can not move up the top most clause";
{
$agent->select("clauses", ["0"]);
$agent->click("Up");
ok $agent->form_name('BuildQuery'), "found the form again";
- $agent->content_like(qr/error: can\S+t move up/, "i shouldn't have been able to hit up");
- is_deeply selectedClauses, ["0"], 'the one we tried to move is selected';
+ $agent->content_contains("error: can't move up", "i shouldn't have been able to hit up");
+ is_deeply selectedClauses($agent), ["0"], 'the one we tried to move is selected';
}
-diag "Can not move left the left most clause" if $ENV{'TEST_VERBOSE'};
+diag "Can not move left the left most clause";
{
$agent->click("Left");
ok($agent->form_name('BuildQuery'), "found the form again");
- $agent->content_like(qr/error: can\S+t move left/, "i shouldn't have been able to hit left");
- is_deeply selectedClauses, ["0"], 'the one we tried to move is selected';
+ $agent->content_contains("error: can't move left", "i shouldn't have been able to hit left");
+ is_deeply selectedClauses($agent), ["0"], 'the one we tried to move is selected';
}
-diag "Add a condition into a nested block" if $ENV{'TEST_VERBOSE'};
+diag "Add a condition into a nested block";
{
$agent->select("clauses", ["1"]);
$agent->select("ValueOfStatus" => "stalled");
$agent->submit;
ok $agent->form_name('BuildQuery'), "found the form again";
- is_deeply selectedClauses, ["2"], 'the one we added is only selected';
- is getQueryFromForm,
+ is_deeply selectedClauses($agent), ["2"], 'the one we added is only selected';
+ is getQueryFromForm($agent),
"( id > 1234 AND Status = 'stalled' ) OR Queue != 'Regression'",
"added new one";
}
-diag "click advanced, enter 'C1 OR ( C2 AND C3 )', apply, aggregators should stay the same."
- if $ENV{'TEST_VERBOSE'};
+diag "click advanced, enter 'C1 OR ( C2 AND C3 )', apply, aggregators should stay the same.";
{
my $response = $agent->get($url."Search/Edit.html");
ok( $response->is_success, "Fetched /Search/Edit.html" );
- ok($agent->form_number(3), "found the form");
+ ok($agent->form_name('BuildQueryAdvanced'), "found the form");
$agent->field("Query", "Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )");
$agent->submit;
- is( getQueryFromForm,
+ is( getQueryFromForm($agent),
"Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )",
"no aggregators change"
);
# - clears entire query
# - clears it from the session, too
-# }}}
# create a custom field with nonascii name and try to add a condition
{
- my $cf = RT::CustomField->new( $RT::SystemUser );
- $cf->LoadByName( Name => "\x{442}", Queue => 0 );
+ my $cf = RT::CustomField->new( RT->SystemUser );
+ $cf->LoadByName( Name => "\x{442}", LookupType => RT::Ticket->CustomFieldLookupType, ObjectId => 0 );
if ( $cf->id ) {
is($cf->Type, 'Freeform', 'loaded and type is correct');
} else {
ok( $response->is_success, "Fetched " . $url."Search/Build.html" );
ok($agent->form_name('BuildQuery'), "found the form once");
- $agent->field("ValueOf'CF.{\x{442}}'", "\x{441}");
+ $agent->field("ValueOfCF.{\x{442}}", "\x{441}");
$agent->submit();
- is( getQueryFromForm,
- "'CF.{\x{442}}' LIKE '\x{441}'",
+ is( getQueryFromForm($agent),
+ "CF.{\x{442}} LIKE '\x{441}'",
"no changes, no duplicate condition with badly encoded text"
);
}
-diag "input a condition, select (several conditions), click delete"
- if $ENV{'TEST_VERBOSE'};
+diag "input a condition, select (several conditions), click delete";
{
my $response = $agent->get( $url."Search/Edit.html" );
ok $response->is_success, "Fetched /Search/Edit.html";
- ok $agent->form_number(3), "found the form";
+ ok $agent->form_name('BuildQueryAdvanced'), "found the form";
$agent->field("Query", "( Status = 'new' OR Status = 'open' )");
$agent->submit;
- is( getQueryFromForm,
+ is( getQueryFromForm($agent),
"( Status = 'new' OR Status = 'open' )",
"query is the same"
);
$agent->field( ValueOfid => 10 );
$agent->click("DeleteClause");
- is( getQueryFromForm,
+ is( getQueryFromForm($agent),
"id < 10",
"replaced query successfuly"
);
my $response = $agent->get($url."Search/Build.html?Query=Priority%20>%20-2");
ok( $response->is_success, "Fetched " . $url."Search/Build.html" );
- is( getQueryFromForm,
+ is( getQueryFromForm($agent),
"Priority > -2",
"query is the same"
);
{
my $response = $agent->get($url."Search/Edit.html");
ok( $response->is_success, "Fetched /Search/Edit.html" );
- ok($agent->form_number(3), "found the form");
+ ok($agent->form_name('BuildQueryAdvanced'), "found the form");
$agent->field("Query", "Requestor.EmailAddress IS 'FOOBAR'");
$agent->submit;
is( getQueryFromForm($agent),
{
my $response = $agent->get($url."Search/Edit.html");
ok( $response->is_success, "Fetched /Search/Edit.html" );
- ok($agent->form_number(3), "found the form");
+ ok($agent->form_name('BuildQueryAdvanced'), "found the form");
$agent->field("Query", "Requestor.EmailAddress IS NOT 'FOOBAR'");
$agent->submit;
is( getQueryFromForm($agent),
);
}
+diag "click advanced, enter a valid SQL, but the field is lower cased";
+{
+ my $response = $agent->get($url."Search/Edit.html");
+ ok( $response->is_success, "Fetched /Search/Edit.html" );
+ ok($agent->form_name('BuildQueryAdvanced'), "found the form");
+ $agent->field("Query", "status = 'new'");
+ $agent->submit;
+ $agent->content_lacks( 'Unknown field:', 'no "unknown field" warning' );
+ is( getQueryFromForm($agent),
+ "Status = 'new'",
+ "field's case is corrected"
+ );
+}
+
+diag "make sure skipped order by field doesn't break search";
+{
+ my $t = RT::Test->create_ticket( Queue => 'General', Subject => 'test' );
+ ok $t && $t->id, 'created a ticket';
+
+ $agent->get_ok($url."Search/Edit.html");
+ ok($agent->form_name('BuildQueryAdvanced'), "found the form");
+ $agent->field("Query", "id = ". $t->id);
+ $agent->submit;
+
+ $agent->follow_link_ok({id => 'page-results'});
+ ok( $agent->find_link(
+ text => $t->id,
+ url_regex => qr{/Ticket/Display\.html},
+ ), "link to the ticket" );
+
+ $agent->follow_link_ok({id => 'page-edit_search'});
+ $agent->form_name('BuildQuery');
+ $agent->field("OrderBy", 'Requestor.EmailAddress', 3);
+ $agent->submit;
+ $agent->form_name('BuildQuery');
+ is $agent->value('OrderBy', 1), 'id';
+ is $agent->value('OrderBy', 2), '';
+ is $agent->value('OrderBy', 3), 'Requestor.EmailAddress';
+
+ $agent->follow_link_ok({id => 'page-results'});
+ ok( $agent->find_link(
+ text => $t->id,
+ url_regex => qr{/Ticket/Display\.html},
+ ), "link to the ticket" );
+}