6 use RT::Test tests => 51;
8 RT->Config->Set( 'Timezone' => 'EST5EDT' ); # -04:00
9 my ($baseurl, $m) = RT::Test->started_ok;
10 ok $m->login, 'logged in as root';
11 my $root = RT::User->new( RT->SystemUser );
12 ok( $root->Load('root'), 'load root user' );
14 my $cf_name = 'test cf datetime';
18 if ( ( $ENV{RT_TEST_WEB_HANDLER} || '' ) =~ /^apache(\+mod_perl)?$/
19 && RT::Test::Apache->apache_mpm_type =~ /^(?:worker|event)$/ )
22 'localizing $ENV{TZ} does *not* work with mod_perl+mpm_event or mod_perl+mpm_worker';
28 $m->follow_link( id => 'tools-config-custom-fields-create');
30 form_name => "ModifyCustomField",
33 TypeComposite => 'DateTime-1',
34 LookupType => 'RT::Queue-RT::Ticket',
37 $m->content_contains('Object created', 'created CF sucessfully' );
38 $cfid = $m->form_name('ModifyCustomField')->value('id');
39 ok $cfid, "found id of the CF in the form, it's #$cfid";
42 diag "apply the CF to General queue";
43 my $queue = RT::Test->load_or_create_queue( Name => 'General' );
44 ok $queue && $queue->id, 'loaded or created queue';
47 $m->follow_link( text => 'Queues' );
48 $m->title_is(q/Admin queues/, 'admin-queues screen');
49 $m->follow_link( text => 'General' );
50 $m->title_is(q/Configuration for queue General/, 'admin-queue: general');
51 $m->follow_link( text => 'Ticket Custom Fields' );
52 $m->title_is(q/Custom Fields for queue General/, 'admin-queue: general cfid');
54 $m->form_name('EditCustomFields');
55 $m->tick( "AddCustomField" => $cfid );
56 $m->click('UpdateCFs');
58 $m->content_contains('Object created', 'TCF added to the queue' );
61 diag 'check valid inputs with various timezones in ticket create page';
66 form_name => "CreateTicketInQueue",
67 fields => { Queue => 'General' },
69 $m->content_contains('Select datetime', 'has cf field');
72 form_name => "TicketCreate",
74 Subject => 'test 2010-05-04 13:00:01',
76 "Object-RT::Ticket--CustomField-$cfid-Values" => '2010-05-04 13:00:01',
79 ok( ($id) = $m->content =~ /Ticket (\d+) created/,
80 "created ticket $id" );
82 $ticket = RT::Ticket->new( RT->SystemUser );
87 $ticket->CustomFieldValues($cfid)->First->Content,
88 '2010-05-04 17:00:01',
89 'date in db is in UTC'
93 $m->content_contains('test cf datetime:', 'has cf datetime field on the page');
94 $m->content_contains('Tue May 04 13:00:01 2010', 'has cf datetime value on the page');
96 $root->SetTimezone( 'Asia/Shanghai' );
97 # interesting that $m->reload doesn't work
98 $m->get_ok( $m->uri );
102 $m->content_contains( 'Wed May 05 01:00:01 2010',
103 'cf datetime value respects user timezone' );
107 form_name => "CreateTicketInQueue",
108 fields => { Queue => 'General' },
111 form_name => "TicketCreate",
113 Subject => 'test 2010-05-06 07:00:01',
115 "Object-RT::Ticket--CustomField-$cfid-Values" => '2010-05-06 07:00:01',
118 ok( ($id) = $m->content =~ /Ticket (\d+) created/,
119 "created ticket $id" );
120 $ticket = RT::Ticket->new( RT->SystemUser );
125 $ticket->CustomFieldValues($cfid)->First->Content,
126 '2010-05-05 23:00:01',
127 'date in db is in UTC'
131 $m->content_contains('test cf datetime:', 'has cf datetime field on the page');
132 $m->content_contains( 'Thu May 06 07:00:01 2010',
133 'cf datetime input respects user timezone' );
134 $root->SetTimezone( 'EST5EDT' ); # back to -04:00
135 $m->get_ok( $m->uri );
139 $m->content_contains( 'Wed May 05 19:00:01 2010',
140 'cf datetime value respects user timezone' );
145 diag 'check search build page';
147 $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
149 $m->form_name('BuildQuery');
151 $m->find_all_inputs( type => 'option', name_regex => qr/test cf datetime/ );
153 [ $cf_op->possible_values ],
159 $m->find_all_inputs( type => 'text', name_regex => qr/test cf datetime/ );
161 is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-04', }, 1 );
162 $m->content_contains( '2010-05-04', 'got the right ticket' );
163 $m->content_lacks( '2010-05-06', 'did not get the wrong ticket' );
165 my $shanghai = RT::Test->load_or_create_user(
167 Password => 'password',
168 Timezone => 'Asia/Shanghai',
170 ok( $shanghai->PrincipalObj->GrantRight(
171 Right => 'SuperUser',
172 Object => $RT::System,
174 $m->login( 'shanghai', 'password', logout => 1 );
176 is_results_number( { $cf_op->name => '<', $cf_field->name => '2010-05-07', }, 2 );
177 is_results_number( { $cf_op->name => '>', $cf_field->name => '2010-05-04', }, 2 );
181 is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05', }, 1 );
182 is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05 01:00:01', }, 1 );
186 { $cf_op->name => '=', $cf_field->name => '2010-05-05 02:00:01', }, 0 );
188 is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06', }, 1 );
189 is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 07:00:01', }, 1 );
190 is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 08:00:01', }, 0 );
193 diag 'check invalid inputs';
196 form_name => "CreateTicketInQueue",
197 fields => { Queue => 'General' },
199 my $form = $m->form_name("TicketCreate");
202 form_name => "TicketCreate",
206 "Object-RT::Ticket--CustomField-$cfid-Values" => 'foodate',
209 $m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully");
211 $m->content_contains('test cf datetime:', 'has cf datetime field on the page');
212 $m->content_lacks('foodate', 'invalid dates not set');
215 sub is_results_number {
216 local $Test::Builder::Level = $Test::Builder::Level + 1;
219 my $operator = shift;
223 $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' );
225 $m->form_name('BuildQuery');
228 button => 'DoSearch',
230 $m->content_contains( "Found $number ticket", "Found $number ticket" );
233 # to make $m->DESTROY happy