starting to work...
[freeside.git] / rt / t / ticket / deferred_owner.t
1
2 use strict;
3 use warnings;
4
5 use RT::Test nodata => 1, tests => 18;
6 use_ok('RT');
7 use_ok('RT::Ticket');
8 use Test::Warn;
9
10
11 my $tester = RT::Test->load_or_create_user(
12     EmailAddress => 'tester@localhost',
13 );
14 ok $tester && $tester->id, 'loaded or created user';
15
16 my $queue = RT::Test->load_or_create_queue( Name => 'General' );
17 ok $queue && $queue->id, 'loaded or created queue';
18
19 my $owner_role_group = RT::Group->new( RT->SystemUser );
20 $owner_role_group->LoadQueueRoleGroup( Type => 'Owner', Queue => $queue->id );
21 ok $owner_role_group->id, 'loaded owners role group of the queue';
22
23 diag "check that deffering owner doesn't regress";
24 {
25     RT::Test->set_rights(
26         { Principal => $tester->PrincipalObj,
27           Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket)],
28         },
29         { Principal => $owner_role_group->PrincipalObj,
30           Object => $queue,
31           Right => [qw(ModifyTicket)],
32         },
33     );
34     my $ticket = RT::Ticket->new( $tester );
35     # tester is owner, owner has right to modify owned tickets,
36     # this right is required to set somebody as AdminCc
37     my ($tid, $txn_id, $msg) = $ticket->Create(
38         Queue   => $queue->id,
39         Owner   => $tester->id,
40         AdminCc => 'root@localhost',
41     );
42     diag $msg if $msg;
43     ok $tid, "created a ticket";
44     is $ticket->Owner, $tester->id, 'correct owner';
45     like $ticket->AdminCcAddresses, qr/root\@localhost/, 'root is there';
46 }
47
48 diag "check that previous trick doesn't work without sufficient rights";
49 {
50     RT::Test->set_rights(
51         { Principal => $tester->PrincipalObj,
52           Right => [qw(SeeQueue ShowTicket CreateTicket OwnTicket)],
53         },
54     );
55     my $ticket = RT::Ticket->new( $tester );
56     # tester is owner, owner has right to modify owned tickets,
57     # this right is required to set somebody as AdminCc
58     my ($tid, $txn_id, $msg) = $ticket->Create(
59         Queue   => $queue->id,
60         Owner   => $tester->id,
61         AdminCc => 'root@localhost',
62     );
63     diag $msg if $msg;
64     ok $tid, "created a ticket";
65     is $ticket->Owner, $tester->id, 'correct owner';
66     unlike $ticket->AdminCcAddresses, qr/root\@localhost/, 'root is there';
67 }
68
69 diag "check that deffering owner really works";
70 {
71     RT::Test->set_rights(
72         { Principal => $tester->PrincipalObj,
73           Right => [qw(SeeQueue ShowTicket CreateTicket)],
74         },
75         { Principal => $queue->Cc->PrincipalObj,
76           Object => $queue,
77           Right => [qw(OwnTicket TakeTicket)],
78         },
79     );
80     my $ticket = RT::Ticket->new( $tester );
81     # set tester as Cc, Cc role group has right to own and take tickets
82     my ($tid, $txn_id, $msg) = $ticket->Create(
83         Queue => $queue->id,
84         Owner => $tester->id,
85         Cc    => 'tester@localhost',
86     );
87     diag $msg if $msg;
88     ok $tid, "created a ticket";
89     like $ticket->CcAddresses, qr/tester\@localhost/, 'tester is in the cc list';
90     is $ticket->Owner, $tester->id, 'tester is also owner';
91 }
92
93 diag "check that deffering doesn't work without correct rights";
94 {
95     RT::Test->set_rights(
96         { Principal => $tester->PrincipalObj,
97           Right => [qw(SeeQueue ShowTicket CreateTicket)],
98         },
99     );
100
101     my $ticket = RT::Ticket->new( $tester );
102     # set tester as Cc, Cc role group has right to own and take tickets
103     my ($tid, $txn_id, $msg);
104     warning_like {
105         ($tid, $txn_id, $msg) = $ticket->Create(
106             Queue => $queue->id,
107             Owner => $tester->id,
108             Cc    => 'tester@localhost',
109         );
110     } qr/User .* was proposed as a ticket owner but has no rights to own tickets in General/;
111
112     diag $msg if $msg;
113     ok $tid, "created a ticket";
114     like $ticket->CcAddresses, qr/tester\@localhost/, 'tester is in the cc list';
115     isnt $ticket->Owner, $tester->id, 'tester is also owner';
116 }
117
118
119