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