5 use RT::Test tests => undef;
7 my $queue = RT::Test->load_or_create_queue( Name => 'Test' );
8 ok $queue && $queue->id, 'loaded or created queue';
10 my $user = RT::Test->load_or_create_user(
14 ok $user && $user->id, 'loaded or created user';
16 my $group = RT::Group->new(RT->SystemUser);
17 my ($ok, $msg) = $group->CreateUserDefinedGroup(Name => 'Disabled Group');
20 ($ok, $msg) = $group->AddMember( $user->PrincipalId );
23 ok( RT::Test->set_rights({
26 Right => [qw(OwnTicket)]
29 RT->Config->Set( AutocompleteOwners => 0 );
30 my ($base, $m) = RT::Test->started_ok;
31 ok $m->login, 'logged in';
33 diag "user from group shows up in create form";
35 $m->get_ok('/', 'open home page');
36 $m->form_name('CreateTicketInQueue');
37 $m->select( 'Queue', $queue->id );
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');
47 diag "user from disabled group DOESN'T shows up in create form";
49 ($ok, $msg) = $group->SetDisabled(1);
52 $m->get_ok('/', 'open home page');
53 $m->form_name('CreateTicketInQueue');
54 $m->select( 'Queue', $queue->id );
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);
68 diag "Put us in a nested group";
69 my $super = RT::Group->new(RT->SystemUser);
70 ($ok, $msg) = $super->CreateUserDefinedGroup(Name => 'Supergroup');
73 ($ok, $msg) = $super->AddMember( $group->PrincipalId );
76 ok( RT::Test->set_rights({
79 Right => [qw(OwnTicket)]
83 diag "Disable the middle group";
85 ($ok, $msg) = $group->SetDisabled(1);
86 ok($ok, "Disabled group: $msg");
88 $m->get_ok('/', 'open home page');
89 $m->form_name('CreateTicketInQueue');
90 $m->select( 'Queue', $queue->id );
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");
102 diag "Disable the top group";
104 ($ok, $msg) = $super->SetDisabled(1);
105 ok($ok, "Disabled supergroup: $msg");
107 $m->get_ok('/', 'open home page');
108 $m->form_name('CreateTicketInQueue');
109 $m->select( 'Queue', $queue->id );
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");
122 diag "Check WithMember and WithoutMember recursively";
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' );
128 [map {$_->Name} @{$with->ItemsArrayRef}],
129 ['Disabled Group','Supergroup'],
130 "Get expected recursive memberships",
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' );
137 [map {$_->Name} @{$without->ItemsArrayRef}],
139 "And not a member of no groups",
142 ($ok, $msg) = $super->SetDisabled(1);
143 ok($ok, "Disabled supergroup: $msg");
145 $without->RedoSearch;
147 [map {$_->Name} @{$with->ItemsArrayRef}],
149 "Recursive check only contains subgroup",
152 [map {$_->Name} @{$without->ItemsArrayRef}],
154 "Doesn't find the currently disabled group",
156 ($ok, $msg) = $super->SetDisabled(0);
157 ok($ok, "Re-enabled supergroup: $msg");
159 ($ok, $msg) = $group->SetDisabled(1);
160 ok($ok, "Disabled intermediate group: $msg");
162 $without->RedoSearch;
164 [map {$_->Name} @{$with->ItemsArrayRef}],
166 "Recursive check finds no groups",
169 [map {$_->Name} @{$without->ItemsArrayRef}],
171 "Now not a member of the supergroup",
173 ($ok, $msg) = $group->SetDisabled(0);
174 ok($ok, "Re-enabled intermediate group: $msg");
177 diag "Check MemberOfGroup";
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");