6 BEGIN {require 't/lifecycles/utils.pl'};
8 my $general = RT::Test->load_or_create_queue(
11 ok $general && $general->id, 'loaded or created a queue';
13 my $delivery = RT::Test->load_or_create_queue(
15 Lifecycle => 'delivery',
17 ok $delivery && $delivery->id, 'loaded or created a queue';
20 DBIx::SearchBuilder::Record::Cachable->FlushCache;
21 my $ticket = RT::Ticket->new( RT->SystemUser );
22 $ticket->Load( $_[0] );
23 return $ticket->Status;
26 my ($baseurl, $m) = RT::Test->started_ok;
27 ok $m->login, 'logged in';
29 diag "check basic API";
31 my $schema = $general->Lifecycle;
32 isa_ok($schema, 'RT::Lifecycle');
33 is $schema->Name, 'default', "it's a default schema";
35 $schema = $delivery->Lifecycle;
36 isa_ok($schema, 'RT::Lifecycle');
37 is $schema->Name, 'delivery', "it's a delivery schema";
40 diag "dates on create for default schema";
43 my $ticket = RT::Ticket->new( RT->SystemUser );
44 my ($id, $msg) = $ticket->Create(
45 Queue => $general->id,
49 ok $id, 'created a ticket';
50 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
51 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
54 my $ticket = RT::Ticket->new( RT->SystemUser );
55 my ($id, $msg) = $ticket->Create(
56 Queue => $general->id,
60 ok $id, 'created a ticket';
61 ok $ticket->StartedObj->Unix > 0, 'started is set';
62 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
65 my $ticket = RT::Ticket->new( RT->SystemUser );
66 my ($id, $msg) = $ticket->Create(
67 Queue => $general->id,
71 ok $id, 'created a ticket';
72 ok $ticket->StartedObj->Unix > 0, 'started is set';
73 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
76 my $test_date = '2008-11-28 12:00:00';
78 my $ticket = RT::Ticket->new( RT->SystemUser );
79 my ($id, $msg) = $ticket->Create(
80 Queue => $general->id,
83 Started => $test_date,
84 Resolved => $test_date,
86 ok $id, 'created a ticket';
87 is $ticket->StartedObj->ISO, $test_date, 'started is set';
88 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
91 my $ticket = RT::Ticket->new( RT->SystemUser );
92 my ($id, $msg) = $ticket->Create(
93 Queue => $general->id,
96 Started => $test_date,
97 Resolved => $test_date,
99 ok $id, 'created a ticket';
100 is $ticket->StartedObj->ISO, $test_date, 'started is set';
101 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
104 my $ticket = RT::Ticket->new( RT->SystemUser );
105 my ($id, $msg) = $ticket->Create(
106 Queue => $general->id,
108 Status => 'resolved',
109 Started => $test_date,
110 Resolved => $test_date,
112 ok $id, 'created a ticket';
113 is $ticket->StartedObj->ISO, $test_date, 'started is set';
114 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
118 diag "dates on create for delivery schema";
121 my $ticket = RT::Ticket->new( RT->SystemUser );
122 my ($id, $msg) = $ticket->Create(
123 Queue => $delivery->id,
127 ok $id, 'created a ticket';
128 is $ticket->StartedObj->Unix , 0, 'started is not set';
129 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set';
133 my $ticket = RT::Ticket->new( RT->SystemUser );
134 my ($id, $txn, $msg) = $ticket->Create(
135 Queue => $delivery->id,
138 ok $id, 'created a ticket';
140 is $ticket->Status, 'ordered', "Status is ordered";
141 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
142 ok($statusval,$statusmsg);
143 ok $ticket->StartedObj->Unix > 0, 'started is set to ' .$ticket->StartedObj->AsString ;
144 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set';
147 my $ticket = RT::Ticket->new( RT->SystemUser );
148 my ($id, $msg) = $ticket->Create(
149 Queue => $delivery->id,
152 ok $id, 'created a ticket';
154 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
155 ok($statusval,$statusmsg);
157 ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
158 ok($statusval,$statusmsg);
160 ok $ticket->StartedObj->Unix > 0, 'started is set';
161 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
164 my $test_date = '2008-11-28 12:00:00';
166 my $ticket = RT::Ticket->new( RT->SystemUser );
167 my ($id, $statusmsg) = $ticket->Create(
168 Queue => $delivery->id,
171 Started => $test_date,
172 Resolved => $test_date,
174 ok $id, 'created a ticket';
175 is $ticket->StartedObj->ISO, $test_date, 'started is set';
176 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
179 my $ticket = RT::Ticket->new( RT->SystemUser );
180 my ($id, $msg) = $ticket->Create(
181 Queue => $delivery->id,
184 Started => $test_date,
185 Resolved => $test_date,
187 ok $id, 'created a ticket';
188 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
189 ok($statusval,$statusmsg);
190 is $ticket->StartedObj->ISO, $test_date, 'started is set';
191 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
194 my $ticket = RT::Ticket->new( RT->SystemUser );
195 my ($id, $msg) = $ticket->Create(
196 Queue => $delivery->id,
198 Started => $test_date,
199 Resolved => $test_date,
201 ok $id, 'created a ticket';
202 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
203 ok($statusval,$statusmsg);
204 ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
205 ok($statusval,$statusmsg);
206 is $ticket->StartedObj->ISO, $test_date, 'started is set';
208 local $TODO = "we should decide if we set resolved repeatedly";
209 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
214 diag "dates on status change for default schema";
216 my $ticket = RT::Ticket->new( RT->SystemUser );
217 my ($id, $msg) = $ticket->Create(
218 Queue => $general->id,
222 ok $id, 'created a ticket';
223 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
224 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
226 (my $status, $msg) = $ticket->SetStatus('open');
227 ok $status, 'changed status' or diag "error: $msg";
228 ok $ticket->StartedObj->Unix > 0, 'started is set';
229 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
231 my $started = $ticket->StartedObj->Unix;
233 ($status, $msg) = $ticket->SetStatus('stalled');
234 ok $status, 'changed status' or diag "error: $msg";
235 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
236 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
238 ($status, $msg) = $ticket->SetStatus('open');
239 ok $status, 'changed status' or diag "error: $msg";
240 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
241 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
243 ($status, $msg) = $ticket->SetStatus('resolved');
244 ok $status, 'changed status' or diag "error: $msg";
245 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
246 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
249 diag "dates on status change for delivery schema";
251 my $ticket = RT::Ticket->new( RT->SystemUser );
252 my ($id, $msg) = $ticket->Create(
253 Queue => $delivery->id,
257 ok $id, 'created a ticket';
258 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
259 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
261 (my $status, $msg) = $ticket->SetStatus('delayed');
262 ok $status, 'changed status' or diag "error: $msg";
263 ok $ticket->StartedObj->Unix > 0, 'started is set';
264 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
266 my $started = $ticket->StartedObj->Unix;
268 ($status, $msg) = $ticket->SetStatus('on way');
269 ok $status, 'changed status' or diag "error: $msg";
270 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
271 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
273 ($status, $msg) = $ticket->SetStatus('delivered');
274 ok $status, 'changed status' or diag "error: $msg";
275 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
276 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
279 diag "add partial map between general->delivery";
281 my $schemas = RT->Config->Get('Lifecycles');
282 $schemas->{'__maps__'} = {
283 'default -> delivery' => {
286 'delivery -> default' => {
287 'on way' => 'resolved',
290 RT::Lifecycle->FillCache;
293 diag "check date changes on moving a ticket";
295 my $ticket = RT::Ticket->new( RT->SystemUser );
296 my ($id, $msg) = $ticket->Create(
297 Queue => $general->id,
301 ok $id, 'created a ticket';
302 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
303 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
305 (my $status, $msg) = $ticket->SetQueue( $delivery->id );
306 ok $status, "moved ticket between queues with different schemas";
307 is $ticket->Status, 'on way', 'status has been changed';
308 ok $ticket->StartedObj->Unix > 0, 'started is set';
309 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
311 ($status, $msg) = $ticket->SetQueue( $general->id );
312 ok $status, "moved ticket between queues with different schemas";
313 is $ticket->Status, 'resolved', 'status has been changed';
314 ok $ticket->StartedObj->Unix > 0, 'started is set';
315 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';