[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