[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