summaryrefslogtreecommitdiff
path: root/spec/services/groups/transfer_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/groups/transfer_service_spec.rb')
-rw-r--r--spec/services/groups/transfer_service_spec.rb71
1 files changed, 49 insertions, 22 deletions
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index ae04eca3a9f..19b746ade34 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -3,15 +3,15 @@
require 'spec_helper'
RSpec.describe Groups::TransferService do
- let(:user) { create(:user) }
- let(:new_parent_group) { create(:group, :public) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:new_parent_group) { create(:group, :public) }
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_it_be(:new_group) { create(:group, :public) }
let(:project) { create(:project, :public, namespace: group) }
- let(:new_group) { create(:group, :public) }
before do
group.add_owner(user)
@@ -35,8 +35,8 @@ RSpec.describe Groups::TransferService do
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) }
+ let_it_be(:root_group) { create(:group) }
+ let_it_be(:group) { create(:group, parent: root_group) }
before do
root_group.add_owner(user)
@@ -79,8 +79,6 @@ RSpec.describe Groups::TransferService do
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) }
-
before do
allow_next_instance_of(described_class) do |instance|
allow(instance).to receive(:update_group_attributes).and_raise(Gitlab::UpdatePathError, 'namespace directory cannot be moved')
@@ -101,7 +99,7 @@ RSpec.describe Groups::TransferService do
describe '#execute' do
context 'when transforming a group into a root group' do
- let!(:group) { create(:group, :public, :nested) }
+ let_it_be_with_reload(:group) { create(:group, :public, :nested) }
it_behaves_like 'ensuring allowed transfer for a group'
@@ -115,7 +113,7 @@ RSpec.describe Groups::TransferService do
end
context 'when the user does not have the right policies' do
- let!(:group_member) { create(:group_member, :guest, group: group, user: user) }
+ let_it_be(:group_member) { create(:group_member, :guest, group: group, user: user) }
it "returns false" do
expect(transfer_service.execute(nil)).to be_falsy
@@ -128,7 +126,7 @@ RSpec.describe Groups::TransferService do
end
context 'when there is a group with the same path' do
- let!(:group) { create(:group, :public, :nested, path: 'not-unique') }
+ let_it_be(:group) { create(:group, :public, :nested, path: 'not-unique') }
before do
create(:group, path: 'not-unique')
@@ -145,9 +143,9 @@ RSpec.describe Groups::TransferService do
end
context 'when the group is a subgroup and the transfer is valid' do
- let!(:subgroup1) { create(:group, :private, parent: group) }
- let!(:subgroup2) { create(:group, :internal, parent: group) }
- let!(:project1) { create(:project, :repository, :private, namespace: group) }
+ let_it_be(:subgroup1) { create(:group, :private, parent: group) }
+ let_it_be(:subgroup2) { create(:group, :internal, parent: group) }
+ let_it_be(:project1) { create(:project, :repository, :private, namespace: group) }
before do
transfer_service.execute(nil)
@@ -173,12 +171,12 @@ RSpec.describe Groups::TransferService do
end
context 'when transferring a subgroup into another group' do
- let(:group) { create(:group, :public, :nested) }
+ let_it_be_with_reload(:group) { create(:group, :public, :nested) }
it_behaves_like 'ensuring allowed transfer for a group'
context 'when the new parent group is the same as the previous parent group' do
- let(:group) { create(:group, :public, :nested, parent: new_parent_group) }
+ let_it_be(:group) { create(:group, :public, :nested, parent: new_parent_group) }
it 'returns false' do
expect(transfer_service.execute(new_parent_group)).to be_falsy
@@ -191,7 +189,7 @@ RSpec.describe Groups::TransferService do
end
context 'when the user does not have the right policies' do
- let!(:group_member) { create(:group_member, :guest, group: group, user: user) }
+ let_it_be(:group_member) { create(:group_member, :guest, group: group, user: user) }
it "returns false" do
expect(transfer_service.execute(new_parent_group)).to be_falsy
@@ -221,7 +219,7 @@ RSpec.describe Groups::TransferService do
end
context 'when the parent group has a project with the same path' do
- let!(:group) { create(:group, :public, :nested, path: 'foo') }
+ let_it_be_with_reload(:group) { create(:group, :public, :nested, path: 'foo') }
before do
create(:group_member, :owner, group: new_parent_group, user: user)
@@ -240,8 +238,13 @@ RSpec.describe Groups::TransferService do
end
context 'when the group is allowed to be transferred' do
+ let_it_be(:new_parent_group_integration) { create(:slack_service, group: new_parent_group, project: nil, webhook: 'http://new-group.slack.com') }
+
before do
+ allow(PropagateIntegrationWorker).to receive(:perform_async)
+
create(:group_member, :owner, group: new_parent_group, user: user)
+
transfer_service.execute(new_parent_group)
end
@@ -267,6 +270,30 @@ RSpec.describe Groups::TransferService do
end
end
+ context 'with a group integration' do
+ let_it_be(:instance_integration) { create(:slack_service, :instance, webhook: 'http://project.slack.com') }
+ let(:new_created_integration) { Service.find_by(group: group) }
+
+ context 'with an inherited integration' do
+ let_it_be(:group_integration) { create(:slack_service, group: group, project: nil, webhook: 'http://group.slack.com', inherit_from_id: instance_integration.id) }
+
+ it 'replaces inherited integrations', :aggregate_failures do
+ expect(new_created_integration.webhook).to eq(new_parent_group_integration.webhook)
+ expect(PropagateIntegrationWorker).to have_received(:perform_async).with(new_created_integration.id)
+ expect(Service.count).to eq(3)
+ end
+ end
+
+ context 'with a custom integration' do
+ let_it_be(:group_integration) { create(:slack_service, group: group, project: nil, webhook: 'http://group.slack.com') }
+
+ it 'does not updates the integrations', :aggregate_failures do
+ expect { transfer_service.execute(new_parent_group) }.not_to change { group_integration.webhook }
+ expect(PropagateIntegrationWorker).not_to have_received(:perform_async)
+ end
+ end
+ end
+
it 'updates visibility for the group based on the parent group' do
expect(group.visibility_level).to eq(new_parent_group.visibility_level)
end
@@ -464,7 +491,7 @@ RSpec.describe Groups::TransferService do
end
context 'updated paths' do
- let(:group) { create(:group, :public) }
+ let_it_be_with_reload(:group) { create(:group, :public) }
before do
transfer_service.execute(new_parent_group)
@@ -500,10 +527,10 @@ RSpec.describe Groups::TransferService do
end
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) }
+ let_it_be(:old_parent_group) { create(:group) }
+ let_it_be_with_reload(:group) { create(:group, :private, parent: old_parent_group) }
+ let_it_be(:new_group_member) { create(:user) }
+ let_it_be(:old_group_member) { create(:user) }
before do
new_parent_group.add_maintainer(new_group_member)