summaryrefslogtreecommitdiff
path: root/rt/lib/t/regression/21query-builder.t
diff options
context:
space:
mode:
Diffstat (limited to 'rt/lib/t/regression/21query-builder.t')
-rw-r--r--rt/lib/t/regression/21query-builder.t77
1 files changed, 60 insertions, 17 deletions
diff --git a/rt/lib/t/regression/21query-builder.t b/rt/lib/t/regression/21query-builder.t
index be04599..a0cecb2 100644
--- a/rt/lib/t/regression/21query-builder.t
+++ b/rt/lib/t/regression/21query-builder.t
@@ -1,7 +1,9 @@
#!/usr/bin/perl
use strict;
-use Test::More tests => 31;
+use warnings;
+
+use Test::More tests => 39;
use Test::WWW::Mechanize;
use HTTP::Request::Common;
use HTTP::Cookies;
@@ -16,7 +18,20 @@ my $agent = Test::WWW::Mechanize->new();
$agent->cookie_jar($cookie_jar);
use RT;
-RT::LoadConfig;
+RT::LoadConfig();
+RT::Init();
+
+# create a regression queue if it doesn't exist
+{
+ my $queue = RT::Queue->new( $RT::SystemUser );
+ $queue->Load( 'Regression' );
+ if ( $queue->id ) {
+ ok(1, "queue 'Regression' exists - #". $queue->id );
+ } else {
+ $queue->Create( Name => 'Regression' );
+ ok($queue->id, "created queue 'Regression'");
+ }
+}
# get the top page
my $url = $RT::WebURL;
@@ -65,6 +80,7 @@ $agent->submit();
ok($agent->form_name('BuildQuery'), "found the form a third time");
sub getQueryFromForm {
+ $agent->form_name('BuildQuery');
# This pulls out the "hidden input" query from the page
my $q = $agent->current_form->find_input("Query")->value;
$q =~ s/^\s+//g;
@@ -126,38 +142,37 @@ $agent->select("clauses", ["1"]);
$agent->click("Up");
ok($agent->form_name('BuildQuery'), "found the form again");
-TODO: {
- local $TODO = "query builder incorrectly changes OR to AND";
- is(getQueryFromForm, "( id > 1234 ) OR Queue != 'Regression'", "moved up");
-}
+is(getQueryFromForm, "( id > 1234 ) OR Queue != 'Regression'", "moved up");
$agent->select("clauses", ["0"]); # this is a null clause
-
$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");
$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");
$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 selected');
-TODO: {
- local $TODO = "query builder incorrectly changes OR to AND";
- is(getQueryFromForm, "( id > 1234 AND Status = 'stalled' ) OR Queue != 'Regression'", "added new one");
+is( getQueryFromForm, "( id > 1234 AND Status = 'stalled' ) OR Queue != 'Regression'", "added new one" );
+
+# 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");
+ $agent->field("Query", "Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )");
+ $agent->submit;
+ is( getQueryFromForm,
+ "Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )",
+ "no aggregators change"
+ );
}
-
-
# - new items go one level down
# - add items at currently selected level
# - if nothing is selected, add at end, one level down
@@ -200,5 +215,33 @@ TODO: {
# }}}
+# 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 );
+ if ( $cf->id ) {
+ is($cf->Type, 'Freeform', 'loaded and type is correct');
+ } else {
+ my ($return, $msg) = $cf->Create(
+ Name => "\x{442}",
+ Queue => 0,
+ Type => 'Freeform',
+ );
+ ok($return, 'created CF') or diag "error: $msg";
+ }
+
+ my $response = $agent->get($url."Search/Build.html?NewQuery=1");
+ ok( $response->is_success, "Fetched " . $url."Search/Build.html" );
+
+ ok($agent->form_name('BuildQuery'), "found the form once");
+ $agent->field("ValueOf'CF.{\321\202}'", "\321\201");
+ $agent->submit();
+ is( getQueryFromForm,
+ "'CF.{\321\202}' LIKE '\321\201'",
+ "no changes, no duplicate condition with badly encoded text"
+ );
+
+ $cf->delete();
+}
1;