1use strict;
2use warnings;
3
4BEGIN {require './t/lifecycles/utils.pl'};
5
6my $general = RT::Test->load_or_create_queue(
7    Name => 'General',
8);
9ok $general && $general->id, 'loaded or created a queue';
10
11my $delivery = RT::Test->load_or_create_queue(
12    Name => 'delivery',
13    Lifecycle => 'delivery',
14);
15ok $delivery && $delivery->id, 'loaded or created a queue';
16
17my $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
24diag "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
39diag "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
50diag "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
81diag "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
96done_testing;
97