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/requests/api/groups_spec.rb')
-rw-r--r--spec/requests/api/groups_spec.rb62
1 files changed, 57 insertions, 5 deletions
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index 0a47b93773b..ad7a2e3b1fb 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe API::Groups do
let_it_be(:project3) { create(:project, namespace: group1, path: 'test', visibility_level: Gitlab::VisibilityLevel::PRIVATE) }
let_it_be(:archived_project) { create(:project, namespace: group1, archived: true) }
- before do
+ before_all do
group1.add_owner(user1)
group2.add_owner(user2)
end
@@ -255,13 +255,14 @@ RSpec.describe API::Groups do
end
context "when using sorting" do
- let(:group3) { create(:group, name: "a#{group1.name}", path: "z#{group1.path}") }
- let(:group4) { create(:group, name: "same-name", path: "y#{group1.path}") }
- let(:group5) { create(:group, name: "same-name") }
+ let_it_be(:group3) { create(:group, name: "a#{group1.name}", path: "z#{group1.path}") }
+ let_it_be(:group4) { create(:group, name: "same-name", path: "y#{group1.path}") }
+ let_it_be(:group5) { create(:group, name: "same-name") }
+
let(:response_groups) { json_response.map { |group| group['name'] } }
let(:response_groups_ids) { json_response.map { |group| group['id'] } }
- before do
+ before_all do
group3.add_owner(user1)
group4.add_owner(user1)
group5.add_owner(user1)
@@ -330,6 +331,44 @@ RSpec.describe API::Groups do
expect(response_groups_ids).to eq(Group.select { |group| group['name'] == 'same-name' }.map { |group| group['id'] }.sort)
end
+ context 'when searching with similarity ordering', :aggregate_failures do
+ let_it_be(:group6) { create(:group, name: 'same-name subgroup', parent: group4) }
+ let_it_be(:group7) { create(:group, name: 'same-name parent') }
+
+ let(:params) { { order_by: 'similarity', search: 'same-name' } }
+
+ before_all do
+ group6.add_owner(user1)
+ group7.add_owner(user1)
+ end
+
+ subject { get api('/groups', user1), params: params }
+
+ it 'sorts top level groups before subgroups with exact matches first' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to include_pagination_headers
+ expect(json_response.length).to eq(4)
+
+ expect(response_groups).to eq(['same-name', 'same-name parent', 'same-name subgroup', 'same-name'])
+ end
+
+ context 'when `search` parameter is not given' do
+ let(:params) { { order_by: 'similarity' } }
+
+ it 'sorts items ordered by name' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to include_pagination_headers
+ expect(json_response.length).to eq(6)
+
+ expect(response_groups).to eq(groups_visible_to_user(user1).order(:name).pluck(:name))
+ end
+ end
+ end
+
def groups_visible_to_user(user)
Group.where(id: user.authorized_groups.select(:id).reorder(nil))
end
@@ -451,6 +490,7 @@ RSpec.describe API::Groups do
expect(json_response['visibility']).to eq(Gitlab::VisibilityLevel.string_level(group1.visibility_level))
expect(json_response['avatar_url']).to eq(group1.avatar_url(only_path: false))
expect(json_response['share_with_group_lock']).to eq(group1.share_with_group_lock)
+ expect(json_response['prevent_sharing_groups_outside_hierarchy']).to eq(group2.namespace_settings.prevent_sharing_groups_outside_hierarchy)
expect(json_response['require_two_factor_authentication']).to eq(group1.require_two_factor_authentication)
expect(json_response['two_factor_grace_period']).to eq(group1.two_factor_grace_period)
expect(json_response['auto_devops_enabled']).to eq(group1.auto_devops_enabled)
@@ -661,6 +701,7 @@ RSpec.describe API::Groups do
project_creation_level: "noone",
subgroup_creation_level: "maintainer",
default_branch_protection: ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS,
+ prevent_sharing_groups_outside_hierarchy: true,
avatar: fixture_file_upload(file_path)
}
@@ -685,6 +726,7 @@ RSpec.describe API::Groups do
expect(json_response['shared_projects'].length).to eq(0)
expect(json_response['default_branch_protection']).to eq(::Gitlab::Access::MAINTAINER_PROJECT_ACCESS)
expect(json_response['avatar_url']).to end_with('dk.png')
+ expect(json_response['prevent_sharing_groups_outside_hierarchy']).to eq(true)
end
context 'updating the `default_branch_protection` attribute' do
@@ -755,6 +797,15 @@ RSpec.describe API::Groups do
expect(response).to have_gitlab_http_status(:bad_request)
expect(json_response['message']['visibility_level']).to contain_exactly('private is not allowed since there are sub-groups with higher visibility.')
end
+
+ it 'does not update prevent_sharing_groups_outside_hierarchy' do
+ put api("/groups/#{subgroup.id}", user3), params: { description: 'it works', prevent_sharing_groups_outside_hierarchy: true }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response.keys).not_to include('prevent_sharing_groups_outside_hierarchy')
+ expect(subgroup.reload.prevent_sharing_groups_outside_hierarchy).to eq(false)
+ expect(json_response['description']).to eq('it works')
+ end
end
end
@@ -1381,6 +1432,7 @@ RSpec.describe API::Groups do
let_it_be(:sub_child_group1) { create(:group, parent: child_group1) }
let_it_be(:child_group2) { create(:group, :private, parent: group2) }
let_it_be(:sub_child_group2) { create(:group, :private, parent: child_group2) }
+
let(:response_groups) { json_response.map { |group| group['name'] } }
context 'when unauthenticated' do