first pass RT4 merge, RT#13852
[freeside.git] / rt / t / customfields / datetime_search.t
diff --git a/rt/t/customfields/datetime_search.t b/rt/t/customfields/datetime_search.t
new file mode 100644 (file)
index 0000000..11fe3bc
--- /dev/null
@@ -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' );
+}