RT 4.2.11, ticket#13852
[freeside.git] / rt / t / api / system-available-rights.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => undef;
5 use Set::Tiny;
6
7 my @warnings;
8 local $SIG{__WARN__} = sub {
9     push @warnings, "@_";
10 };
11
12 my $requestor = RT::Group->new( RT->SystemUser );
13 $requestor->LoadRoleGroup(
14     Object  => RT->System,
15     Name    => "Requestor",
16 );
17 ok $requestor->id, "Loaded global requestor role group";
18
19 $requestor = $requestor->PrincipalObj;
20 ok $requestor->id, "Loaded global requestor role group principal";
21
22 note "Try granting an article right to a system role group";
23 {
24     my ($ok, $msg) = $requestor->GrantRight(
25         Right   => "ShowArticle",
26         Object  => RT->System,
27     );
28     ok !$ok, "Couldn't grant nonsensical right to global Requestor role: $msg";
29     like shift @warnings, qr/Couldn't validate right name.*?ShowArticle/;
30
31     ($ok, $msg) = $requestor->GrantRight(
32         Right   => "ShowTicket",
33         Object  => RT->System,
34     );
35     ok $ok, "Granted queue right to global queue role: $msg";
36
37     ($ok, $msg) = RT->PrivilegedUsers->PrincipalObj->GrantRight(
38         Right   => "ShowArticle",
39         Object  => RT->System,
40     );
41     ok $ok, "Granted article right to non-role global group: $msg";
42
43     reset_rights();
44 }
45
46 note "AvailableRights";
47 {
48     my @available = (
49         [ keys %{RT->System->AvailableRights} ],
50         [ keys %{RT->System->AvailableRights( $requestor )} ],
51     );
52
53     my $all  = Set::Tiny->new( @{$available[0]} );
54     my $role = Set::Tiny->new( @{$available[1]} );
55
56     ok $role->is_proper_subset($all), "role rights are a proper subset of all";
57 }
58
59 ok !@warnings, "No uncaught warnings"
60     or diag explain \@warnings;
61
62 # for clarity
63 sub reset_rights { RT::Test->set_rights() }
64
65 done_testing;