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