--- /dev/null
+#!/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' );
+}