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';
12 DBIx::SearchBuilder::Record::Cachable->FlushCache;
13 my $ticket = RT::Ticket->new( RT->SystemUser );
14 $ticket->Load( $_[0] );
15 return $ticket->Status;
18 diag "check basic API";
20 my $schema = $general->LifecycleObj;
21 isa_ok($schema, 'RT::Lifecycle');
22 is $schema->Name, 'default', "it's a default schema";
23 is_deeply [$schema->Valid],
24 [qw(new open stalled resolved rejected deleted)],
25 'this is the default set from our config file';
27 foreach my $s ( qw(new open stalled resolved rejected deleted) ) {
28 ok $schema->IsValid($s), "valid";
30 ok !$schema->IsValid(), 'invalid';
31 ok !$schema->IsValid(''), 'invalid';
32 ok !$schema->IsValid(undef), 'invalid';
33 ok !$schema->IsValid('foo'), 'invalid';
35 is_deeply [$schema->Initial], ['new'], 'initial set';
36 ok $schema->IsInitial('new'), "initial";
37 ok !$schema->IsInitial('open'), "not initial";
38 ok !$schema->IsInitial, "not initial";
39 ok !$schema->IsInitial(''), "not initial";
40 ok !$schema->IsInitial(undef), "not initial";
41 ok !$schema->IsInitial('foo'), "not initial";
43 is_deeply [$schema->Active], [qw(open stalled)], 'active set';
44 ok( $schema->IsActive($_), "active" )
45 foreach qw(open stalled);
46 ok !$schema->IsActive('new'), "not active";
47 ok !$schema->IsActive, "not active";
48 ok !$schema->IsActive(''), "not active";
49 ok !$schema->IsActive(undef), "not active";
50 ok !$schema->IsActive('foo'), "not active";
52 is_deeply [$schema->Inactive], [qw(resolved rejected deleted)], 'inactive set';
53 ok( $schema->IsInactive($_), "inactive" )
54 foreach qw(resolved rejected deleted);
55 ok !$schema->IsInactive('new'), "not inactive";
56 ok !$schema->IsInactive, "not inactive";
57 ok !$schema->IsInactive(''), "not inactive";
58 ok !$schema->IsInactive(undef), "not inactive";
59 ok !$schema->IsInactive('foo'), "not inactive";
61 is_deeply [$schema->Transitions('')], [qw(new open resolved)], 'on create transitions';
62 ok $schema->IsTransition('' => $_), 'good transition'
63 foreach qw(new open resolved);
66 my ($baseurl, $m) = RT::Test->started_ok;
67 ok $m->login, 'logged in';
69 diag "check status input on create";
71 $m->goto_create_ticket( $general );
73 my $form = $m->form_name('TicketCreate');
74 ok my $input = $form->find_input('Status'), 'found status selector';
76 my @form_values = $input->possible_values;
77 ok scalar @form_values, 'some options in the UI';
80 foreach ( @form_values ) {
81 next if $general->LifecycleObj->IsValid($_);
83 diag("$_ doesn't appear to be a valid status, but it was in the form");
87 ok $valid, 'all statuses in the form are valid';
90 diag "create a ticket";
93 my $ticket = RT::Ticket->new( RT->SystemUser );
94 ($tid) = $ticket->Create( Queue => $general->id, Subject => 'test' );
95 ok $tid, "created a ticket #$tid";
96 is $ticket->Status, 'new', 'correct status';
99 diag "new ->(open it)-> open";
101 ok $m->goto_ticket( $tid ), 'opened a ticket';
103 has => ['Open It', 'Resolve', 'Reject', 'Delete'],
104 has_no => ['Stall', 'Re-open', 'Undelete'],
107 $m->follow_link_ok({text => 'Open It'});
108 $m->form_name('TicketUpdate');
109 $m->click('SubmitTicket');
111 is $tstatus->($tid), 'open', 'changed status';
114 diag "open ->(stall)-> stalled";
116 is $tstatus->($tid), 'open', 'ticket is open';
118 ok $m->goto_ticket( $tid ), 'opened a ticket';
121 has => ['Stall', 'Resolve', 'Reject'],
122 has_no => ['Open It', 'Delete', 'Re-open', 'Undelete'],
125 $m->follow_link_ok({text => 'Stall'});
126 $m->form_name('TicketUpdate');
127 $m->click('SubmitTicket');
129 is $tstatus->($tid), 'stalled', 'changed status';
132 diag "stall ->(open it)-> open";
134 is $tstatus->($tid), 'stalled', 'ticket is stalled';
136 ok $m->goto_ticket( $tid ), 'opened a ticket';
139 has_no => ['Delete', 'Re-open', 'Undelete', 'Stall', 'Resolve', 'Reject'],
142 $m->follow_link_ok({text => 'Open It'});
144 is $tstatus->($tid), 'open', 'changed status';
147 diag "open -> deleted, only via modify";
149 is $tstatus->($tid), 'open', 'ticket is open';
151 $m->get_ok( '/Ticket/Modify.html?id='. $tid );
152 my $form = $m->form_name('TicketModify');
153 ok my $input = $form->find_input('Status'), 'found status selector';
155 my @form_values = $input->possible_values;
156 ok scalar @form_values, 'some options in the UI';
158 ok grep($_ eq 'deleted', @form_values), "has deleted";
160 $m->select( Status => 'deleted' );
163 is $tstatus->($tid), 'deleted', 'deleted ticket';
166 diag "deleted -> X via modify, only open is available";
168 is $tstatus->($tid), 'deleted', 'ticket is deleted';
170 $m->get_ok( '/Ticket/Modify.html?id='. $tid );
171 my $form = $m->form_name('TicketModify');
172 ok my $input = $form->find_input('Status'), 'found status selector';
174 my @form_values = $input->possible_values;
175 ok scalar @form_values, 'some options in the UI';
177 is join('-', @form_values), '-deleted-open', 'only default, current and open available';
180 diag "check illegal values and transitions";
183 my $ticket = RT::Ticket->new( RT->SystemUser );
184 my ($id, $msg) = $ticket->Create(
185 Queue => $general->id,
189 ok !$id, 'have not created a ticket';
192 my $ticket = RT::Ticket->new( RT->SystemUser );
193 my ($id, $msg) = $ticket->Create(
194 Queue => $general->id,
198 ok $id, 'created a ticket';
201 my $ticket = RT::Ticket->new( RT->SystemUser );
202 my ($id, $msg) = $ticket->Create(
203 Queue => $general->id,
207 ok $id, 'created a ticket';
209 (my $status, $msg) = $ticket->SetStatus( 'illeagal' );
210 ok !$status, "couldn't set illeagal status";
211 is $ticket->Status, 'new', 'status is steal the same';
213 ($status, $msg) = $ticket->SetStatus( 'stalled' );
214 ok !$status, "couldn't set status, transition is illeagal";
215 is $ticket->Status, 'new', 'status is steal the same';
219 diag "'!inactive -> inactive' actions are shown even if ticket has unresolved dependencies";
221 my $child_ticket = RT::Test->create_ticket(
222 Queue => $general->id,
225 my $cid = $child_ticket->id;
226 my $parent_ticket = RT::Test->create_ticket(
227 Queue => $general->id,
229 DependsOn => $child_ticket->id,
231 my $pid = $parent_ticket->id;
233 ok $m->goto_ticket( $pid ), 'opened a ticket';
235 has => ['Open It', 'Resolve', 'Reject', 'Delete' ],
236 has_no => ['Stall', 'Re-open', 'Undelete', ],
238 ok $m->goto_ticket( $cid ), 'opened a ticket';
240 has => ['Open It', 'Resolve', 'Reject', 'Delete'],
241 has_no => ['Stall', 'Re-open', 'Undelete'],