summaryrefslogtreecommitdiff
path: root/spec/services
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-08-05 18:10:10 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-08-05 18:10:10 +0000
commitea4766228b5536c83f1917d6058be913472ffa2d (patch)
tree5ebf5ea0f996be6c6908e6b631b72c33bc13e997 /spec/services
parent4b64dc27ae5bac20dec888431c236fef2bfdc449 (diff)
downloadgitlab-ce-ea4766228b5536c83f1917d6058be913472ffa2d.tar.gz
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'spec/services')
-rw-r--r--spec/services/authorized_project_update/project_group_link_create_service_spec.rb23
-rw-r--r--spec/services/groups/transfer_service_spec.rb117
-rw-r--r--spec/services/projects/group_links/create_service_spec.rb7
3 files changed, 122 insertions, 25 deletions
diff --git a/spec/services/authorized_project_update/project_group_link_create_service_spec.rb b/spec/services/authorized_project_update/project_group_link_create_service_spec.rb
index d30d9f1e766..961322a1a21 100644
--- a/spec/services/authorized_project_update/project_group_link_create_service_spec.rb
+++ b/spec/services/authorized_project_update/project_group_link_create_service_spec.rb
@@ -13,8 +13,9 @@ RSpec.describe AuthorizedProjectUpdate::ProjectGroupLinkCreateService do
let_it_be(:project) { create(:project, :private, group: create(:group, :private)) }
let(:access_level) { Gitlab::Access::MAINTAINER }
+ let(:group_access) { nil }
- subject(:service) { described_class.new(project, group) }
+ subject(:service) { described_class.new(project, group, group_access) }
describe '#perform' do
context 'direct group members' do
@@ -54,6 +55,26 @@ RSpec.describe AuthorizedProjectUpdate::ProjectGroupLinkCreateService do
end
end
+ context 'with group_access' do
+ let(:group_access) { Gitlab::Access::REPORTER }
+
+ before do
+ create(:group_member, access_level: access_level, group: group_parent, user: parent_group_user)
+ ProjectAuthorization.delete_all
+ end
+
+ it 'creates project authorization' do
+ expect { service.execute }.to(
+ change { ProjectAuthorization.count }.from(0).to(1))
+
+ project_authorization = ProjectAuthorization.where(
+ project_id: project.id,
+ user_id: parent_group_user.id,
+ access_level: group_access)
+ expect(project_authorization).to exist
+ end
+ end
+
context 'membership overrides' do
before do
create(:group_member, access_level: Gitlab::Access::REPORTER, group: group_parent, user: group_user)
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index fa254bba6a9..c87fc7d941e 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -346,44 +346,117 @@ RSpec.describe Groups::TransferService do
end
context 'when transferring a group with nested groups and projects' do
- let!(:group) { create(:group, :public) }
+ let(:subgroup1) { create(:group, :private, parent: group) }
let!(:project1) { create(:project, :repository, :private, namespace: group) }
- let!(:subgroup1) { create(:group, :private, parent: group) }
let!(:nested_subgroup) { create(:group, :private, parent: subgroup1) }
let!(:nested_project) { create(:project, :repository, :private, namespace: subgroup1) }
before do
TestEnv.clean_test_path
create(:group_member, :owner, group: new_parent_group, user: user)
- transfer_service.execute(new_parent_group)
end
- it 'updates subgroups path' do
- new_base_path = "#{new_parent_group.path}/#{group.path}"
- group.children.each do |children|
- expect(children.full_path).to eq("#{new_base_path}/#{children.path}")
+ context 'updated paths' do
+ let(:group) { create(:group, :public) }
+
+ before do
+ transfer_service.execute(new_parent_group)
end
- new_base_path = "#{new_parent_group.path}/#{group.path}/#{subgroup1.path}"
- subgroup1.children.each do |children|
- expect(children.full_path).to eq("#{new_base_path}/#{children.path}")
+ it 'updates subgroups path' do
+ new_base_path = "#{new_parent_group.path}/#{group.path}"
+ group.children.each do |children|
+ expect(children.full_path).to eq("#{new_base_path}/#{children.path}")
+ end
+
+ new_base_path = "#{new_parent_group.path}/#{group.path}/#{subgroup1.path}"
+ subgroup1.children.each do |children|
+ expect(children.full_path).to eq("#{new_base_path}/#{children.path}")
+ end
end
- end
- it 'updates projects path' do
- new_parent_path = "#{new_parent_group.path}/#{group.path}"
- subgroup1.projects.each do |project|
- project_full_path = "#{new_parent_path}/#{project.namespace.path}/#{project.name}"
- expect(project.full_path).to eq(project_full_path)
+ it 'updates projects path' do
+ new_parent_path = "#{new_parent_group.path}/#{group.path}"
+ subgroup1.projects.each do |project|
+ project_full_path = "#{new_parent_path}/#{project.namespace.path}/#{project.name}"
+ expect(project.full_path).to eq(project_full_path)
+ end
+ end
+
+ it 'creates redirect for the subgroups and projects' do
+ expect(group.redirect_routes.count).to eq(1)
+ expect(project1.redirect_routes.count).to eq(1)
+ expect(subgroup1.redirect_routes.count).to eq(1)
+ expect(nested_subgroup.redirect_routes.count).to eq(1)
+ expect(nested_project.redirect_routes.count).to eq(1)
end
end
- it 'creates redirect for the subgroups and projects' do
- expect(group.redirect_routes.count).to eq(1)
- expect(project1.redirect_routes.count).to eq(1)
- expect(subgroup1.redirect_routes.count).to eq(1)
- expect(nested_subgroup.redirect_routes.count).to eq(1)
- expect(nested_project.redirect_routes.count).to eq(1)
+ context 'resets project authorizations' do
+ let(:old_parent_group) { create(:group) }
+ let(:group) { create(:group, :private, parent: old_parent_group) }
+ let(:new_group_member) { create(:user) }
+ let(:old_group_member) { create(:user) }
+
+ before do
+ new_parent_group.add_maintainer(new_group_member)
+ old_parent_group.add_maintainer(old_group_member)
+ group.refresh_members_authorized_projects
+ end
+
+ it 'removes old project authorizations' do
+ expect { transfer_service.execute(new_parent_group) }.to change {
+ ProjectAuthorization.where(project_id: project1.id, user_id: old_group_member.id).size
+ }.from(1).to(0)
+ end
+
+ it 'adds new project authorizations' do
+ expect { transfer_service.execute(new_parent_group) }.to change {
+ ProjectAuthorization.where(project_id: project1.id, user_id: new_group_member.id).size
+ }.from(0).to(1)
+ end
+
+ it 'performs authorizations job immediately' do
+ expect(AuthorizedProjectsWorker).to receive(:bulk_perform_inline)
+
+ transfer_service.execute(new_parent_group)
+ end
+
+ context 'for nested projects' do
+ it 'removes old project authorizations' do
+ expect { transfer_service.execute(new_parent_group) }.to change {
+ ProjectAuthorization.where(project_id: nested_project.id, user_id: old_group_member.id).size
+ }.from(1).to(0)
+ end
+
+ it 'adds new project authorizations' do
+ expect { transfer_service.execute(new_parent_group) }.to change {
+ ProjectAuthorization.where(project_id: nested_project.id, user_id: new_group_member.id).size
+ }.from(0).to(1)
+ end
+ end
+
+ context 'for groups with many members' do
+ before do
+ 11.times do
+ new_parent_group.add_maintainer(create(:user))
+ end
+ end
+
+ it 'adds new project authorizations for the user which makes a transfer' do
+ transfer_service.execute(new_parent_group)
+
+ expect(ProjectAuthorization.where(project_id: project1.id, user_id: user.id).size).to eq(1)
+ expect(ProjectAuthorization.where(project_id: nested_project.id, user_id: user.id).size).to eq(1)
+ end
+
+ it 'schedules authorizations job' do
+ expect(AuthorizedProjectsWorker).to receive(:bulk_perform_async)
+ .with(array_including(new_parent_group.members_with_parents.pluck(:user_id).map {|id| [id, anything] }))
+
+ transfer_service.execute(new_parent_group)
+ end
+ end
end
end
diff --git a/spec/services/projects/group_links/create_service_spec.rb b/spec/services/projects/group_links/create_service_spec.rb
index 6468e3007c2..c249a51fc56 100644
--- a/spec/services/projects/group_links/create_service_spec.rb
+++ b/spec/services/projects/group_links/create_service_spec.rb
@@ -6,9 +6,10 @@ RSpec.describe Projects::GroupLinks::CreateService, '#execute' do
let_it_be(:user) { create :user }
let_it_be(:group) { create :group }
let_it_be(:project) { create :project }
+ let(:group_access) { Gitlab::Access::DEVELOPER }
let(:opts) do
{
- link_group_access: '30',
+ link_group_access: group_access,
expires_at: nil
}
end
@@ -49,7 +50,9 @@ RSpec.describe Projects::GroupLinks::CreateService, '#execute' do
receive(:bulk_perform_async)
)
expect(AuthorizedProjectUpdate::ProjectGroupLinkCreateWorker).to(
- receive(:perform_async).and_call_original
+ receive(:perform_async)
+ .with(project.id, group.id, group_access)
+ .and_call_original
)
expect(AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker).to(
receive(:bulk_perform_in)