merging RT 4.0.6
[freeside.git] / rt / t / lifecycles / dates.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use Data::Dumper;
6
7 BEGIN {require 't/lifecycles/utils.pl'};
8
9 my $general = RT::Test->load_or_create_queue(
10     Name => 'General',
11 );
12 ok $general && $general->id, 'loaded or created a queue';
13
14 my $delivery = RT::Test->load_or_create_queue(
15     Name => 'delivery',
16     Lifecycle => 'delivery',
17 );
18 ok $delivery && $delivery->id, 'loaded or created a queue';
19
20 my $tstatus = sub {
21     DBIx::SearchBuilder::Record::Cachable->FlushCache;
22     my $ticket = RT::Ticket->new( RT->SystemUser );
23     $ticket->Load( $_[0] );
24     return $ticket->Status;
25 };
26
27 my ($baseurl, $m) = RT::Test->started_ok;
28 ok $m->login, 'logged in';
29
30 diag "check basic API";
31 {
32     my $schema = $general->Lifecycle;
33     isa_ok($schema, 'RT::Lifecycle');
34     is $schema->Name, 'default', "it's a default schema";
35
36     $schema = $delivery->Lifecycle;
37     isa_ok($schema, 'RT::Lifecycle');
38     is $schema->Name, 'delivery', "it's a delivery schema";
39 }
40
41 diag "dates on create for default schema";
42 {
43     {
44         my $ticket = RT::Ticket->new( RT->SystemUser );
45         my ($id, $msg) = $ticket->Create(
46             Queue => $general->id,
47             Subject => 'test',
48             Status => 'new',
49         );
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';
53     }
54     {
55         my $ticket = RT::Ticket->new( RT->SystemUser );
56         my ($id, $msg) = $ticket->Create(
57             Queue => $general->id,
58             Subject => 'test',
59             Status => 'open',
60         );
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';
64     }
65     {
66         my $ticket = RT::Ticket->new( RT->SystemUser );
67         my ($id, $msg) = $ticket->Create(
68             Queue => $general->id,
69             Subject => 'test',
70             Status => 'resolved',
71         );
72         ok $id, 'created a ticket';
73         ok $ticket->StartedObj->Unix > 0, 'started is set';
74         ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
75     }
76
77     my $test_date = '2008-11-28 12:00:00';
78     {
79         my $ticket = RT::Ticket->new( RT->SystemUser );
80         my ($id, $msg) = $ticket->Create(
81             Queue => $general->id,
82             Subject => 'test',
83             Status => 'new',
84             Started => $test_date,
85             Resolved => $test_date,
86         );
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';
90     }
91     {
92         my $ticket = RT::Ticket->new( RT->SystemUser );
93         my ($id, $msg) = $ticket->Create(
94             Queue => $general->id,
95             Subject => 'test',
96             Status => 'open',
97             Started => $test_date,
98             Resolved => $test_date,
99         );
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';
103     }
104     {
105         my $ticket = RT::Ticket->new( RT->SystemUser );
106         my ($id, $msg) = $ticket->Create(
107             Queue => $general->id,
108             Subject => 'test',
109             Status => 'resolved',
110             Started => $test_date,
111             Resolved => $test_date,
112         );
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';
116     }
117 }
118
119 diag "dates on create for delivery schema";
120 {
121     {
122         my $ticket = RT::Ticket->new( RT->SystemUser );
123         my ($id, $msg) = $ticket->Create(
124             Queue => $delivery->id,
125             Subject => 'test',
126             Status => 'ordered',
127         );
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';
131
132     }
133     {
134         my $ticket = RT::Ticket->new( RT->SystemUser );
135         my ($id, $txn, $msg) = $ticket->Create(
136             Queue => $delivery->id,
137             Subject => 'test',
138         );
139         ok $id, 'created a ticket';
140         diag($msg);
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';
146     }
147     {
148         my $ticket = RT::Ticket->new( RT->SystemUser );
149         my ($id, $msg) = $ticket->Create(
150             Queue => $delivery->id,
151             Subject => 'test',
152         );
153         ok $id, 'created a ticket';
154
155         my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
156         ok($statusval,$statusmsg);
157
158         ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
159         ok($statusval,$statusmsg);
160
161         ok $ticket->StartedObj->Unix > 0, 'started is set';
162         ok $ticket->ResolvedObj->Unix > 0, 'resolved is set';
163     }
164
165     my $test_date = '2008-11-28 12:00:00';
166     {
167         my $ticket = RT::Ticket->new( RT->SystemUser );
168         my ($id, $statusmsg) = $ticket->Create(
169             Queue => $delivery->id,
170             Subject => 'test',
171             Status => 'ordered',
172             Started => $test_date,
173             Resolved => $test_date,
174         );
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';
178     }
179     {
180         my $ticket = RT::Ticket->new( RT->SystemUser );
181         my ($id, $msg) = $ticket->Create(
182             Queue => $delivery->id,
183             Subject => 'test',
184             Status => 'ordered',
185             Started => $test_date,
186             Resolved => $test_date,
187         );
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';
193     }
194     {
195         my $ticket = RT::Ticket->new( RT->SystemUser );
196         my ($id, $msg) = $ticket->Create(
197             Queue => $delivery->id,
198             Subject => 'test',
199             Started => $test_date,
200             Resolved => $test_date,
201         );
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';
208         TODO: {
209             local $TODO = "we should decide if we set resolved repeatedly";
210             is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
211         };
212     }
213 }
214
215 diag "dates on status change for default schema";
216 {
217     my $ticket = RT::Ticket->new( RT->SystemUser );
218     my ($id, $msg) = $ticket->Create(
219         Queue => $general->id,
220         Subject => 'test',
221         Status => 'new',
222     );
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';
226
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';
231
232     my $started = $ticket->StartedObj->Unix;
233
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';
238
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';
243
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';
248 }
249
250 diag "dates on status change for delivery schema";
251 {
252     my $ticket = RT::Ticket->new( RT->SystemUser );
253     my ($id, $msg) = $ticket->Create(
254         Queue => $delivery->id,
255         Subject => 'test',
256         Status => 'ordered',
257     );
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';
261
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';
266
267     my $started = $ticket->StartedObj->Unix;
268
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';
273
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';
278 }
279
280 diag "add partial map between general->delivery";
281 {
282     my $schemas = RT->Config->Get('Lifecycles');
283     $schemas->{'__maps__'} = {
284         'default -> delivery' => {
285             new => 'on way',
286         },
287         'delivery -> default' => {
288             'on way' => 'resolved',
289         },
290     };
291     RT::Lifecycle->FillCache;
292 }
293
294 diag "check date changes on moving a ticket";
295 {
296     my $ticket = RT::Ticket->new( RT->SystemUser );
297     my ($id, $msg) = $ticket->Create(
298         Queue => $general->id,
299         Subject => 'test',
300         Status => 'new',
301     );
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';
305
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';
311
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';
317 }