diff options
Diffstat (limited to 'rt/t/customfields/datetime_search.t')
-rw-r--r-- | rt/t/customfields/datetime_search.t | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/rt/t/customfields/datetime_search.t b/rt/t/customfields/datetime_search.t new file mode 100644 index 000000000..11fe3bc57 --- /dev/null +++ b/rt/t/customfields/datetime_search.t @@ -0,0 +1,141 @@ +#!/usr/bin/perl + +use warnings; +use strict; + +use RT::Test nodata => 1, tests => 14; +RT->Config->Set( 'Timezone' => 'EST5EDT' ); # -04:00 + +my $q = RT::Queue->new(RT->SystemUser); +ok( $q->Create( Name => 'DateTimeCFTest' . $$ ), 'create queue' ); + +my $cf = RT::CustomField->new(RT->SystemUser); +ok( + $cf->Create( + Name => 'datetime-' . $$, + Type => 'DateTime', + MaxValues => 1, + LookupType => RT::Ticket->CustomFieldLookupType, + ), + 'create cf datetime' +); +ok( $cf->AddToObject($q), 'date cf apply to queue' ); + +my $ticket = RT::Ticket->new(RT->SystemUser); + +ok( + $ticket->Create( + Queue => $q->id, + Subject => 'Test', + 'CustomField-' . $cf->id => '2010-05-04 07:00:00', + ), + 'create ticket with cf set to 2010-05-04 07:00:00( 2010-05-04 11:00:00 with UTC )' +); + +is( + $ticket->CustomFieldValues->First->Content, + '2010-05-04 11:00:00', + 'date in db is in timezone UTC' +); + +{ + + my $tickets = RT::Tickets->new(RT->SystemUser); + $tickets->LimitCustomField( + CUSTOMFIELD => $cf->id, + OPERATOR => '=', + VALUE => '2010-05-04 07:00:00', # this timezone is server + ); + + is( $tickets->Count, 1, 'found the ticket with exact date: 2010-05-04 07:00:00' ); +} + +{ + + # TODO according to the code, if OPERATOR is '=', it means on that day + # this will test this behavior + my $tickets = RT::Tickets->new(RT->SystemUser); + $tickets->LimitCustomField( + CUSTOMFIELD => $cf->id, + OPERATOR => '=', + VALUE => '2010-05-04', + ); + + is( $tickets->Count, 1, 'found the ticket with rough date: 2010-05-04' ); +} + +{ + + # TODO according to the code, if OPERATOR is '=', it means on that day + # this will test this behavior + my $tickets = RT::Tickets->new(RT->SystemUser); + $tickets->LimitCustomField( + CUSTOMFIELD => $cf->id, + OPERATOR => '=', + VALUE => '2010-05-05', + ); + + is( $tickets->Count, 0, 'did not find the ticket with wrong datetime: 2010-05-05' ); +} + +my $tickets = RT::Tickets->new( RT->SystemUser ); +$tickets->UnLimit; +while( my $ticket = $tickets->Next ) { + $ticket->Delete(); +} + +{ + ok( + $ticket->Create( + Queue => $q->id, + Subject => 'Test', + 'CustomField-' . $cf->id => '2010-06-21 17:00:01', + ), +'create ticket with cf set to 2010-06-21 17:00:01( 2010-06-21 21:00:01 with UTC )' + ); + + my $shanghai = RT::Test->load_or_create_user( + Name => 'shanghai', + Timezone => 'Asia/Shanghai', + ); + + ok( + $shanghai->PrincipalObj->GrantRight( + Right => 'SuperUser', + Object => $RT::System, + ) + ); + + my $current_user = RT::CurrentUser->new($shanghai); + my $tickets = RT::Tickets->new($current_user); + $tickets->LimitCustomField( + CUSTOMFIELD => $cf->id, + OPERATOR => '=', + VALUE => '2010-06-22', + ); + is( $tickets->Count, 1, 'found the ticket with rough datetime: 2010-06-22' ); + + $tickets->UnLimit; + $tickets->LimitCustomField( + CUSTOMFIELD => $cf->id, + OPERATOR => '>', + VALUE => '2010-06-21', + ); + is( $tickets->Count, 1, 'found the ticket with > 2010-06-21' ); + + $tickets->UnLimit; + $tickets->LimitCustomField( + CUSTOMFIELD => $cf->id, + OPERATOR => '<', + VALUE => '2010-06-23', + ); + is( $tickets->Count, 1, 'found the ticket with < 2010-06-23' ); + + $tickets->UnLimit; + $tickets->LimitCustomField( + CUSTOMFIELD => $cf->id, + OPERATOR => '=', + VALUE => '2010-06-22 05:00:01', + ); + is( $tickets->Count, 1, 'found the ticket with = 2010-06-22 01:00:01' ); +} |