first pass RT4 merge, RT#13852
[freeside.git] / rt / t / lifecycles / moving.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use Data::Dumper;
6
7 BEGIN {require 't/lifecycles/utils.pl'};
8
9 my $general = RT::Test->load_or_create_queue(
10     Name => 'General',
11 );
12 ok $general && $general->id, 'loaded or created a queue';
13
14 my $delivery = RT::Test->load_or_create_queue(
15     Name => 'delivery',
16     Lifecycle => 'delivery',
17 );
18 ok $delivery && $delivery->id, 'loaded or created a queue';
19
20 my $tstatus = sub {
21     DBIx::SearchBuilder::Record::Cachable->FlushCache;
22     my $ticket = RT::Ticket->new( RT->SystemUser );
23     $ticket->Load( $_[0] );
24     return $ticket->Status;
25 };
26
27 diag "check moving without a map";
28 {
29     my $ticket = RT::Ticket->new( RT->SystemUser );
30     my ($id, $msg) = $ticket->Create(
31         Queue => $general->id,
32         Subject => 'test',
33         Status => 'new',
34     );
35     ok $id, 'created a ticket';
36     (my $status, $msg) = $ticket->SetQueue( $delivery->id );
37     ok !$status, "couldn't change queue when there is no maps between schemas";
38     is $ticket->Queue, $general->id, 'queue is steal the same';
39     is $ticket->Status, 'new', 'status is steal the same';
40 }
41
42 diag "add partial map";
43 {
44     my $schemas = RT->Config->Get('Lifecycles');
45     $schemas->{'__maps__'} = {
46         'default -> delivery' => {
47             new => 'ordered',
48         },
49     };
50     RT::Lifecycle->FillCache;
51 }
52
53 diag "check moving with a partial map";
54 {
55     {
56         my $ticket = RT::Ticket->new( RT->SystemUser );
57         my ($id, $msg) = $ticket->Create(
58             Queue => $general->id,
59             Subject => 'test',
60             Status => 'new',
61         );
62         ok $id, 'created a ticket';
63         (my $status, $msg) = $ticket->SetQueue( $delivery->id );
64         ok $status, "moved ticket between queues with different schemas";
65         is $ticket->Queue, $delivery->id, 'queue has been changed'
66             or diag "error: $msg";
67         is $ticket->Status, 'ordered', 'status has been changed';
68     }
69     {
70         my $ticket = RT::Ticket->new( RT->SystemUser );
71         my ($id, $msg) = $ticket->Create(
72             Queue => $general->id,
73             Subject => 'test',
74             Status => 'open',
75         );
76         ok $id, 'created a ticket';
77         (my $status, $msg) = $ticket->SetQueue( $delivery->id );
78         ok !$status, "couldn't change queue when map is not complete";
79         is $ticket->Queue, $general->id, 'queue is steal the same';
80         is $ticket->Status, 'open', 'status is steal the same';
81     }
82 }
83
84 diag "one way map doesn't work backwards";
85 {
86     my $ticket = RT::Ticket->new( RT->SystemUser );
87     my ($id, $msg) = $ticket->Create(
88         Queue => $delivery->id,
89         Subject => 'test',
90         Status => 'ordered',
91     );
92     ok $id, 'created a ticket';
93     (my $status, $msg) = $ticket->SetQueue( $general->id );
94     ok !$status, "couldn't change queue when there is no maps between schemas";
95     is $ticket->Queue, $delivery->id, 'queue is steal the same';
96     is $ticket->Status, 'ordered', 'status is steal the same';
97 }