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';
14 DBIx::SearchBuilder::Record::Cachable->FlushCache;
15 my $ticket = RT::Ticket->new( RT->SystemUser );
16 $ticket->Load( $_[0] );
17 return $ticket->Status;
20 diag "check basic API";
22 my $schema = $general->Lifecycle;
23 isa_ok($schema, 'RT::Lifecycle');
24 is $schema->Name, 'default', "it's a default schema";
25 is_deeply [$schema->Valid],
26 [qw(new open stalled resolved rejected deleted)],
27 'this is the default set from our config file';
29 foreach my $s ( qw(new open stalled resolved rejected deleted) ) {
30 ok $schema->IsValid($s), "valid";
32 ok !$schema->IsValid(), 'invalid';
33 ok !$schema->IsValid(''), 'invalid';
34 ok !$schema->IsValid(undef), 'invalid';
35 ok !$schema->IsValid('foo'), 'invalid';
37 is_deeply [$schema->Initial], ['new'], 'initial set';
38 ok $schema->IsInitial('new'), "initial";
39 ok !$schema->IsInitial('open'), "not initial";
40 ok !$schema->IsInitial, "not initial";
41 ok !$schema->IsInitial(''), "not initial";
42 ok !$schema->IsInitial(undef), "not initial";
43 ok !$schema->IsInitial('foo'), "not initial";
45 is_deeply [$schema->Active], [qw(open stalled)], 'active set';
46 ok( $schema->IsActive($_), "active" )
47 foreach qw(open stalled);
48 ok !$schema->IsActive('new'), "not active";
49 ok !$schema->IsActive, "not active";
50 ok !$schema->IsActive(''), "not active";
51 ok !$schema->IsActive(undef), "not active";
52 ok !$schema->IsActive('foo'), "not active";
54 is_deeply [$schema->Inactive], [qw(resolved rejected deleted)], 'inactive set';
55 ok( $schema->IsInactive($_), "inactive" )
56 foreach qw(resolved rejected deleted);
57 ok !$schema->IsInactive('new'), "not inactive";
58 ok !$schema->IsInactive, "not inactive";
59 ok !$schema->IsInactive(''), "not inactive";
60 ok !$schema->IsInactive(undef), "not inactive";
61 ok !$schema->IsInactive('foo'), "not inactive";
63 is_deeply [$schema->Transitions('')], [qw(new open resolved)], 'on create transitions';
64 ok $schema->IsTransition('' => $_), 'good transition'
65 foreach qw(new open resolved);
68 my ($baseurl, $m) = RT::Test->started_ok;
69 ok $m->login, 'logged in';
71 diag "check status input on create";
73 $m->goto_create_ticket( $general );
75 my $form = $m->form_name('TicketCreate');
76 ok my $input = $form->find_input('Status'), 'found status selector';
78 my @form_values = $input->possible_values;
79 ok scalar @form_values, 'some options in the UI';
82 foreach ( @form_values ) {
83 next if $general->Lifecycle->IsValid($_);
85 diag("$_ doesn't appear to be a valid status, but it was in the form");
89 ok $valid, 'all statuses in the form are valid';
92 diag "create a ticket";
95 my $ticket = RT::Ticket->new( RT->SystemUser );
96 ($tid) = $ticket->Create( Queue => $general->id, Subject => 'test' );
97 ok $tid, "created a ticket #$tid";
98 is $ticket->Status, 'new', 'correct status';
101 diag "new ->(open it)-> open";
103 ok $m->goto_ticket( $tid ), 'opened a ticket';
105 has => ['Open It', 'Resolve', 'Reject', 'Delete'],
106 has_no => ['Stall', 'Re-open', 'Undelete'],
109 $m->follow_link_ok({text => 'Open It'});
110 $m->form_name('TicketUpdate');
111 $m->click('SubmitTicket');
113 is $tstatus->($tid), 'open', 'changed status';
116 diag "open ->(stall)-> stalled";
118 is $tstatus->($tid), 'open', 'ticket is open';
120 ok $m->goto_ticket( $tid ), 'opened a ticket';
123 has => ['Stall', 'Resolve', 'Reject'],
124 has_no => ['Open It', 'Delete', 'Re-open', 'Undelete'],
127 $m->follow_link_ok({text => 'Stall'});
128 $m->form_name('TicketUpdate');
129 $m->click('SubmitTicket');
131 is $tstatus->($tid), 'stalled', 'changed status';
134 diag "stall ->(open it)-> open";
136 is $tstatus->($tid), 'stalled', 'ticket is stalled';
138 ok $m->goto_ticket( $tid ), 'opened a ticket';
141 has_no => ['Delete', 'Re-open', 'Undelete', 'Stall', 'Resolve', 'Reject'],
144 $m->follow_link_ok({text => 'Open It'});
146 is $tstatus->($tid), 'open', 'changed status';
149 diag "open -> deleted, only via modify";
151 is $tstatus->($tid), 'open', 'ticket is open';
153 $m->get_ok( '/Ticket/Modify.html?id='. $tid );
154 my $form = $m->form_name('TicketModify');
155 ok my $input = $form->find_input('Status'), 'found status selector';
157 my @form_values = $input->possible_values;
158 ok scalar @form_values, 'some options in the UI';
160 ok grep($_ eq 'deleted', @form_values), "has deleted";
162 $m->select( Status => 'deleted' );
165 is $tstatus->($tid), 'deleted', 'deleted ticket';
168 diag "deleted -> X via modify, only open is available";
170 is $tstatus->($tid), 'deleted', 'ticket is deleted';
172 $m->get_ok( '/Ticket/Modify.html?id='. $tid );
173 my $form = $m->form_name('TicketModify');
174 ok my $input = $form->find_input('Status'), 'found status selector';
176 my @form_values = $input->possible_values;
177 ok scalar @form_values, 'some options in the UI';
179 is join('-', @form_values), '-deleted-open', 'only default, current and open available';
182 diag "check illegal values and transitions";
185 my $ticket = RT::Ticket->new( RT->SystemUser );
186 my ($id, $msg) = $ticket->Create(
187 Queue => $general->id,
191 ok !$id, 'have not created a ticket';
194 my $ticket = RT::Ticket->new( RT->SystemUser );
195 my ($id, $msg) = $ticket->Create(
196 Queue => $general->id,
200 ok $id, 'created a ticket';
203 my $ticket = RT::Ticket->new( RT->SystemUser );
204 my ($id, $msg) = $ticket->Create(
205 Queue => $general->id,
209 ok $id, 'created a ticket';
211 (my $status, $msg) = $ticket->SetStatus( 'illeagal' );
212 ok !$status, "couldn't set illeagal status";
213 is $ticket->Status, 'new', 'status is steal the same';
215 ($status, $msg) = $ticket->SetStatus( 'stalled' );
216 ok !$status, "couldn't set status, transition is illeagal";
217 is $ticket->Status, 'new', 'status is steal the same';
221 diag "'!inactive -> inactive' actions are shown even if ticket has unresolved dependencies";
223 my $child_ticket = RT::Test->create_ticket(
224 Queue => $general->id,
227 my $cid = $child_ticket->id;
228 my $parent_ticket = RT::Test->create_ticket(
229 Queue => $general->id,
231 DependsOn => $child_ticket->id,
233 my $pid = $parent_ticket->id;
235 ok $m->goto_ticket( $pid ), 'opened a ticket';
237 has => ['Open It', 'Resolve', 'Reject', 'Delete' ],
238 has_no => ['Stall', 'Re-open', 'Undelete', ],
240 ok $m->goto_ticket( $cid ), 'opened a ticket';
242 has => ['Open It', 'Resolve', 'Reject', 'Delete'],
243 has_no => ['Stall', 'Re-open', 'Undelete'],