import rt 3.8.7
[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({ text => 'Configuration' });
11 $m->follow_link_ok({ text => 'Global' });
12 $m->follow_link_ok({ text => 'Group Rights' });
13
14
15 sub get_rights {
16     my $agent = shift;
17     my $principal_id = shift;
18     my $object = shift;
19     $agent->form_number(3);
20     my @inputs = $agent->current_form->find_input("RevokeRight-$principal_id-$object");
21     my @rights = sort grep $_, map $_->possible_values, grep $_, @inputs;
22     return @rights;
23 };
24
25 diag "load Everyone group" if $ENV{'TEST_VERBOSE'};
26 my ($everyone, $everyone_gid);
27 {
28     $everyone = RT::Group->new( $RT::SystemUser );
29     $everyone->LoadSystemInternalGroup('Everyone');
30     ok($everyone_gid = $everyone->id, "loaded 'everyone' group");
31 }
32
33 diag "revoke all global rights from Everyone group" if $ENV{'TEST_VERBOSE'};
34 my @has = get_rights( $m, $everyone_gid, 'RT::System-1' );
35 if ( @has ) {
36     $m->form_number(3);
37     $m->tick("RevokeRight-$everyone_gid-RT::System-1", $_) foreach @has;
38     $m->submit;
39     
40     is_deeply([get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'deleted all rights' );
41 } else {
42     ok(1, 'the group has no global rights');
43 }
44
45 diag "grant SuperUser right to everyone" if $ENV{'TEST_VERBOSE'};
46 {
47     $m->form_number(3);
48     $m->select("GrantRight-$everyone_gid-RT::System-1", ['SuperUser']);
49     $m->submit;
50
51     $m->content_contains('Right Granted', 'got message');
52     RT::Principal::InvalidateACLCache();
53     ok($everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has right');
54     is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], ['SuperUser'], 'granted SuperUser right' );
55 }
56
57 diag "revoke the right" if $ENV{'TEST_VERBOSE'};
58 {
59     $m->form_number(3);
60     $m->tick("RevokeRight-$everyone_gid-RT::System-1", 'SuperUser');
61     $m->submit;
62
63     $m->content_contains('Right revoked', 'got message');
64     RT::Principal::InvalidateACLCache();
65     ok(!$everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has no right');
66     is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'revoked SuperUser right' );
67 }
68
69
70 diag "return rights the group had in the beginning" if $ENV{'TEST_VERBOSE'};
71 if ( @has ) {
72     $m->form_number(3);
73     $m->select("GrantRight-$everyone_gid-RT::System-1", \@has);
74     $m->submit;
75
76     $m->content_contains('Right Granted', 'got message');
77     is_deeply(
78         [ get_rights( $m, $everyone_gid, 'RT::System-1' ) ],
79         [ @has ],
80         'returned back all rights'
81     );
82 } else {
83     ok(1, 'the group had no global rights, so nothing to return');
84 }
85