diff options
Diffstat (limited to 'rt/t/lifecycles/moving.t')
-rw-r--r-- | rt/t/lifecycles/moving.t | 97 |
1 files changed, 97 insertions, 0 deletions
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'; +} |