RT 4.0.13
[freeside.git] / rt / t / web / rights.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => 14;
5
6 my ($baseurl, $m) = RT::Test->started_ok;
7 ok $m->login, "logged in";
8
9 $m->follow_link_ok({ id => 'tools-config-global-group-rights'});
10
11
12 sub get_rights {
13     my $agent = shift;
14     my $principal_id = shift;
15     my $object = shift;
16     $agent->form_name('ModifyGroupRights');
17     my @inputs = $agent->current_form->find_input("SetRights-$principal_id-$object");
18     my @rights = sort grep $_, map $_->possible_values, grep $_ && $_->value, @inputs;
19     return @rights;
20 };
21
22 diag "load Everyone group";
23 my ($everyone, $everyone_gid);
24 {
25     $everyone = RT::Group->new( RT->SystemUser );
26     $everyone->LoadSystemInternalGroup('Everyone');
27     ok($everyone_gid = $everyone->id, "loaded 'everyone' group");
28 }
29
30 diag "revoke all global rights from Everyone group";
31 my @has = get_rights( $m, $everyone_gid, 'RT::System-1' );
32 if ( @has ) {
33     $m->form_name('ModifyGroupRights');
34     $m->untick("SetRights-$everyone_gid-RT::System-1", $_) foreach @has;
35     $m->submit;
36     
37     is_deeply([get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'deleted all rights' );
38 } else {
39     ok(1, 'the group has no global rights');
40 }
41
42 diag "grant SuperUser right to everyone";
43 {
44     $m->form_name('ModifyGroupRights');
45     $m->tick("SetRights-$everyone_gid-RT::System-1", 'SuperUser');
46     $m->submit;
47
48     $m->content_contains('Right Granted', 'got message');
49     RT::Principal::InvalidateACLCache();
50     ok($everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has right');
51     is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], ['SuperUser'], 'granted SuperUser right' );
52 }
53
54 diag "revoke the right";
55 {
56     $m->form_name('ModifyGroupRights');
57     $m->untick("SetRights-$everyone_gid-RT::System-1", 'SuperUser');
58     $m->submit;
59
60     $m->content_contains('Right revoked', 'got message');
61     RT::Principal::InvalidateACLCache();
62     ok(!$everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has no right');
63     is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'revoked SuperUser right' );
64 }
65
66
67 diag "return rights the group had in the beginning";
68 if ( @has ) {
69     $m->form_name('ModifyGroupRights');
70     $m->tick("SetRights-$everyone_gid-RT::System-1", $_) for @has;
71     $m->submit;
72
73     $m->content_contains('Right Granted', 'got message');
74     is_deeply(
75         [ get_rights( $m, $everyone_gid, 'RT::System-1' ) ],
76         [ @has ],
77         'returned back all rights'
78     );
79 } else {
80     ok(1, 'the group had no global rights, so nothing to return');
81 }
82