[Rt-commit] rt branch, 4.0/cf-date-parse-in-search, updated. rt-4.0.10-122-g1cc214b

Ruslan Zakirov ruz at bestpractical.com
Thu Mar 28 10:00:56 EDT 2013


The branch, 4.0/cf-date-parse-in-search has been updated
       via  1cc214bb34c94b3ededff670e5510cb1630b7e49 (commit)
      from  34254bb3670459bff30d86ba2bf5a7e8d0e8e662 (commit)

Summary of changes:
 t/customfields/date.t                 | 14 ++++++
 t/customfields/date_search.t          | 57 +++++++++++++++++------
 t/customfields/{date.t => datetime.t} | 24 ++++++----
 t/customfields/datetime_search.t      | 87 +++++++++++++++++++++++++++++++++--
 4 files changed, 154 insertions(+), 28 deletions(-)
 copy t/customfields/{date.t => datetime.t} (71%)

- Log -----------------------------------------------------------------
commit 1cc214bb34c94b3ededff670e5510cb1630b7e49
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Tue Mar 26 19:47:11 2013 +0400

    add more tests around Date[Time] CFs

diff --git a/t/customfields/date.t b/t/customfields/date.t
index 5a41d1f..475ace6 100644
--- a/t/customfields/date.t
+++ b/t/customfields/date.t
@@ -52,6 +52,20 @@ my $cf;
     is( $ticket->FirstCustomFieldValue($cf_name), '2013-02-11', 'correct value' );
 }
 
+{
+    my $ticket = RT::Ticket->new(RT->SystemUser);
+    ok(
+        $ticket->Create(
+            Queue                    => $q->id,
+            Subject                  => 'Test',
+            'CustomField-' . $cf->id => '2010-05-04 11:34:56',
+        ),
+        'create ticket with cf set to 2010-05-04 11:34:56'
+    );
+    is( $ticket->CustomFieldValues->First->Content,
+        '2010-05-04', 'date in db only has date' );
+}
+
 # in moscow it's already Feb 11, so tomorrow is Feb 12
 set_fixed_time("2013-02-10T23:10:00Z");
 {
diff --git a/t/customfields/date_search.t b/t/customfields/date_search.t
index ea5995f..2a8e6ce 100644
--- a/t/customfields/date_search.t
+++ b/t/customfields/date_search.t
@@ -1,16 +1,29 @@
+use Test::MockTime qw(set_fixed_time restore_time);
 
 use warnings;
 use strict;
 
-use RT::Test nodata => 1, tests => 17;
+use RT::Test nodata => 1, tests => 21;
 
-my $q = RT::Queue->new(RT->SystemUser);
-ok( $q->Create( Name => 'DateCFTest' . $$ ), 'create queue' );
+RT::Test->set_rights(
+    { Principal => 'Everyone', Right => [qw(
+        SeeQueue ShowTicket CreateTicket SeeCustomField ModifyCustomField
+    )] },
+);
+
+my $q = RT::Test->load_or_create_queue( Name => 'General' );
+ok $q && $q->id, 'loaded or created a queue';
+
+my $user_m = RT::Test->load_or_create_user( Name => 'moscow', Timezone => 'Europe/Moscow' );
+ok $user_m && $user_m->id;
+
+my $user_b = RT::Test->load_or_create_user( Name => 'boston', Timezone => 'America/New_York' );
+ok $user_b && $user_b->id;
 
 my $cf = RT::CustomField->new(RT->SystemUser);
 ok(
     $cf->Create(
-        Name       => 'date-' . $$,
+        Name       => 'TestDate',
         Type       => 'Date',
         MaxValues  => 1,
         LookupType => RT::Ticket->CustomFieldLookupType,
@@ -119,17 +132,33 @@ is( $ticket->CustomFieldValues->First->Content, '2010-05-04', 'date in db is' );
     is( $tickets->Count, 0, 'did not find the ticket with > 2010-05-05' );
 }
 
-$ticket = RT::Ticket->new(RT->SystemUser);
-
-ok(
-    $ticket->Create(
+# relative search by users in different TZs
+{
+    my $ticket = RT::Ticket->new(RT->SystemUser);
+    my ($tid) = $ticket->Create(
         Queue                    => $q->id,
         Subject                  => 'Test',
-        'CustomField-' . $cf->id => '2010-05-04 11:34:56',
-    ),
-    'create ticket with cf set to 2010-05-04 11:34:56'
-);
+        'CustomField-' . $cf->id => '2013-02-12',
+    );
 
-is( $ticket->CustomFieldValues->First->Content,
-    '2010-05-04', 'date in db only has date' );
+    set_fixed_time("2013-02-10T23:10:00Z");
+    my $tickets = RT::Tickets->new($user_m);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 1, 'found the ticket' );
+
+    set_fixed_time("2013-02-10T15:10:00Z");
+    $tickets = RT::Tickets->new($user_m);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 0, 'found no tickets' );
+
+    set_fixed_time("2013-02-10T23:10:00Z");
+    $tickets = RT::Tickets->new($user_b);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 0, 'found no tickets' );
+
+    set_fixed_time("2013-02-11T23:10:00Z");
+    $tickets = RT::Tickets->new($user_b);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 1, 'found the tickets' );
+}
 
diff --git a/t/customfields/date.t b/t/customfields/datetime.t
similarity index 71%
copy from t/customfields/date.t
copy to t/customfields/datetime.t
index 5a41d1f..5e4497d 100644
--- a/t/customfields/date.t
+++ b/t/customfields/datetime.t
@@ -21,14 +21,14 @@ my $user_b = RT::Test->load_or_create_user( Name => 'boston', Timezone => 'Ameri
 ok $user_b && $user_b->id;
 
 
-my $cf_name = 'A Date';
+my $cf_name = 'A Date and Time';
 my $cf;
 {
     $cf = RT::CustomField->new(RT->SystemUser);
     ok(
         $cf->Create(
             Name       => $cf_name,
-            Type       => 'Date',
+            Type       => 'DateTime',
             MaxValues  => 1,
             LookupType => RT::Ticket->CustomFieldLookupType,
         ),
@@ -42,14 +42,22 @@ my $cf;
     my ($id) = $ticket->Create(
         Queue                   => $q->id,
         Subject                 => 'Test',
-        'CustomField-'. $cf->id => '2013-02-11',
+        'CustomField-'. $cf->id => '2013-02-11 00:00:00',
     );
     my $cf_value = $ticket->CustomFieldValues($cf_name)->First;
-    is( $cf_value->Content, '2013-02-11', 'correct value' );
+    TODO: {
+        local $TODO = 'questionable result, should we change?';
+        # $Ticket->Created returns UTC, not user's date, but
+        # ticket has ->CreatedObj method to get all required
+        # transformation
+        # No more TODO.
+        is( $cf_value->Content, '2013-02-11 00:00:00', 'correct value' );
+    }
+    is( $cf_value->Content, '2013-02-10 20:00:00', 'correct value' );
 
     $ticket = RT::Ticket->new( RT::CurrentUser->new( $user_b ) );
     $ticket->Load($id);
-    is( $ticket->FirstCustomFieldValue($cf_name), '2013-02-11', 'correct value' );
+    is( $ticket->FirstCustomFieldValue($cf_name), '2013-02-10 20:00:00', 'correct value' );
 }
 
 # in moscow it's already Feb 11, so tomorrow is Feb 12
@@ -62,11 +70,7 @@ set_fixed_time("2013-02-10T23:10:00Z");
         'CustomField-'. $cf->id => 'tomorrow',
     );
     my $cf_value = $ticket->CustomFieldValues($cf_name)->First;
-    is( $cf_value->Content, '2013-02-12', 'correct value' );
-
-    $ticket = RT::Ticket->new( RT::CurrentUser->new( $user_b ) );
-    $ticket->Load($id);
-    is( $ticket->FirstCustomFieldValue($cf_name), '2013-02-12', 'correct value' );
+    is( $cf_value->Content, '2013-02-11 23:10:00', 'correct value' );
 }
 
 done_testing();
diff --git a/t/customfields/datetime_search.t b/t/customfields/datetime_search.t
index f3efa77..6b37cf1 100644
--- a/t/customfields/datetime_search.t
+++ b/t/customfields/datetime_search.t
@@ -1,17 +1,30 @@
+use Test::MockTime qw(set_fixed_time restore_time);
 
 use warnings;
 use strict;
 
-use RT::Test nodata => 1, tests => 18;
+use RT::Test nodata => 1, tests => 30;
 RT->Config->Set( 'Timezone' => 'EST5EDT' ); # -04:00
 
-my $q = RT::Queue->new(RT->SystemUser);
-ok( $q->Create( Name => 'DateTimeCFTest' . $$ ), 'create queue' );
+RT::Test->set_rights(
+    { Principal => 'Everyone', Right => [qw(
+        SeeQueue ShowTicket CreateTicket SeeCustomField ModifyCustomField
+    )] },
+);
+
+my $q = RT::Test->load_or_create_queue( Name => 'General' );
+ok $q && $q->id, 'loaded or created a queue';
+
+my $user_m = RT::Test->load_or_create_user( Name => 'moscow', Timezone => 'Europe/Moscow' );
+ok $user_m && $user_m->id;
+
+my $user_b = RT::Test->load_or_create_user( Name => 'boston', Timezone => 'America/New_York' );
+ok $user_b && $user_b->id;
 
 my $cf = RT::CustomField->new(RT->SystemUser);
 ok(
     $cf->Create(
-        Name       => 'datetime-' . $$,
+        Name       => 'TestDateTime',
         Type       => 'DateTime',
         MaxValues  => 1,
         LookupType => RT::Ticket->CustomFieldLookupType,
@@ -156,3 +169,69 @@ while( my $ticket  = $tickets->Next ) {
     );
     is( $tickets->Count, 1, 'found the ticket with = 2010-06-22 01:00:01' );
 }
+
+# set timezone in all places to UTC
+{
+    RT->SystemUser->UserObj->__Set(Field => 'Timezone', Value => 'UTC')
+                                if RT->SystemUser->UserObj->Timezone;
+    RT->Config->Set( Timezone => 'UTC' );
+}
+
+# search by absolute date with '=', but date only
+{
+    my $ticket = RT::Ticket->new(RT->SystemUser);
+    my ($tid) = $ticket->Create(
+        Queue                    => $q->id,
+        Subject                  => 'Test',
+        'CustomField-' . $cf->id => '2013-02-11 23:14:15',
+    );
+    is $ticket->FirstCustomFieldValue($cf_name), '2013-02-11 23:14:15';
+
+    my $tickets = RT::Tickets->new($user_m);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = '2013-02-11' AND id = $tid");
+    is( $tickets->Count, 0);
+
+    $tickets = RT::Tickets->new($user_m);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = '2013-02-12' AND id = $tid");
+    is( $tickets->Count, 1);
+
+    $tickets = RT::Tickets->new($user_b);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = '2013-02-11' AND id = $tid");
+    is( $tickets->Count, 1);
+
+    $tickets = RT::Tickets->new($user_b);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = '2013-02-12' AND id = $tid");
+    is( $tickets->Count, 0);
+}
+
+# search by relative date with '=', but date only
+{
+    my $ticket = RT::Ticket->new(RT->SystemUser);
+    my ($tid) = $ticket->Create(
+        Queue                    => $q->id,
+        Subject                  => 'Test',
+        'CustomField-' . $cf->id => '2013-02-11 23:14:15',
+    );
+    is $ticket->FirstCustomFieldValue($cf_name), '2013-02-11 23:14:15';
+
+    set_fixed_time("2013-02-10T16:10:00Z");
+    my $tickets = RT::Tickets->new($user_m);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 0);
+
+    set_fixed_time("2013-02-10T23:10:00Z");
+    $tickets = RT::Tickets->new($user_m);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 1);
+
+    set_fixed_time("2013-02-10T23:10:00Z");
+    $tickets = RT::Tickets->new($user_b);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 1);
+
+    set_fixed_time("2013-02-10T02:10:00Z");
+    $tickets = RT::Tickets->new($user_b);
+    $tickets->FromSQL("'CustomField.{$cf_name}' = 'tomorrow' AND id = $tid");
+    is( $tickets->Count, 0);
+}
+

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


More information about the Rt-commit mailing list