diff options
author | Ivan Kohler <ivan@freeside.biz> | 2012-04-24 11:35:56 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2012-04-24 11:35:56 -0700 |
commit | 6587f6ba7d047ddc1686c080090afe7d53365bd4 (patch) | |
tree | ec77342668e8865aca669c9b4736e84e3077b523 /rt/t/lifecycles | |
parent | 47153aae5c2fc00316654e7277fccd45f72ff611 (diff) |
first pass RT4 merge, RT#13852
Diffstat (limited to 'rt/t/lifecycles')
-rw-r--r-- | rt/t/lifecycles/basics.t | 247 | ||||
-rw-r--r-- | rt/t/lifecycles/dates.t | 317 | ||||
-rw-r--r-- | rt/t/lifecycles/moving.t | 97 | ||||
-rw-r--r-- | rt/t/lifecycles/unresolved-deps.t | 45 | ||||
-rw-r--r-- | rt/t/lifecycles/utils.pl | 73 |
5 files changed, 779 insertions, 0 deletions
diff --git a/rt/t/lifecycles/basics.t b/rt/t/lifecycles/basics.t new file mode 100644 index 000000000..40e239186 --- /dev/null +++ b/rt/t/lifecycles/basics.t @@ -0,0 +1,247 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Data::Dumper; + +BEGIN {require 't/lifecycles/utils.pl'}; + +my $general = RT::Test->load_or_create_queue( + Name => 'General', +); +ok $general && $general->id, 'loaded or created a queue'; + +my $tstatus = sub { + DBIx::SearchBuilder::Record::Cachable->FlushCache; + my $ticket = RT::Ticket->new( RT->SystemUser ); + $ticket->Load( $_[0] ); + return $ticket->Status; +}; + +diag "check basic API"; +{ + my $schema = $general->Lifecycle; + isa_ok($schema, 'RT::Lifecycle'); + is $schema->Name, 'default', "it's a default schema"; + is_deeply [$schema->Valid], + [qw(new open stalled resolved rejected deleted)], + 'this is the default set from our config file'; + + foreach my $s ( qw(new open stalled resolved rejected deleted) ) { + ok $schema->IsValid($s), "valid"; + } + ok !$schema->IsValid(), 'invalid'; + ok !$schema->IsValid(''), 'invalid'; + ok !$schema->IsValid(undef), 'invalid'; + ok !$schema->IsValid('foo'), 'invalid'; + + is_deeply [$schema->Initial], ['new'], 'initial set'; + ok $schema->IsInitial('new'), "initial"; + ok !$schema->IsInitial('open'), "not initial"; + ok !$schema->IsInitial, "not initial"; + ok !$schema->IsInitial(''), "not initial"; + ok !$schema->IsInitial(undef), "not initial"; + ok !$schema->IsInitial('foo'), "not initial"; + + is_deeply [$schema->Active], [qw(open stalled)], 'active set'; + ok( $schema->IsActive($_), "active" ) + foreach qw(open stalled); + ok !$schema->IsActive('new'), "not active"; + ok !$schema->IsActive, "not active"; + ok !$schema->IsActive(''), "not active"; + ok !$schema->IsActive(undef), "not active"; + ok !$schema->IsActive('foo'), "not active"; + + is_deeply [$schema->Inactive], [qw(resolved rejected deleted)], 'inactive set'; + ok( $schema->IsInactive($_), "inactive" ) + foreach qw(resolved rejected deleted); + ok !$schema->IsInactive('new'), "not inactive"; + ok !$schema->IsInactive, "not inactive"; + ok !$schema->IsInactive(''), "not inactive"; + ok !$schema->IsInactive(undef), "not inactive"; + ok !$schema->IsInactive('foo'), "not inactive"; + + is_deeply [$schema->Transitions('')], [qw(new open resolved)], 'on create transitions'; + ok $schema->IsTransition('' => $_), 'good transition' + foreach qw(new open resolved); +} + +my ($baseurl, $m) = RT::Test->started_ok; +ok $m->login, 'logged in'; + +diag "check status input on create"; +{ + $m->goto_create_ticket( $general ); + + my $form = $m->form_name('TicketCreate'); + ok my $input = $form->find_input('Status'), 'found status selector'; + + my @form_values = $input->possible_values; + ok scalar @form_values, 'some options in the UI'; + + my $valid = 1; + foreach ( @form_values ) { + next if $general->Lifecycle->IsValid($_); + $valid = 0; + diag("$_ doesn't appear to be a valid status, but it was in the form"); + } + + + ok $valid, 'all statuses in the form are valid'; +} + +diag "create a ticket"; +my $tid; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + ($tid) = $ticket->Create( Queue => $general->id, Subject => 'test' ); + ok $tid, "created a ticket #$tid"; + is $ticket->Status, 'new', 'correct status'; +} + +diag "new ->(open it)-> open"; +{ + ok $m->goto_ticket( $tid ), 'opened a ticket'; + $m->check_links( + has => ['Open It', 'Resolve', 'Reject', 'Delete'], + has_no => ['Stall', 'Re-open', 'Undelete'], + ); + + $m->follow_link_ok({text => 'Open It'}); + $m->form_name('TicketUpdate'); + $m->click('SubmitTicket'); + + is $tstatus->($tid), 'open', 'changed status'; +} + +diag "open ->(stall)-> stalled"; +{ + is $tstatus->($tid), 'open', 'ticket is open'; + + ok $m->goto_ticket( $tid ), 'opened a ticket'; + + $m->check_links( + has => ['Stall', 'Resolve', 'Reject'], + has_no => ['Open It', 'Delete', 'Re-open', 'Undelete'], + ); + + $m->follow_link_ok({text => 'Stall'}); + $m->form_name('TicketUpdate'); + $m->click('SubmitTicket'); + + is $tstatus->($tid), 'stalled', 'changed status'; +} + +diag "stall ->(open it)-> open"; +{ + is $tstatus->($tid), 'stalled', 'ticket is stalled'; + + ok $m->goto_ticket( $tid ), 'opened a ticket'; + $m->check_links( + has => ['Open It'], + has_no => ['Delete', 'Re-open', 'Undelete', 'Stall', 'Resolve', 'Reject'], + ); + + $m->follow_link_ok({text => 'Open It'}); + + is $tstatus->($tid), 'open', 'changed status'; +} + +diag "open -> deleted, only via modify"; +{ + is $tstatus->($tid), 'open', 'ticket is open'; + + $m->get_ok( '/Ticket/Modify.html?id='. $tid ); + my $form = $m->form_name('TicketModify'); + ok my $input = $form->find_input('Status'), 'found status selector'; + + my @form_values = $input->possible_values; + ok scalar @form_values, 'some options in the UI'; + + ok grep($_ eq 'deleted', @form_values), "has deleted"; + + $m->select( Status => 'deleted' ); + $m->submit; + + is $tstatus->($tid), 'deleted', 'deleted ticket'; +} + +diag "deleted -> X via modify, only open is available"; +{ + is $tstatus->($tid), 'deleted', 'ticket is deleted'; + + $m->get_ok( '/Ticket/Modify.html?id='. $tid ); + my $form = $m->form_name('TicketModify'); + ok my $input = $form->find_input('Status'), 'found status selector'; + + my @form_values = $input->possible_values; + ok scalar @form_values, 'some options in the UI'; + + is join('-', @form_values), '-open', 'only open and default available'; +} + +diag "check illegal values and transitions"; +{ + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'illegal', + ); + ok !$id, 'have not created a ticket'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + + (my $status, $msg) = $ticket->SetStatus( 'illeagal' ); + ok !$status, "couldn't set illeagal status"; + is $ticket->Status, 'new', 'status is steal the same'; + + ($status, $msg) = $ticket->SetStatus( 'stalled' ); + ok !$status, "couldn't set status, transition is illeagal"; + is $ticket->Status, 'new', 'status is steal the same'; + } +} + +diag "'!inactive -> inactive' actions are shown even if ticket has unresolved dependencies"; +{ + my $child_ticket = RT::Test->create_ticket( + Queue => $general->id, + Subject => 'child', + ); + my $cid = $child_ticket->id; + my $parent_ticket = RT::Test->create_ticket( + Queue => $general->id, + Subject => 'parent', + DependsOn => $child_ticket->id, + ); + my $pid = $parent_ticket->id; + + ok $m->goto_ticket( $pid ), 'opened a ticket'; + $m->check_links( + has => ['Open It', 'Resolve', 'Reject', 'Delete' ], + has_no => ['Stall', 'Re-open', 'Undelete', ], + ); + ok $m->goto_ticket( $cid ), 'opened a ticket'; + $m->check_links( + has => ['Open It', 'Resolve', 'Reject', 'Delete'], + has_no => ['Stall', 'Re-open', 'Undelete'], + ); +} + diff --git a/rt/t/lifecycles/dates.t b/rt/t/lifecycles/dates.t new file mode 100644 index 000000000..d8a27f613 --- /dev/null +++ b/rt/t/lifecycles/dates.t @@ -0,0 +1,317 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Data::Dumper; + +BEGIN {require 't/lifecycles/utils.pl'}; + +my $general = RT::Test->load_or_create_queue( + Name => 'General', +); +ok $general && $general->id, 'loaded or created a queue'; + +my $delivery = RT::Test->load_or_create_queue( + Name => 'delivery', + Lifecycle => 'delivery', +); +ok $delivery && $delivery->id, 'loaded or created a queue'; + +my $tstatus = sub { + DBIx::SearchBuilder::Record::Cachable->FlushCache; + my $ticket = RT::Ticket->new( RT->SystemUser ); + $ticket->Load( $_[0] ); + return $ticket->Status; +}; + +my ($baseurl, $m) = RT::Test->started_ok; +ok $m->login, 'logged in'; + +diag "check basic API"; +{ + my $schema = $general->Lifecycle; + isa_ok($schema, 'RT::Lifecycle'); + is $schema->Name, 'default', "it's a default schema"; + + $schema = $delivery->Lifecycle; + isa_ok($schema, 'RT::Lifecycle'); + is $schema->Name, 'delivery', "it's a delivery schema"; +} + +diag "dates on create for default schema"; +{ + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'open', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'resolved', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; + } + + my $test_date = '2008-11-28 12:00:00'; + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'open', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'resolved', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } +} + +diag "dates on create for delivery schema"; +{ + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->Unix , 0, 'started is not set'; + is $ticket->ResolvedObj->Unix, 0, 'resolved is not set'; + + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $txn, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + ); + ok $id, 'created a ticket'; + diag($msg); + is $ticket->Status, 'ordered', "Status is ordered"; + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + ok $ticket->StartedObj->Unix > 0, 'started is set to ' .$ticket->StartedObj->AsString ; + is $ticket->ResolvedObj->Unix, 0, 'resolved is not set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + ); + ok $id, 'created a ticket'; + + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + + ($statusval,$statusmsg) = $ticket->SetStatus('delivered'); + ok($statusval,$statusmsg); + + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; + } + + my $test_date = '2008-11-28 12:00:00'; + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $statusmsg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + ($statusval,$statusmsg) = $ticket->SetStatus('delivered'); + ok($statusval,$statusmsg); + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + TODO: { + local $TODO = "we should decide if we set resolved repeatedly"; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + }; + } +} + +diag "dates on status change for default schema"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + (my $status, $msg) = $ticket->SetStatus('open'); + ok $status, 'changed status' or diag "error: $msg"; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + my $started = $ticket->StartedObj->Unix; + + ($status, $msg) = $ticket->SetStatus('stalled'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetStatus('open'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetStatus('resolved'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; +} + +diag "dates on status change for delivery schema"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + (my $status, $msg) = $ticket->SetStatus('delayed'); + ok $status, 'changed status' or diag "error: $msg"; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + my $started = $ticket->StartedObj->Unix; + + ($status, $msg) = $ticket->SetStatus('on way'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetStatus('delivered'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; +} + +diag "add partial map between general->delivery"; +{ + my $schemas = RT->Config->Get('Lifecycles'); + $schemas->{'__maps__'} = { + 'default -> delivery' => { + new => 'on way', + }, + 'delivery -> default' => { + 'on way' => 'resolved', + }, + }; + RT::Lifecycle->FillCache; +} + +diag "check date changes on moving a ticket"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + (my $status, $msg) = $ticket->SetQueue( $delivery->id ); + ok $status, "moved ticket between queues with different schemas"; + is $ticket->Status, 'on way', 'status has been changed'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetQueue( $general->id ); + ok $status, "moved ticket between queues with different schemas"; + is $ticket->Status, 'resolved', 'status has been changed'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; +} diff --git a/rt/t/lifecycles/moving.t b/rt/t/lifecycles/moving.t new file mode 100644 index 000000000..6e0d64bbf --- /dev/null +++ b/rt/t/lifecycles/moving.t @@ -0,0 +1,97 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Data::Dumper; + +BEGIN {require 't/lifecycles/utils.pl'}; + +my $general = RT::Test->load_or_create_queue( + Name => 'General', +); +ok $general && $general->id, 'loaded or created a queue'; + +my $delivery = RT::Test->load_or_create_queue( + Name => 'delivery', + Lifecycle => 'delivery', +); +ok $delivery && $delivery->id, 'loaded or created a queue'; + +my $tstatus = sub { + DBIx::SearchBuilder::Record::Cachable->FlushCache; + my $ticket = RT::Ticket->new( RT->SystemUser ); + $ticket->Load( $_[0] ); + return $ticket->Status; +}; + +diag "check moving without a map"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + (my $status, $msg) = $ticket->SetQueue( $delivery->id ); + ok !$status, "couldn't change queue when there is no maps between schemas"; + is $ticket->Queue, $general->id, 'queue is steal the same'; + is $ticket->Status, 'new', 'status is steal the same'; +} + +diag "add partial map"; +{ + my $schemas = RT->Config->Get('Lifecycles'); + $schemas->{'__maps__'} = { + 'default -> delivery' => { + new => 'ordered', + }, + }; + RT::Lifecycle->FillCache; +} + +diag "check moving with a partial map"; +{ + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + (my $status, $msg) = $ticket->SetQueue( $delivery->id ); + ok $status, "moved ticket between queues with different schemas"; + is $ticket->Queue, $delivery->id, 'queue has been changed' + or diag "error: $msg"; + is $ticket->Status, 'ordered', 'status has been changed'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'open', + ); + ok $id, 'created a ticket'; + (my $status, $msg) = $ticket->SetQueue( $delivery->id ); + ok !$status, "couldn't change queue when map is not complete"; + is $ticket->Queue, $general->id, 'queue is steal the same'; + is $ticket->Status, 'open', 'status is steal the same'; + } +} + +diag "one way map doesn't work backwards"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + ); + ok $id, 'created a ticket'; + (my $status, $msg) = $ticket->SetQueue( $general->id ); + ok !$status, "couldn't change queue when there is no maps between schemas"; + is $ticket->Queue, $delivery->id, 'queue is steal the same'; + is $ticket->Status, 'ordered', 'status is steal the same'; +} diff --git a/rt/t/lifecycles/unresolved-deps.t b/rt/t/lifecycles/unresolved-deps.t new file mode 100644 index 000000000..aff9a1a56 --- /dev/null +++ b/rt/t/lifecycles/unresolved-deps.t @@ -0,0 +1,45 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Data::Dumper; + +use Test::More tests => 15; +BEGIN {require 't/lifecycles/utils.pl'}; + +my $general = RT::Test->load_or_create_queue( + Name => 'General', +); +ok $general && $general->id, 'loaded or created a queue'; + +# different value tested in basics +RT->Config->Set('HideResolveActionsWithDependencies' => 1); + +my ($baseurl, $m) = RT::Test->started_ok; +ok $m->login, 'logged in'; + +{ + my $child_ticket = RT::Test->create_ticket( + Queue => $general->id, + Subject => 'child', + ); + my $cid = $child_ticket->id; + my $parent_ticket = RT::Test->create_ticket( + Queue => $general->id, + Subject => 'parent', + DependsOn => $child_ticket->id, + ); + my $pid = $parent_ticket->id; + + ok $m->goto_ticket( $pid ), 'opened a ticket'; + $m->check_links( + has => ['Open It'], + has_no => ['Stall', 'Re-open', 'Undelete', 'Resolve', 'Reject', 'Delete'], + ); + ok $m->goto_ticket( $cid ), 'opened a ticket'; + $m->check_links( + has => ['Open It', 'Resolve', 'Reject', 'Delete'], + has_no => ['Stall', 'Re-open', 'Undelete'], + ); +} + diff --git a/rt/t/lifecycles/utils.pl b/rt/t/lifecycles/utils.pl new file mode 100644 index 000000000..6fb229390 --- /dev/null +++ b/rt/t/lifecycles/utils.pl @@ -0,0 +1,73 @@ +#!/usr/bin/perl + +use strict; +use warnings; + + +my $config; +BEGIN { +$config = <<END; +Set(\%Lifecycles, + default => { + initial => [qw(new)], + active => [qw(open stalled)], + inactive => [qw(resolved rejected deleted)], + defaults => { + on_create => 'new', + on_merge => 'resolved', + }, + transitions => { + '' => [qw(new open resolved)], + new => [qw(open resolved rejected deleted)], + open => [qw(stalled resolved rejected deleted)], + stalled => [qw(open)], + resolved => [qw(open)], + rejected => [qw(open)], + deleted => [qw(open)], + }, + actions => { + 'new -> open' => {label => 'Open It', update => 'Respond'}, + 'new -> resolved' => {label => 'Resolve', update => 'Comment'}, + 'new -> rejected' => {label => 'Reject', update => 'Respond'}, + 'new -> deleted' => {label => 'Delete', update => ''}, + + 'open -> stalled' => {label => 'Stall', update => 'Comment'}, + 'open -> resolved' => {label => 'Resolve', update => 'Comment'}, + 'open -> rejected' => {label => 'Reject', update => 'Respond'}, + + 'stalled -> open' => {label => 'Open It', update => ''}, + 'resolved -> open' => {label => 'Re-open', update => 'Comment'}, + 'rejected -> open' => {label => 'Re-open', update => 'Comment'}, + 'deleted -> open' => {label => 'Undelete', update => ''}, + }, + }, + delivery => { + initial => ['ordered'], + active => ['on way', 'delayed'], + inactive => ['delivered'], + defaults => { + on_create => 'ordered', + on_merge => 'delivered', + }, + transitions => { + '' => ['ordered'], + ordered => ['on way', 'delayed'], + 'on way' => ['delivered'], + delayed => ['on way'], + delivered => [], + }, + actions => { + 'ordered -> on way' => {label => 'Put On Way', update => 'Respond'}, + 'ordered -> delayed' => {label => 'Delay', update => 'Respond'}, + + 'on way -> delivered' => {label => 'Done', update => 'Respond'}, + 'delayed -> on way' => {label => 'Put On Way', update => 'Respond'}, + }, + }, +); +END +} + +use RT::Test config => $config; + +1; |