summaryrefslogtreecommitdiff
path: root/spec/services/groups
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-08-20 18:42:06 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-08-20 18:42:06 +0000
commit6e4e1050d9dba2b7b2523fdd1768823ab85feef4 (patch)
tree78be5963ec075d80116a932011d695dd33910b4e /spec/services/groups
parent1ce776de4ae122aba3f349c02c17cebeaa8ecf07 (diff)
downloadgitlab-ce-6e4e1050d9dba2b7b2523fdd1768823ab85feef4.tar.gz
Add latest changes from gitlab-org/gitlab@13-3-stable-ee
Diffstat (limited to 'spec/services/groups')
-rw-r--r--spec/services/groups/group_links/create_service_spec.rb1
-rw-r--r--spec/services/groups/transfer_service_spec.rb69
-rw-r--r--spec/services/groups/update_service_spec.rb48
3 files changed, 118 insertions, 0 deletions
diff --git a/spec/services/groups/group_links/create_service_spec.rb b/spec/services/groups/group_links/create_service_spec.rb
index bca03863d1e..fb88433d8f6 100644
--- a/spec/services/groups/group_links/create_service_spec.rb
+++ b/spec/services/groups/group_links/create_service_spec.rb
@@ -25,6 +25,7 @@ RSpec.describe Groups::GroupLinks::CreateService, '#execute' do
expires_at: nil
}
end
+
let(:user) { group_user }
subject { described_class.new(group, user, opts) }
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index c87fc7d941e..89e4d091ff7 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -8,6 +8,75 @@ RSpec.describe Groups::TransferService do
let!(:group_member) { create(:group_member, :owner, group: group, user: user) }
let(:transfer_service) { described_class.new(group, user) }
+ context 'handling packages' do
+ let_it_be(:group) { create(:group, :public) }
+ let(:project) { create(:project, :public, namespace: group) }
+ let(:new_group) { create(:group, :public) }
+
+ before do
+ group.add_owner(user)
+ new_group&.add_owner(user)
+ end
+
+ context 'with an npm package' do
+ before do
+ create(:npm_package, project: project)
+ end
+
+ shared_examples 'transfer not allowed' do
+ it 'does not allow transfer when there is a root namespace change' do
+ transfer_service.execute(new_group)
+
+ expect(transfer_service.error).to eq('Transfer failed: Group contains projects with NPM packages.')
+ expect(group.parent).not_to eq(new_group)
+ end
+ end
+
+ it_behaves_like 'transfer not allowed'
+
+ context 'with a project within subgroup' do
+ let(:root_group) { create(:group) }
+ let(:group) { create(:group, parent: root_group) }
+
+ before do
+ root_group.add_owner(user)
+ end
+
+ it_behaves_like 'transfer not allowed'
+
+ context 'without a root namespace change' do
+ let(:new_group) { create(:group, parent: root_group) }
+
+ it 'allows transfer' do
+ transfer_service.execute(new_group)
+
+ expect(transfer_service.error).to be nil
+ expect(group.parent).to eq(new_group)
+ end
+ end
+
+ context 'when transferring a group into a root group' do
+ let(:new_group) { nil }
+
+ it_behaves_like 'transfer not allowed'
+ end
+ end
+ end
+
+ context 'without an npm package' do
+ context 'when transferring a group into a root group' do
+ let(:group) { create(:group, parent: create(:group)) }
+
+ it 'allows transfer' do
+ transfer_service.execute(nil)
+
+ expect(transfer_service.error).to be nil
+ expect(group.parent).to be_nil
+ end
+ end
+ end
+ end
+
shared_examples 'ensuring allowed transfer for a group' do
context "when there's an exception on GitLab shell directories" do
let(:new_parent_group) { create(:group, :public) }
diff --git a/spec/services/groups/update_service_spec.rb b/spec/services/groups/update_service_spec.rb
index 25c79d9e600..1e6a8d53354 100644
--- a/spec/services/groups/update_service_spec.rb
+++ b/spec/services/groups/update_service_spec.rb
@@ -9,6 +9,50 @@ RSpec.describe Groups::UpdateService do
let!(:public_group) { create(:group, :public) }
describe "#execute" do
+ shared_examples 'with packages' do
+ before do
+ group.add_owner(user)
+ end
+
+ context 'with npm packages' do
+ let!(:package) { create(:npm_package, project: project) }
+
+ it 'does not allow a path update' do
+ expect(update_group(group, user, path: 'updated')).to be false
+ expect(group.errors[:path]).to include('cannot change when group contains projects with NPM packages')
+ end
+
+ it 'allows name update' do
+ expect(update_group(group, user, name: 'Updated')).to be true
+ expect(group.errors).to be_empty
+ expect(group.name).to eq('Updated')
+ end
+ end
+ end
+
+ context 'with project' do
+ let!(:group) { create(:group, :public) }
+ let(:project) { create(:project, namespace: group) }
+
+ it_behaves_like 'with packages'
+
+ context 'located in a subgroup' do
+ let(:subgroup) { create(:group, parent: group) }
+ let!(:project) { create(:project, namespace: subgroup) }
+
+ before do
+ subgroup.add_owner(user)
+ end
+
+ it_behaves_like 'with packages'
+
+ it 'does allow a path update if there is not a root namespace change' do
+ expect(update_group(subgroup, user, path: 'updated')).to be true
+ expect(subgroup.errors[:path]).to be_empty
+ end
+ end
+ end
+
context "project visibility_level validation" do
context "public group with public projects" do
let!(:service) { described_class.new(public_group, user, visibility_level: Gitlab::VisibilityLevel::INTERNAL) }
@@ -238,4 +282,8 @@ RSpec.describe Groups::UpdateService do
end
end
end
+
+ def update_group(group, user, opts)
+ Groups::UpdateService.new(group, user, opts).execute
+ end
end