diff options
Diffstat (limited to 'rt/t/web/cf_datetime.t')
-rw-r--r-- | rt/t/web/cf_datetime.t | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/rt/t/web/cf_datetime.t b/rt/t/web/cf_datetime.t new file mode 100644 index 000000000..9781c5e2e --- /dev/null +++ b/rt/t/web/cf_datetime.t @@ -0,0 +1,235 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use RT::Test tests => 51; + +RT->Config->Set( 'Timezone' => 'EST5EDT' ); # -04:00 +my ($baseurl, $m) = RT::Test->started_ok; +ok $m->login, 'logged in as root'; +my $root = RT::User->new( RT->SystemUser ); +ok( $root->Load('root'), 'load root user' ); + +my $cf_name = 'test cf datetime'; + +my $why; + +if ( ( $ENV{RT_TEST_WEB_HANDLER} || '' ) =~ /^apache(\+mod_perl)?$/ + && RT::Test::Apache->apache_mpm_type =~ /^(?:worker|event)$/ ) +{ + $why = +'localizing $ENV{TZ} does *not* work with mod_perl+mpm_event or mod_perl+mpm_worker'; +} + +my $cfid; +diag "Create a CF"; +{ + $m->follow_link( id => 'tools-config-custom-fields-create'); + $m->submit_form( + form_name => "ModifyCustomField", + fields => { + Name => $cf_name, + TypeComposite => 'DateTime-1', + LookupType => 'RT::Queue-RT::Ticket', + }, + ); + $m->content_contains('Object created', 'created CF sucessfully' ); + $cfid = $m->form_name('ModifyCustomField')->value('id'); + ok $cfid, "found id of the CF in the form, it's #$cfid"; +} + +diag "apply the CF to General queue"; +my $queue = RT::Test->load_or_create_queue( Name => 'General' ); +ok $queue && $queue->id, 'loaded or created queue'; + +{ + $m->follow_link( text => 'Queues' ); + $m->title_is(q/Admin queues/, 'admin-queues screen'); + $m->follow_link( text => 'General' ); + $m->title_is(q/Configuration for queue General/, 'admin-queue: general'); + $m->follow_link( text => 'Ticket Custom Fields' ); + $m->title_is(q/Custom Fields for queue General/, 'admin-queue: general cfid'); + + $m->form_name('EditCustomFields'); + $m->tick( "AddCustomField" => $cfid ); + $m->click('UpdateCFs'); + + $m->content_contains('Object created', 'TCF added to the queue' ); +} + +diag 'check valid inputs with various timezones in ticket create page'; +{ + my ( $ticket, $id ); + + $m->submit_form( + form_name => "CreateTicketInQueue", + fields => { Queue => 'General' }, + ); + $m->content_contains('Select datetime', 'has cf field'); + + $m->submit_form( + form_name => "TicketCreate", + fields => { + Subject => 'test 2010-05-04 13:00:01', + Content => 'test', + "Object-RT::Ticket--CustomField-$cfid-Values" => '2010-05-04 13:00:01', + }, + ); + ok( ($id) = $m->content =~ /Ticket (\d+) created/, + "created ticket $id" ); + + $ticket = RT::Ticket->new( RT->SystemUser ); + $ticket->Load($id); + TODO: { + local $TODO = $why; + is( + $ticket->CustomFieldValues($cfid)->First->Content, + '2010-05-04 17:00:01', + 'date in db is in UTC' + ); + } + + $m->content_contains('test cf datetime:', 'has cf datetime field on the page'); + $m->content_contains('Tue May 04 13:00:01 2010', 'has cf datetime value on the page'); + + $root->SetTimezone( 'Asia/Shanghai' ); + # interesting that $m->reload doesn't work + $m->get_ok( $m->uri ); + + TODO: { + local $TODO = $why; + $m->content_contains( 'Wed May 05 01:00:01 2010', + 'cf datetime value respects user timezone' ); + } + + $m->submit_form( + form_name => "CreateTicketInQueue", + fields => { Queue => 'General' }, + ); + $m->submit_form( + form_name => "TicketCreate", + fields => { + Subject => 'test 2010-05-06 07:00:01', + Content => 'test', + "Object-RT::Ticket--CustomField-$cfid-Values" => '2010-05-06 07:00:01', + }, + ); + ok( ($id) = $m->content =~ /Ticket (\d+) created/, + "created ticket $id" ); + $ticket = RT::Ticket->new( RT->SystemUser ); + $ticket->Load($id); + TODO: { + local $TODO = $why; + is( + $ticket->CustomFieldValues($cfid)->First->Content, + '2010-05-05 23:00:01', + 'date in db is in UTC' + ); + } + + $m->content_contains('test cf datetime:', 'has cf datetime field on the page'); + $m->content_contains( 'Thu May 06 07:00:01 2010', + 'cf datetime input respects user timezone' ); + $root->SetTimezone( 'EST5EDT' ); # back to -04:00 + $m->get_ok( $m->uri ); + + TODO: { + local $TODO = $why; + $m->content_contains( 'Wed May 05 19:00:01 2010', + 'cf datetime value respects user timezone' ); + } +} + + +diag 'check search build page'; +{ + $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); + + $m->form_name('BuildQuery'); + my ($cf_op) = + $m->find_all_inputs( type => 'option', name_regex => qr/test cf datetime/ ); + is_deeply( + [ $cf_op->possible_values ], + [ '<', '=', '>' ], + 'right oprators' + ); + + my ($cf_field) = + $m->find_all_inputs( type => 'text', name_regex => qr/test cf datetime/ ); + + is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-04', }, 1 ); + $m->content_contains( '2010-05-04', 'got the right ticket' ); + $m->content_lacks( '2010-05-06', 'did not get the wrong ticket' ); + + my $shanghai = RT::Test->load_or_create_user( + Name => 'shanghai', + Password => 'password', + Timezone => 'Asia/Shanghai', + ); + ok( $shanghai->PrincipalObj->GrantRight( + Right => 'SuperUser', + Object => $RT::System, + )); + $m->login( 'shanghai', 'password', logout => 1 ); + + is_results_number( { $cf_op->name => '<', $cf_field->name => '2010-05-07', }, 2 ); + is_results_number( { $cf_op->name => '>', $cf_field->name => '2010-05-04', }, 2 ); + + TODO: { + local $TODO = $why; + is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05', }, 1 ); + is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05 01:00:01', }, 1 ); + } + + is_results_number( + { $cf_op->name => '=', $cf_field->name => '2010-05-05 02:00:01', }, 0 ); + + is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06', }, 1 ); + is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 07:00:01', }, 1 ); + is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 08:00:01', }, 0 ); +} + +diag 'check invalid inputs'; +{ + $m->submit_form( + form_name => "CreateTicketInQueue", + fields => { Queue => 'General' }, + ); + my $form = $m->form_name("TicketCreate"); + + $m->submit_form( + form_name => "TicketCreate", + fields => { + Subject => 'test', + Content => 'test', + "Object-RT::Ticket--CustomField-$cfid-Values" => 'foodate', + }, + ); + $m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully"); + + $m->content_contains('test cf datetime:', 'has cf datetime field on the page'); + $m->content_lacks('foodate', 'invalid dates not set'); +} + +sub is_results_number { + local $Test::Builder::Level = $Test::Builder::Level + 1; + my $fields = shift; + my $number = shift; + my $operator = shift; + my $value = shift; + { + local $TODO; + $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); + } + $m->form_name('BuildQuery'); + $m->submit_form( + fields => $fields, + button => 'DoSearch', + ); + $m->content_contains( "Found $number ticket", "Found $number ticket" ); +} + +# to make $m->DESTROY happy +undef $m; + |