[Rt-commit] rt branch, 3.9-trunk, updated. rt-3.9.7-1040-gb03f180

? sunnavy sunnavy at bestpractical.com
Mon Dec 27 00:45:36 EST 2010


The branch, 3.9-trunk has been updated
       via  b03f18097b8d98e84841463053f7cfb3a08bca62 (commit)
      from  379827282fa8ff8a485704cedeb9c66222a11a89 (commit)

Summary of changes:
 lib/RT/Tickets_Overlay.pm        |   67 ++++++++++++++++----------
 t/customfields/datetime_search.t |    4 +-
 t/web/cf_datetime.t              |   95 ++++++++++++-------------------------
 3 files changed, 74 insertions(+), 92 deletions(-)

- Log -----------------------------------------------------------------
commit b03f18097b8d98e84841463053f7cfb3a08bca62
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Mon Dec 27 13:35:26 2010 +0800

    treat datetime search specially only when there is no time part and the op is =

diff --git a/lib/RT/Tickets_Overlay.pm b/lib/RT/Tickets_Overlay.pm
index b3fc99e..1958f1b 100755
--- a/lib/RT/Tickets_Overlay.pm
+++ b/lib/RT/Tickets_Overlay.pm
@@ -1563,35 +1563,50 @@ sub _CustomFieldLimit {
             # need special treatment for Date
             if ( $cf->Type eq 'DateTime' && $op eq '=' ) {
 
-                # if we're specifying =, that means we want everything on a
+                if ( $value =~ /:/ ) {
+                    # there is time speccified.
+                    my $date = RT::Date->new( $self->CurrentUser );
+                    $date->Set( Format => 'unknown', Value => $value );
+                    $self->_SQLLimit(
+                        ALIAS    => $TicketCFs,
+                        FIELD    => 'Content',
+                        OPERATOR => "=",
+                        VALUE    => $date->ISO,
+                        %rest,
+                    );
+                }
+                else {
+                # no time specified, that means we want everything on a
                 # particular day.  in the database, we need to check for >
                 # and < the edges of that day.
+                    my $date = RT::Date->new( $self->CurrentUser );
+                    $date->Set( Format => 'unknown', Value => $value );
+                    $date->SetToMidnight( Timezone => 'server' );
+                    my $daystart = $date->ISO;
+                    $date->AddDay;
+                    my $dayend = $date->ISO;
 
-                my $date = RT::Date->new( $self->CurrentUser );
-                $date->Set( Format => 'unknown', Value => $value );
-                $date->SetToMidnight( Timezone => 'server' );
-                my $daystart = $date->ISO;
-                $date->AddDay;
-                my $dayend = $date->ISO;
+                    $self->_OpenParen;
 
-                $self->_OpenParen;
+                    $self->_SQLLimit(
+                        ALIAS    => $TicketCFs,
+                        FIELD    => 'Content',
+                        OPERATOR => ">=",
+                        VALUE    => $daystart,
+                        %rest,
+                    );
 
-                $self->_SQLLimit( ALIAS    => $TicketCFs,
-                                  FIELD    => 'Content',
-                                  OPERATOR => ">=",
-                                  VALUE    => $daystart,
-                                  %rest,
-                                );
-
-                $self->_SQLLimit( ALIAS    => $TicketCFs,
-                                  FIELD    => 'Content',
-                                  OPERATOR => "<=",
-                                  VALUE    => $dayend,
-                                  %rest,
-                                  ENTRYAGGREGATOR => 'AND',
-                                );
+                    $self->_SQLLimit(
+                        ALIAS    => $TicketCFs,
+                        FIELD    => 'Content',
+                        OPERATOR => "<=",
+                        VALUE    => $dayend,
+                        %rest,
+                        ENTRYAGGREGATOR => 'AND',
+                    );
 
-                $self->_CloseParen;
+                    $self->_CloseParen;
+                }
             }
             elsif ( $op eq '=' || $op eq '!=' || $op eq '<>' ) {
                 if ( length( Encode::encode_utf8($value) ) < 256 ) {
diff --git a/t/customfields/datetime_search.t b/t/customfields/datetime_search.t
index d120a32..11fe3bc 100644
--- a/t/customfields/datetime_search.t
+++ b/t/customfields/datetime_search.t
@@ -44,10 +44,10 @@ is(
     $tickets->LimitCustomField(
         CUSTOMFIELD => $cf->id,
         OPERATOR    => '=',
-        VALUE       => '2010-05-04 11:00:00',    # this timezone is UTC
+        VALUE       => '2010-05-04 07:00:00',    # this timezone is server
     );
 
-    is( $tickets->Count, 1, 'found the ticket with exact date: 2010-05-04 11:00:00' );
+    is( $tickets->Count, 1, 'found the ticket with exact date: 2010-05-04 07:00:00' );
 }
 
 {
diff --git a/t/web/cf_datetime.t b/t/web/cf_datetime.t
index 3bc1c05..f54a246 100644
--- a/t/web/cf_datetime.t
+++ b/t/web/cf_datetime.t
@@ -3,8 +3,9 @@
 use strict;
 use warnings;
 
-use RT::Test tests => 44;
+use RT::Test tests => 51;
 RT->Config->Set( 'Timezone' => 'EST5EDT' ); # -04:00
+my ($baseurl, $m);
 
 SKIP: {
     skip 'test with apache+mod_perl has a bug of timezone', 44
@@ -12,7 +13,7 @@ SKIP: {
           && $ENV{RT_TEST_WEB_HANDLER} =~ /apache/
           && $ENV{RT_TEST_WEB_HANDLER} !~ /fastcgi/;
 
-my ($baseurl, $m) = RT::Test->started_ok;
+($baseurl, $m) = RT::Test->started_ok;
 ok $m->login, 'logged in as root';
 my $root = RT::User->new( RT->SystemUser );
 ok( $root->Load('root'), 'load root user' );
@@ -137,15 +138,8 @@ diag 'check search build page';
 
     my ($cf_field) =
       $m->find_all_inputs( type => 'text', name_regex => qr/test cf datetime/ );
-    $m->submit_form(
-        fields => {
-            $cf_op->name    => '=',
-            $cf_field->name => '2010-05-04'
-        },
-        button => 'DoSearch',
-    );
 
-    $m->content_contains( 'Found 1 ticket', 'Found 1 ticket' );
+    is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-04', }, 1 );
     $m->content_contains( '2010-05-04',     'got the right ticket' );
     $m->content_lacks( '2010-05-06', 'did not get the wrong ticket' );
 
@@ -160,60 +154,14 @@ diag 'check search build page';
     ));
     $m->login( 'shanghai', 'password', logout => 1 );
 
-    $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
-    $m->form_name('BuildQuery');
-    $m->submit_form(
-        fields => {
-            $cf_op->name    => '=',
-            $cf_field->name => '2010-05-05'
-        },
-        button => 'DoSearch',
-    );
-    $m->content_contains( 'Found 1 ticket', 'Found 1 ticket' );
-
-    $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
-    $m->form_name('BuildQuery');
-    $m->submit_form(
-        fields => {
-            $cf_op->name    => '<',
-            $cf_field->name => '2010-05-06'
-        },
-        button => 'DoSearch',
-    );
-    $m->content_contains( 'Found 2 ticket', 'Found 2 ticket' );
-
-    $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
-    $m->form_name('BuildQuery');
-    $m->submit_form(
-        fields => {
-            $cf_op->name    => '>',
-            $cf_field->name => '2010-05-03',
-        },
-        button => 'DoSearch',
-    );
-    $m->content_contains( 'Found 2 tickets', 'Found 2 tickets' );
-
-    $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
-    $m->form_name('BuildQuery');
-    $m->submit_form(
-        fields => {
-            $cf_op->name    => '=',
-            $cf_field->name => '2010-05-04 16:00:01',
-        },
-        button => 'DoSearch',
-    );
-    $m->content_contains( 'Found 1 ticket', 'Found 1 ticket' );
-
-    $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
-    $m->form_name('BuildQuery');
-    $m->submit_form(
-        fields => {
-            $cf_op->name    => '=',
-            $cf_field->name => '2010-05-05 01:00:01',
-        },
-        button => 'DoSearch',
-    );
-    $m->content_contains( 'Found 1 ticket', 'Found 1 ticket' );
+    is_results_number( { $cf_op->name => '<', $cf_field->name => '2010-05-07', }, 2 );
+    is_results_number( { $cf_op->name => '>', $cf_field->name => '2010-05-04', }, 2 );
+    is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05', }, 1 );
+    is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05 01:00:01', }, 1 );
+    is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05 02:00:01', }, 0 );
+    is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06', }, 1 );
+    is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 07:00:01', }, 1 );
+    is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 08:00:01', }, 0 );
 }
 
 diag 'check invalid inputs';
@@ -238,3 +186,22 @@ diag 'check invalid inputs';
     $m->content_lacks('foodate', 'invalid dates not set');
 }
 }
+
+sub is_results_number { 
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
+    my $fields = shift;
+    my $number = shift;
+    my $operator = shift;
+    my $value = shift;
+    $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
+    $m->form_name('BuildQuery');
+    $m->submit_form(
+        fields => $fields,
+        button => 'DoSearch',
+    );
+    $m->content_contains( "Found $number ticket", "Found $number ticket" );
+}
+
+# to make $m->DESTROY happy
+undef $m;
+

-----------------------------------------------------------------------


More information about the Rt-commit mailing list