7 BEGIN {require 't/lifecycles/utils.pl'};
9 my $general = RT::Test->load_or_create_queue(
12 ok $general && $general->id, 'loaded or created a queue';
14 my $delivery = RT::Test->load_or_create_queue(
16 Lifecycle => 'delivery',
18 ok $delivery && $delivery->id, 'loaded or created a queue';
21 DBIx::SearchBuilder::Record::Cachable->FlushCache;
22 my $ticket = RT::Ticket->new( RT->SystemUser );
23 $ticket->Load( $_[0] );
24 return $ticket->Status;
27 my ($baseurl, $m) = RT::Test->started_ok;
28 ok $m->login, 'logged in';
30 diag "check basic API";
32 my $schema = $general->Lifecycle;
33 isa_ok($schema, 'RT::Lifecycle');
34 is $schema->Name, 'default', "it's a default schema";
36 $schema = $delivery->Lifecycle;
37 isa_ok($schema, 'RT::Lifecycle');
38 is $schema->Name, 'delivery', "it's a delivery schema";
41 diag "dates on create for default schema";
44 my $ticket = RT::Ticket->new( RT->SystemUser );
45 my ($id, $msg) = $ticket->Create(
46 Queue => $general->id,
50 ok $id, 'created a ticket';
51 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
52 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
55 my $ticket = RT::Ticket->new( RT->SystemUser );
56 my ($id, $msg) = $ticket->Create(
57 Queue => $general->id,
61 ok $id, 'created a ticket';
62 ok $ticket->StartedObj->Unix > 0, 'started is set';
63 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
66 my $ticket = RT::Ticket->new( RT->SystemUser );
67 my ($id, $msg) = $ticket->Create(
68 Queue => $general->id,
72 ok $id, 'created a ticket';
73 ok $ticket->StartedObj->Unix > 0, 'started is set';
74 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
77 my $test_date = '2008-11-28 12:00:00';
79 my $ticket = RT::Ticket->new( RT->SystemUser );
80 my ($id, $msg) = $ticket->Create(
81 Queue => $general->id,
84 Started => $test_date,
85 Resolved => $test_date,
87 ok $id, 'created a ticket';
88 is $ticket->StartedObj->ISO, $test_date, 'started is set';
89 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
92 my $ticket = RT::Ticket->new( RT->SystemUser );
93 my ($id, $msg) = $ticket->Create(
94 Queue => $general->id,
97 Started => $test_date,
98 Resolved => $test_date,
100 ok $id, 'created a ticket';
101 is $ticket->StartedObj->ISO, $test_date, 'started is set';
102 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
105 my $ticket = RT::Ticket->new( RT->SystemUser );
106 my ($id, $msg) = $ticket->Create(
107 Queue => $general->id,
109 Status => 'resolved',
110 Started => $test_date,
111 Resolved => $test_date,
113 ok $id, 'created a ticket';
114 is $ticket->StartedObj->ISO, $test_date, 'started is set';
115 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
119 diag "dates on create for delivery schema";
122 my $ticket = RT::Ticket->new( RT->SystemUser );
123 my ($id, $msg) = $ticket->Create(
124 Queue => $delivery->id,
128 ok $id, 'created a ticket';
129 is $ticket->StartedObj->Unix , 0, 'started is not set';
130 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set';
134 my $ticket = RT::Ticket->new( RT->SystemUser );
135 my ($id, $txn, $msg) = $ticket->Create(
136 Queue => $delivery->id,
139 ok $id, 'created a ticket';
141 is $ticket->Status, 'ordered', "Status is ordered";
142 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
143 ok($statusval,$statusmsg);
144 ok $ticket->StartedObj->Unix > 0, 'started is set to ' .$ticket->StartedObj->AsString ;
145 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set';
148 my $ticket = RT::Ticket->new( RT->SystemUser );
149 my ($id, $msg) = $ticket->Create(
150 Queue => $delivery->id,
153 ok $id, 'created a ticket';
155 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
156 ok($statusval,$statusmsg);
158 ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
159 ok($statusval,$statusmsg);
161 ok $ticket->StartedObj->Unix > 0, 'started is set';
162 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
165 my $test_date = '2008-11-28 12:00:00';
167 my $ticket = RT::Ticket->new( RT->SystemUser );
168 my ($id, $statusmsg) = $ticket->Create(
169 Queue => $delivery->id,
172 Started => $test_date,
173 Resolved => $test_date,
175 ok $id, 'created a ticket';
176 is $ticket->StartedObj->ISO, $test_date, 'started is set';
177 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
180 my $ticket = RT::Ticket->new( RT->SystemUser );
181 my ($id, $msg) = $ticket->Create(
182 Queue => $delivery->id,
185 Started => $test_date,
186 Resolved => $test_date,
188 ok $id, 'created a ticket';
189 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
190 ok($statusval,$statusmsg);
191 is $ticket->StartedObj->ISO, $test_date, 'started is set';
192 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
195 my $ticket = RT::Ticket->new( RT->SystemUser );
196 my ($id, $msg) = $ticket->Create(
197 Queue => $delivery->id,
199 Started => $test_date,
200 Resolved => $test_date,
202 ok $id, 'created a ticket';
203 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
204 ok($statusval,$statusmsg);
205 ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
206 ok($statusval,$statusmsg);
207 is $ticket->StartedObj->ISO, $test_date, 'started is set';
209 local $TODO = "we should decide if we set resolved repeatedly";
210 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
215 diag "dates on status change for default schema";
217 my $ticket = RT::Ticket->new( RT->SystemUser );
218 my ($id, $msg) = $ticket->Create(
219 Queue => $general->id,
223 ok $id, 'created a ticket';
224 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
225 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
227 (my $status, $msg) = $ticket->SetStatus('open');
228 ok $status, 'changed status' or diag "error: $msg";
229 ok $ticket->StartedObj->Unix > 0, 'started is set';
230 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
232 my $started = $ticket->StartedObj->Unix;
234 ($status, $msg) = $ticket->SetStatus('stalled');
235 ok $status, 'changed status' or diag "error: $msg";
236 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
237 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
239 ($status, $msg) = $ticket->SetStatus('open');
240 ok $status, 'changed status' or diag "error: $msg";
241 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
242 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
244 ($status, $msg) = $ticket->SetStatus('resolved');
245 ok $status, 'changed status' or diag "error: $msg";
246 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
247 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
250 diag "dates on status change for delivery schema";
252 my $ticket = RT::Ticket->new( RT->SystemUser );
253 my ($id, $msg) = $ticket->Create(
254 Queue => $delivery->id,
258 ok $id, 'created a ticket';
259 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
260 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
262 (my $status, $msg) = $ticket->SetStatus('delayed');
263 ok $status, 'changed status' or diag "error: $msg";
264 ok $ticket->StartedObj->Unix > 0, 'started is set';
265 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
267 my $started = $ticket->StartedObj->Unix;
269 ($status, $msg) = $ticket->SetStatus('on way');
270 ok $status, 'changed status' or diag "error: $msg";
271 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
272 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
274 ($status, $msg) = $ticket->SetStatus('delivered');
275 ok $status, 'changed status' or diag "error: $msg";
276 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
277 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
280 diag "add partial map between general->delivery";
282 my $schemas = RT->Config->Get('Lifecycles');
283 $schemas->{'__maps__'} = {
284 'default -> delivery' => {
287 'delivery -> default' => {
288 'on way' => 'resolved',
291 RT::Lifecycle->FillCache;
294 diag "check date changes on moving a ticket";
296 my $ticket = RT::Ticket->new( RT->SystemUser );
297 my ($id, $msg) = $ticket->Create(
298 Queue => $general->id,
302 ok $id, 'created a ticket';
303 ok $ticket->StartedObj->Unix <= 0, 'started is not set';
304 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
306 (my $status, $msg) = $ticket->SetQueue( $delivery->id );
307 ok $status, "moved ticket between queues with different schemas";
308 is $ticket->Status, 'on way', 'status has been changed';
309 ok $ticket->StartedObj->Unix > 0, 'started is set';
310 ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set';
312 ($status, $msg) = $ticket->SetQueue( $general->id );
313 ok $status, "moved ticket between queues with different schemas";
314 is $ticket->Status, 'resolved', 'status has been changed';
315 ok $ticket->StartedObj->Unix > 0, 'started is set';
316 ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';