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