X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2Ft%2Fregression%2F21query-builder.t;h=7f9990a30071e956b2b48105c946dcc8e625b6b0;hp=be04599bc84fd5623e0266bc75e2a8f532e2c717;hb=ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4;hpb=a513c0bef534d05f03c1242831b6f3be19b97dae diff --git a/rt/lib/t/regression/21query-builder.t b/rt/lib/t/regression/21query-builder.t index be04599bc..7f9990a30 100644 --- a/rt/lib/t/regression/21query-builder.t +++ b/rt/lib/t/regression/21query-builder.t @@ -1,7 +1,7 @@ #!/usr/bin/perl use strict; -use Test::More tests => 31; +use Test::More tests => 39; use Test::WWW::Mechanize; use HTTP::Request::Common; use HTTP::Cookies; @@ -16,7 +16,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"); + } else { + $queue->Create( Name => 'Regression' ); + ok($queue->id, "created queue 'Regression'"); + } +} # get the top page my $url = $RT::WebURL; @@ -65,6 +78,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 +140,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 +213,32 @@ 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" + ); + +} 1;