first pass RT4 merge, RT#13852
[freeside.git] / rt / t / web / query_builder.t
index 25d6ec5..0abbfac 100644 (file)
@@ -5,7 +5,7 @@ use HTTP::Request::Common;
 use HTTP::Cookies;
 use LWP;
 use Encode;
-use RT::Test tests => 50;
+use RT::Test tests => 56;
 
 my $cookie_jar = HTTP::Cookies->new;
 my ($baseurl, $agent) = RT::Test->started_ok;
@@ -22,12 +22,12 @@ ok $queue && $queue->id, 'loaded or created queue';
 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;
@@ -38,117 +38,117 @@ sub getQueryFromForm {
 }
 
 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"
     );
@@ -194,11 +194,10 @@ diag "click advanced, enter 'C1 OR ( C2 AND C3 )', apply, aggregators should sta
 # - 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 );
+    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');
@@ -217,22 +216,21 @@ diag "click advanced, enter 'C1 OR ( C2 AND C3 )', apply, aggregators should sta
     ok($agent->form_name('BuildQuery'), "found the form once");
     $agent->field("ValueOf'CF.{\x{442}}'", "\x{441}");
     $agent->submit();
-    is( getQueryFromForm,
+    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"
     );
@@ -240,7 +238,7 @@ diag "input a condition, select (several conditions), click delete"
     $agent->field( ValueOfid => 10 );
     $agent->click("DeleteClause");
 
-    is( getQueryFromForm,
+    is( getQueryFromForm($agent),
         "id < 10",
         "replaced query successfuly"
     );
@@ -251,7 +249,7 @@ diag "send query with not quoted negative number";
     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"
     );
@@ -261,7 +259,7 @@ diag "click advanced, enter an invalid SQL IS restriction, apply and check that
 {
     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),
@@ -274,7 +272,7 @@ diag "click advanced, enter an invalid SQL IS NOT restriction, apply and check t
 {
     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),
@@ -283,3 +281,17 @@ diag "click advanced, enter an invalid SQL IS NOT restriction, apply and check t
     );
 }
 
+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"
+    );
+}
+