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