4 BEGIN {require 't/lifecycles/utils.pl'};
6 my $general = RT::Test->load_or_create_queue(
9 ok $general && $general->id, 'loaded or created a queue';
11 my $delivery = RT::Test->load_or_create_queue(
13 Lifecycle => 'delivery',
15 ok $delivery && $delivery->id, 'loaded or created a queue';
18 DBIx::SearchBuilder::Record::Cachable->FlushCache;
19 my $ticket = RT::Ticket->new( RT->SystemUser );
20 $ticket->Load( $_[0] );
21 return $ticket->Status;
24 diag "check basic API";
26 my $schema = $general->LifecycleObj;
27 isa_ok($schema, 'RT::Lifecycle');
28 is $schema->Name, 'default', "it's a default schema";
30 $schema = $delivery->LifecycleObj;
31 isa_ok($schema, 'RT::Lifecycle');
32 is $schema->Name, 'delivery', "it's a delivery schema";
35 diag "dates on create for default schema";
38 my $ticket = RT::Ticket->new( RT->SystemUser );
39 my ($id, $msg) = $ticket->Create(
40 Queue => $general->id,
44 ok $id, 'created a ticket';
45 ok !$ticket->StartedObj->IsSet, 'started is not set';
46 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
49 my $ticket = RT::Ticket->new( RT->SystemUser );
50 my ($id, $msg) = $ticket->Create(
51 Queue => $general->id,
55 ok $id, 'created a ticket';
56 ok $ticket->StartedObj->IsSet, 'started is set';
57 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
60 my $ticket = RT::Ticket->new( RT->SystemUser );
61 my ($id, $msg) = $ticket->Create(
62 Queue => $general->id,
66 ok $id, 'created a ticket';
67 ok $ticket->StartedObj->IsSet, 'started is set';
68 ok $ticket->ResolvedObj->IsSet, 'resolved is set';
71 my $test_date = '2008-11-28 12:00:00';
73 my $ticket = RT::Ticket->new( RT->SystemUser );
74 my ($id, $msg) = $ticket->Create(
75 Queue => $general->id,
78 Started => $test_date,
79 Resolved => $test_date,
81 ok $id, 'created a ticket';
82 is $ticket->StartedObj->ISO, $test_date, 'started is set';
83 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
86 my $ticket = RT::Ticket->new( RT->SystemUser );
87 my ($id, $msg) = $ticket->Create(
88 Queue => $general->id,
91 Started => $test_date,
92 Resolved => $test_date,
94 ok $id, 'created a ticket';
95 is $ticket->StartedObj->ISO, $test_date, 'started is set';
96 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
99 my $ticket = RT::Ticket->new( RT->SystemUser );
100 my ($id, $msg) = $ticket->Create(
101 Queue => $general->id,
103 Status => 'resolved',
104 Started => $test_date,
105 Resolved => $test_date,
107 ok $id, 'created a ticket';
108 is $ticket->StartedObj->ISO, $test_date, 'started is set';
109 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
113 diag "dates on create for delivery schema";
116 my $ticket = RT::Ticket->new( RT->SystemUser );
117 my ($id, $msg) = $ticket->Create(
118 Queue => $delivery->id,
122 ok $id, 'created a ticket';
123 is $ticket->StartedObj->Unix , 0, 'started is not set';
124 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set';
128 my $ticket = RT::Ticket->new( RT->SystemUser );
129 my ($id, $txn, $msg) = $ticket->Create(
130 Queue => $delivery->id,
133 ok $id, 'created a ticket';
135 is $ticket->Status, 'ordered', "Status is ordered";
136 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
137 ok($statusval,$statusmsg);
138 ok $ticket->StartedObj->IsSet, 'started is set to ' .$ticket->StartedObj->AsString ;
139 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set';
142 my $ticket = RT::Ticket->new( RT->SystemUser );
143 my ($id, $msg) = $ticket->Create(
144 Queue => $delivery->id,
147 ok $id, 'created a ticket';
149 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
150 ok($statusval,$statusmsg);
152 ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
153 ok($statusval,$statusmsg);
155 ok $ticket->StartedObj->IsSet, 'started is set';
156 ok $ticket->ResolvedObj->IsSet, 'resolved is set';
159 my $test_date = '2008-11-28 12:00:00';
161 my $ticket = RT::Ticket->new( RT->SystemUser );
162 my ($id, $statusmsg) = $ticket->Create(
163 Queue => $delivery->id,
166 Started => $test_date,
167 Resolved => $test_date,
169 ok $id, 'created a ticket';
170 is $ticket->StartedObj->ISO, $test_date, 'started is set';
171 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
174 my $ticket = RT::Ticket->new( RT->SystemUser );
175 my ($id, $msg) = $ticket->Create(
176 Queue => $delivery->id,
179 Started => $test_date,
180 Resolved => $test_date,
182 ok $id, 'created a ticket';
183 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
184 ok($statusval,$statusmsg);
185 is $ticket->StartedObj->ISO, $test_date, 'started is set';
186 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
189 my $ticket = RT::Ticket->new( RT->SystemUser );
190 my ($id, $msg) = $ticket->Create(
191 Queue => $delivery->id,
193 Started => $test_date,
194 Resolved => $test_date,
196 ok $id, 'created a ticket';
197 my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
198 ok($statusval,$statusmsg);
199 ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
200 ok($statusval,$statusmsg);
201 is $ticket->StartedObj->ISO, $test_date, 'started is set';
203 local $TODO = "we should decide if we set resolved repeatedly";
204 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
209 diag "dates on status change for default schema";
211 my $ticket = RT::Ticket->new( RT->SystemUser );
212 my ($id, $msg) = $ticket->Create(
213 Queue => $general->id,
217 ok $id, 'created a ticket';
218 ok !$ticket->StartedObj->IsSet, 'started is not set';
219 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
221 (my $status, $msg) = $ticket->SetStatus('open');
222 ok $status, 'changed status' or diag "error: $msg";
223 ok $ticket->StartedObj->IsSet, 'started is set';
224 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
226 my $started = $ticket->StartedObj->Unix;
228 ($status, $msg) = $ticket->SetStatus('stalled');
229 ok $status, 'changed status' or diag "error: $msg";
230 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
231 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
233 ($status, $msg) = $ticket->SetStatus('open');
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->IsSet, 'resolved is not set';
238 ($status, $msg) = $ticket->SetStatus('resolved');
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->IsSet, 'resolved is set';
244 diag "dates on status change for delivery schema";
246 my $ticket = RT::Ticket->new( RT->SystemUser );
247 my ($id, $msg) = $ticket->Create(
248 Queue => $delivery->id,
252 ok $id, 'created a ticket';
253 ok !$ticket->StartedObj->IsSet, 'started is not set';
254 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
256 (my $status, $msg) = $ticket->SetStatus('delayed');
257 ok $status, 'changed status' or diag "error: $msg";
258 ok $ticket->StartedObj->IsSet, 'started is set';
259 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
261 my $started = $ticket->StartedObj->Unix;
263 ($status, $msg) = $ticket->SetStatus('on way');
264 ok $status, 'changed status' or diag "error: $msg";
265 is $ticket->StartedObj->Unix, $started, 'started is set and the same';
266 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
268 ($status, $msg) = $ticket->SetStatus('delivered');
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->IsSet, 'resolved is set';
274 diag "add partial map between general->delivery";
276 my $schemas = RT->Config->Get('Lifecycles');
277 $schemas->{'__maps__'} = {
278 'default -> delivery' => {
281 'delivery -> default' => {
282 'on way' => 'resolved',
285 RT::Lifecycle->FillCache;
288 diag "check date changes on moving a ticket";
290 my $ticket = RT::Ticket->new( RT->SystemUser );
291 my ($id, $msg) = $ticket->Create(
292 Queue => $general->id,
296 ok $id, 'created a ticket';
297 ok !$ticket->StartedObj->IsSet, 'started is not set';
298 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
300 (my $status, $msg) = $ticket->SetQueue( $delivery->id );
301 ok $status, "moved ticket between queues with different schemas";
302 is $ticket->Status, 'on way', 'status has been changed';
303 ok $ticket->StartedObj->IsSet, 'started is set';
304 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
306 ($status, $msg) = $ticket->SetQueue( $general->id );
307 ok $status, "moved ticket between queues with different schemas";
308 is $ticket->Status, 'resolved', 'status has been changed';
309 ok $ticket->StartedObj->IsSet, 'started is set';
310 ok $ticket->ResolvedObj->IsSet, 'resolved is set';