Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/finders/groups/user_groups_finder_spec.rb')
-rw-r--r--spec/finders/groups/user_groups_finder_spec.rb112
1 files changed, 55 insertions, 57 deletions
diff --git a/spec/finders/groups/user_groups_finder_spec.rb b/spec/finders/groups/user_groups_finder_spec.rb
index 9339741da79..999079468e5 100644
--- a/spec/finders/groups/user_groups_finder_spec.rb
+++ b/spec/finders/groups/user_groups_finder_spec.rb
@@ -5,17 +5,19 @@ require 'spec_helper'
RSpec.describe Groups::UserGroupsFinder do
describe '#execute' do
let_it_be(:user) { create(:user) }
+ let_it_be(:root_group) { create(:group, name: 'Root group', path: 'root-group') }
let_it_be(:guest_group) { create(:group, name: 'public guest', path: 'public-guest') }
- let_it_be(:private_maintainer_group) { create(:group, :private, name: 'b private maintainer', path: 'b-private-maintainer') }
- let_it_be(:public_developer_group) { create(:group, project_creation_level: nil, name: 'c public developer', path: 'c-public-developer') }
- let_it_be(:public_maintainer_group) { create(:group, name: 'a public maintainer', path: 'a-public-maintainer') }
+ let_it_be(:private_maintainer_group) { create(:group, :private, name: 'b private maintainer', path: 'b-private-maintainer', parent: root_group) }
+ let_it_be(:public_developer_group) { create(:group, project_creation_level: nil, name: 'c public developer', path: 'c-public-developer', parent: root_group) }
+ let_it_be(:public_maintainer_group) { create(:group, name: 'a public maintainer', path: 'a-public-maintainer', parent: root_group) }
let_it_be(:public_owner_group) { create(:group, name: 'a public owner', path: 'a-public-owner') }
- subject { described_class.new(current_user, target_user, arguments).execute }
+ subject { described_class.new(current_user, target_user, arguments.merge(search_arguments)).execute }
let(:arguments) { {} }
let(:current_user) { user }
let(:target_user) { user }
+ let(:search_arguments) { {} }
before_all do
guest_group.add_guest(user)
@@ -25,15 +27,40 @@ RSpec.describe Groups::UserGroupsFinder do
public_owner_group.add_owner(user)
end
- it 'returns all groups where the user is a direct member' do
- is_expected.to match(
- [
+ shared_examples 'user group finder searching by name or path' do
+ let(:search_arguments) { { search: 'maintainer' } }
+
+ specify do
+ is_expected.to contain_exactly(
public_maintainer_group,
- public_owner_group,
- private_maintainer_group,
- public_developer_group,
- guest_group
- ]
+ private_maintainer_group
+ )
+ end
+
+ context 'when searching for a full path (including parent)' do
+ let(:search_arguments) { { search: 'root-group/b-private-maintainer' } }
+
+ specify do
+ is_expected.to contain_exactly(private_maintainer_group)
+ end
+ end
+
+ context 'when search keywords include the parent route' do
+ let(:search_arguments) { { search: 'root public' } }
+
+ specify do
+ is_expected.to match(keyword_search_expected_groups)
+ end
+ end
+ end
+
+ it 'returns all groups where the user is a direct member' do
+ is_expected.to contain_exactly(
+ public_maintainer_group,
+ public_owner_group,
+ private_maintainer_group,
+ public_developer_group,
+ guest_group
)
end
@@ -53,26 +80,20 @@ RSpec.describe Groups::UserGroupsFinder do
let(:arguments) { { permission_scope: :create_projects } }
specify do
- is_expected.to match(
+ is_expected.to contain_exactly(
+ public_maintainer_group,
+ public_owner_group,
+ private_maintainer_group,
+ public_developer_group
+ )
+ end
+
+ it_behaves_like 'user group finder searching by name or path' do
+ let(:keyword_search_expected_groups) do
[
public_maintainer_group,
- public_owner_group,
- private_maintainer_group,
public_developer_group
]
- )
- end
-
- context 'when search is provided' do
- let(:arguments) { { permission_scope: :create_projects, search: 'maintainer' } }
-
- specify do
- is_expected.to match(
- [
- public_maintainer_group,
- private_maintainer_group
- ]
- )
end
end
end
@@ -81,38 +102,15 @@ RSpec.describe Groups::UserGroupsFinder do
let(:arguments) { { permission_scope: :transfer_projects } }
specify do
- is_expected.to match(
- [
- public_maintainer_group,
- public_owner_group,
- private_maintainer_group
- ]
+ is_expected.to contain_exactly(
+ public_maintainer_group,
+ public_owner_group,
+ private_maintainer_group
)
end
- context 'when search is provided' do
- let(:arguments) { { permission_scope: :transfer_projects, search: 'owner' } }
-
- specify do
- is_expected.to match(
- [
- public_owner_group
- ]
- )
- end
- end
- end
-
- context 'when search is provided' do
- let(:arguments) { { search: 'maintainer' } }
-
- specify do
- is_expected.to match(
- [
- public_maintainer_group,
- private_maintainer_group
- ]
- )
+ it_behaves_like 'user group finder searching by name or path' do
+ let(:keyword_search_expected_groups) { [public_maintainer_group] }
end
end
end