first pass RT4 merge, RT#13852
[freeside.git] / rt / t / lifecycles / moving.t
diff --git a/rt/t/lifecycles/moving.t b/rt/t/lifecycles/moving.t
new file mode 100644 (file)
index 0000000..6e0d64b
--- /dev/null
@@ -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';
+}