merge RT 4.2.11 and Header changes to disable RT javascript, RT#34237
[freeside.git] / rt / t / lifecycles / dates.t
1 use strict;
2 use warnings;
3
4 BEGIN {require 't/lifecycles/utils.pl'};
5
6 my $general = RT::Test->load_or_create_queue(
7     Name => 'General',
8 );
9 ok $general && $general->id, 'loaded or created a queue';
10
11 my $delivery = RT::Test->load_or_create_queue(
12     Name => 'delivery',
13     Lifecycle => 'delivery',
14 );
15 ok $delivery && $delivery->id, 'loaded or created a queue';
16
17 my $tstatus = sub {
18     DBIx::SearchBuilder::Record::Cachable->FlushCache;
19     my $ticket = RT::Ticket->new( RT->SystemUser );
20     $ticket->Load( $_[0] );
21     return $ticket->Status;
22 };
23
24 diag "check basic API";
25 {
26     my $schema = $general->LifecycleObj;
27     isa_ok($schema, 'RT::Lifecycle');
28     is $schema->Name, 'default', "it's a default schema";
29
30     $schema = $delivery->LifecycleObj;
31     isa_ok($schema, 'RT::Lifecycle');
32     is $schema->Name, 'delivery', "it's a delivery schema";
33 }
34
35 diag "dates on create for default schema";
36 {
37     {
38         my $ticket = RT::Ticket->new( RT->SystemUser );
39         my ($id, $msg) = $ticket->Create(
40             Queue => $general->id,
41             Subject => 'test',
42             Status => 'new',
43         );
44         ok $id, 'created a ticket';
45         ok !$ticket->StartedObj->IsSet, 'started is not set';
46         ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
47     }
48     {
49         my $ticket = RT::Ticket->new( RT->SystemUser );
50         my ($id, $msg) = $ticket->Create(
51             Queue => $general->id,
52             Subject => 'test',
53             Status => 'open',
54         );
55         ok $id, 'created a ticket';
56         ok $ticket->StartedObj->IsSet, 'started is set';
57         ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
58     }
59     {
60         my $ticket = RT::Ticket->new( RT->SystemUser );
61         my ($id, $msg) = $ticket->Create(
62             Queue => $general->id,
63             Subject => 'test',
64             Status => 'resolved',
65         );
66         ok $id, 'created a ticket';
67         ok $ticket->StartedObj->IsSet, 'started is set';
68         ok $ticket->ResolvedObj->IsSet, 'resolved is set';
69     }
70
71     my $test_date = '2008-11-28 12:00:00';
72     {
73         my $ticket = RT::Ticket->new( RT->SystemUser );
74         my ($id, $msg) = $ticket->Create(
75             Queue => $general->id,
76             Subject => 'test',
77             Status => 'new',
78             Started => $test_date,
79             Resolved => $test_date,
80         );
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';
84     }
85     {
86         my $ticket = RT::Ticket->new( RT->SystemUser );
87         my ($id, $msg) = $ticket->Create(
88             Queue => $general->id,
89             Subject => 'test',
90             Status => 'open',
91             Started => $test_date,
92             Resolved => $test_date,
93         );
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';
97     }
98     {
99         my $ticket = RT::Ticket->new( RT->SystemUser );
100         my ($id, $msg) = $ticket->Create(
101             Queue => $general->id,
102             Subject => 'test',
103             Status => 'resolved',
104             Started => $test_date,
105             Resolved => $test_date,
106         );
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';
110     }
111 }
112
113 diag "dates on create for delivery schema";
114 {
115     {
116         my $ticket = RT::Ticket->new( RT->SystemUser );
117         my ($id, $msg) = $ticket->Create(
118             Queue => $delivery->id,
119             Subject => 'test',
120             Status => 'ordered',
121         );
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';
125
126     }
127     {
128         my $ticket = RT::Ticket->new( RT->SystemUser );
129         my ($id, $txn, $msg) = $ticket->Create(
130             Queue => $delivery->id,
131             Subject => 'test',
132         );
133         ok $id, 'created a ticket';
134         diag($msg);
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';
140     }
141     {
142         my $ticket = RT::Ticket->new( RT->SystemUser );
143         my ($id, $msg) = $ticket->Create(
144             Queue => $delivery->id,
145             Subject => 'test',
146         );
147         ok $id, 'created a ticket';
148
149         my ($statusval,$statusmsg) = $ticket->SetStatus('on way');
150         ok($statusval,$statusmsg);
151
152         ($statusval,$statusmsg) = $ticket->SetStatus('delivered');
153         ok($statusval,$statusmsg);
154
155         ok $ticket->StartedObj->IsSet, 'started is set';
156         ok $ticket->ResolvedObj->IsSet, 'resolved is set';
157     }
158
159     my $test_date = '2008-11-28 12:00:00';
160     {
161         my $ticket = RT::Ticket->new( RT->SystemUser );
162         my ($id, $statusmsg) = $ticket->Create(
163             Queue => $delivery->id,
164             Subject => 'test',
165             Status => 'ordered',
166             Started => $test_date,
167             Resolved => $test_date,
168         );
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';
172     }
173     {
174         my $ticket = RT::Ticket->new( RT->SystemUser );
175         my ($id, $msg) = $ticket->Create(
176             Queue => $delivery->id,
177             Subject => 'test',
178             Status => 'ordered',
179             Started => $test_date,
180             Resolved => $test_date,
181         );
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';
187     }
188     {
189         my $ticket = RT::Ticket->new( RT->SystemUser );
190         my ($id, $msg) = $ticket->Create(
191             Queue => $delivery->id,
192             Subject => 'test',
193             Started => $test_date,
194             Resolved => $test_date,
195         );
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';
202         TODO: {
203             local $TODO = "we should decide if we set resolved repeatedly";
204             is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set';
205         };
206     }
207 }
208
209 diag "dates on status change for default schema";
210 {
211     my $ticket = RT::Ticket->new( RT->SystemUser );
212     my ($id, $msg) = $ticket->Create(
213         Queue => $general->id,
214         Subject => 'test',
215         Status => 'new',
216     );
217     ok $id, 'created a ticket';
218     ok !$ticket->StartedObj->IsSet, 'started is not set';
219     ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
220
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';
225
226     my $started = $ticket->StartedObj->Unix;
227
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';
232
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';
237
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';
242 }
243
244 diag "dates on status change for delivery schema";
245 {
246     my $ticket = RT::Ticket->new( RT->SystemUser );
247     my ($id, $msg) = $ticket->Create(
248         Queue => $delivery->id,
249         Subject => 'test',
250         Status => 'ordered',
251     );
252     ok $id, 'created a ticket';
253     ok !$ticket->StartedObj->IsSet, 'started is not set';
254     ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
255
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';
260
261     my $started = $ticket->StartedObj->Unix;
262
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';
267
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';
272 }
273
274 diag "add partial map between general->delivery";
275 {
276     my $schemas = RT->Config->Get('Lifecycles');
277     $schemas->{'__maps__'} = {
278         'default -> delivery' => {
279             new => 'on way',
280         },
281         'delivery -> default' => {
282             'on way' => 'resolved',
283         },
284     };
285     RT::Lifecycle->FillCache;
286 }
287
288 diag "check date changes on moving a ticket";
289 {
290     my $ticket = RT::Ticket->new( RT->SystemUser );
291     my ($id, $msg) = $ticket->Create(
292         Queue => $general->id,
293         Subject => 'test',
294         Status => 'new',
295     );
296     ok $id, 'created a ticket';
297     ok !$ticket->StartedObj->IsSet, 'started is not set';
298     ok !$ticket->ResolvedObj->IsSet, 'resolved is not set';
299
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';
305
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';
311 }
312
313 done_testing;