rt 4.0.6
[freeside.git] / rt / t / web / owner_disabled_group_19221.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4
5 use RT::Test tests => undef;
6
7 my $queue = RT::Test->load_or_create_queue( Name => 'Test' );
8 ok $queue && $queue->id, 'loaded or created queue';
9
10 my $user = RT::Test->load_or_create_user(
11     Name        => 'ausername',
12     Privileged  => 1,
13 );
14 ok $user && $user->id, 'loaded or created user';
15
16 my $group = RT::Group->new(RT->SystemUser);
17 my ($ok, $msg) = $group->CreateUserDefinedGroup(Name => 'Disabled Group');
18 ok($ok, $msg);
19
20 ($ok, $msg) = $group->AddMember( $user->PrincipalId );
21 ok($ok, $msg);
22
23 ok( RT::Test->set_rights({
24     Principal   => $group,
25     Object      => $queue,
26     Right       => [qw(OwnTicket)]
27 }), 'set rights');
28
29 RT->Config->Set( AutocompleteOwners => 0 );
30 my ($base, $m) = RT::Test->started_ok;
31 ok $m->login, 'logged in';
32
33 diag "user from group shows up in create form";
34 {
35     $m->get_ok('/', 'open home page');
36     $m->form_name('CreateTicketInQueue');
37     $m->select( 'Queue', $queue->id );
38     $m->submit;
39
40     $m->content_contains('Create a new ticket', 'opened create ticket page');
41     my $form = $m->form_name('TicketCreate');
42     my $input = $form->find_input('Owner');
43     is $input->value, RT->Nobody->Id, 'correct owner selected';
44     ok((scalar grep { $_ == $user->Id } $input->possible_values), 'user from group is in dropdown');
45 }
46
47 diag "user from disabled group DOESN'T shows up in create form";
48 {
49     ($ok, $msg) = $group->SetDisabled(1);
50     ok($ok, $msg);
51
52     $m->get_ok('/', 'open home page');
53     $m->form_name('CreateTicketInQueue');
54     $m->select( 'Queue', $queue->id );
55     $m->submit;
56
57     $m->content_contains('Create a new ticket', 'opened create ticket page');
58     my $form = $m->form_name('TicketCreate');
59     my $input = $form->find_input('Owner');
60     is $input->value, RT->Nobody->Id, 'correct owner selected';
61     ok((not scalar grep { $_ == $user->Id } $input->possible_values), 'user from disabled group is NOT in dropdown');
62     ($ok, $msg) = $group->SetDisabled(0);
63     ok($ok, $msg);
64 }
65
66
67
68 diag "Put us in a nested group";
69 my $super = RT::Group->new(RT->SystemUser);
70 ($ok, $msg) = $super->CreateUserDefinedGroup(Name => 'Supergroup');
71 ok($ok, $msg);
72
73 ($ok, $msg) = $super->AddMember( $group->PrincipalId );
74 ok($ok, $msg);
75
76 ok( RT::Test->set_rights({
77     Principal   => $super,
78     Object      => $queue,
79     Right       => [qw(OwnTicket)]
80 }), 'set rights');
81
82
83 diag "Disable the middle group";
84 {
85     ($ok, $msg) = $group->SetDisabled(1);
86     ok($ok, "Disabled group: $msg");
87
88     $m->get_ok('/', 'open home page');
89     $m->form_name('CreateTicketInQueue');
90     $m->select( 'Queue', $queue->id );
91     $m->submit;
92
93     $m->content_contains('Create a new ticket', 'opened create ticket page');
94     my $form = $m->form_name('TicketCreate');
95     my $input = $form->find_input('Owner');
96     is $input->value, RT->Nobody->Id, 'correct owner selected';
97     ok((not scalar grep { $_ == $user->Id } $input->possible_values), 'user from disabled group is NOT in dropdown');
98     ($ok, $msg) = $group->SetDisabled(0);
99     ok($ok, "Re-enabled group: $msg");
100 }
101
102 diag "Disable the top group";
103 {
104     ($ok, $msg) = $super->SetDisabled(1);
105     ok($ok, "Disabled supergroup: $msg");
106
107     $m->get_ok('/', 'open home page');
108     $m->form_name('CreateTicketInQueue');
109     $m->select( 'Queue', $queue->id );
110     $m->submit;
111
112     $m->content_contains('Create a new ticket', 'opened create ticket page');
113     my $form = $m->form_name('TicketCreate');
114     my $input = $form->find_input('Owner');
115     is $input->value, RT->Nobody->Id, 'correct owner selected';
116     ok((not scalar grep { $_ == $user->Id } $input->possible_values), 'user from disabled group is NOT in dropdown');
117     ($ok, $msg) = $super->SetDisabled(0);
118     ok($ok, "Re-enabled supergroup: $msg");
119 }
120
121
122 diag "Check WithMember and WithoutMember recursively";
123 {
124     my $with = RT::Groups->new( RT->SystemUser );
125     $with->WithMember( PrincipalId => $user->PrincipalObj->Id, Recursively => 1 );
126     $with->Limit( FIELD => 'domain', OPERATOR => '=', VALUE => 'UserDefined' );
127     is_deeply(
128         [map {$_->Name} @{$with->ItemsArrayRef}],
129         ['Disabled Group','Supergroup'],
130         "Get expected recursive memberships",
131     );
132
133     my $without = RT::Groups->new( RT->SystemUser );
134     $without->WithoutMember( PrincipalId => $user->PrincipalObj->Id, Recursively => 1 );
135     $without->Limit( FIELD => 'domain', OPERATOR => '=', VALUE => 'UserDefined' );
136     is_deeply(
137         [map {$_->Name} @{$without->ItemsArrayRef}],
138         [],
139         "And not a member of no groups",
140     );
141
142     ($ok, $msg) = $super->SetDisabled(1);
143     ok($ok, "Disabled supergroup: $msg");
144     $with->RedoSearch;
145     $without->RedoSearch;
146     is_deeply(
147         [map {$_->Name} @{$with->ItemsArrayRef}],
148         ['Disabled Group'],
149         "Recursive check only contains subgroup",
150     );
151     is_deeply(
152         [map {$_->Name} @{$without->ItemsArrayRef}],
153         [],
154         "Doesn't find the currently disabled group",
155     );
156     ($ok, $msg) = $super->SetDisabled(0);
157     ok($ok, "Re-enabled supergroup: $msg");
158
159     ($ok, $msg) = $group->SetDisabled(1);
160     ok($ok, "Disabled intermediate group: $msg");
161     $with->RedoSearch;
162     $without->RedoSearch;
163     is_deeply(
164         [map {$_->Name} @{$with->ItemsArrayRef}],
165         [],
166         "Recursive check finds no groups",
167     );
168     is_deeply(
169         [map {$_->Name} @{$without->ItemsArrayRef}],
170         ['Supergroup'],
171         "Now not a member of the supergroup",
172     );
173     ($ok, $msg) = $group->SetDisabled(0);
174     ok($ok, "Re-enabled intermediate group: $msg");
175 }
176
177 diag "Check MemberOfGroup";
178 {
179     ($ok, $msg) = $group->SetDisabled(1);
180     ok($ok, "Disabled intermediate group: $msg");
181     my $users = RT::Users->new(RT->SystemUser);
182     $users->MemberOfGroup($super->PrincipalObj->id);
183     is($users->Count, 0, "Supergroup claims no members");
184     ($ok, $msg) = $group->SetDisabled(0);
185     ok($ok, "Re-enabled intermediate group: $msg");
186 }
187
188
189 undef $m;
190 done_testing;