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:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-04-20 13:00:54 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-04-20 13:00:54 +0300
commit3cccd102ba543e02725d247893729e5c73b38295 (patch)
treef36a04ec38517f5deaaacb5acc7d949688d1e187 /spec/services/groups
parent205943281328046ef7b4528031b90fbda70c75ac (diff)
Add latest changes from gitlab-org/gitlab@14-10-stable-eev14.10.0-rc42
Diffstat (limited to 'spec/services/groups')
-rw-r--r--spec/services/groups/create_service_spec.rb37
-rw-r--r--spec/services/groups/transfer_service_spec.rb122
2 files changed, 104 insertions, 55 deletions
diff --git a/spec/services/groups/create_service_spec.rb b/spec/services/groups/create_service_spec.rb
index 819569d6e67..6e074f451c4 100644
--- a/spec/services/groups/create_service_spec.rb
+++ b/spec/services/groups/create_service_spec.rb
@@ -263,43 +263,6 @@ RSpec.describe Groups::CreateService, '#execute' do
end
end
- describe 'invite team email' do
- let(:service) { described_class.new(user, group_params) }
-
- before do
- allow(Namespaces::InviteTeamEmailWorker).to receive(:perform_in)
- end
-
- it 'is sent' do
- group = service.execute
- delay = Namespaces::InviteTeamEmailService::DELIVERY_DELAY_IN_MINUTES
- expect(Namespaces::InviteTeamEmailWorker).to have_received(:perform_in).with(delay, group.id, user.id)
- end
-
- context 'when group has not been persisted' do
- let(:service) { described_class.new(user, group_params.merge(name: '<script>alert("Attack!")</script>')) }
-
- it 'not sent' do
- expect(Namespaces::InviteTeamEmailWorker).not_to receive(:perform_in)
- service.execute
- end
- end
-
- context 'when group is not root' do
- let(:parent_group) { create :group }
- let(:service) { described_class.new(user, group_params.merge(parent_id: parent_group.id)) }
-
- before do
- parent_group.add_owner(user)
- end
-
- it 'not sent' do
- expect(Namespaces::InviteTeamEmailWorker).not_to receive(:perform_in)
- service.execute
- end
- end
- end
-
describe 'logged_out_marketing_header experiment', :experiment do
let(:service) { described_class.new(user, group_params) }
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index 3a696228382..1c4b7aac87e 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe Groups::TransferService, :sidekiq_inline do
end
let_it_be(:user) { create(:user) }
- let_it_be(:new_parent_group) { create(:group, :public) }
+ let_it_be(:new_parent_group) { create(:group, :public, :crm_enabled) }
let!(:group_member) { create(:group_member, :owner, group: group, user: user) }
let(:transfer_service) { described_class.new(group, user) }
@@ -252,23 +252,6 @@ RSpec.describe Groups::TransferService, :sidekiq_inline do
expect(transfer_service.execute(new_parent_group)).to be_falsy
expect(transfer_service.error).to eq('Transfer failed: The parent group already has a subgroup or a project with the same path.')
end
-
- # currently when a project is created it gets a corresponding project namespace
- # so we test the case where a project without a project namespace is transferred
- # for backward compatibility
- context 'without project namespace' do
- before do
- project_namespace = project.project_namespace
- project.update_column(:project_namespace_id, nil)
- project_namespace.delete
- end
-
- it 'adds an error on group' do
- expect(project.reload.project_namespace).to be_nil
- expect(transfer_service.execute(new_parent_group)).to be_falsy
- expect(transfer_service.error).to eq('Transfer failed: Validation failed: Group URL has already been taken')
- end
- end
end
context 'when projects have project namespaces' do
@@ -876,5 +859,108 @@ RSpec.describe Groups::TransferService, :sidekiq_inline do
end
end
end
+
+ context 'crm' do
+ let(:root_group) { create(:group, :public) }
+ let(:subgroup) { create(:group, :public, parent: root_group) }
+ let(:another_subgroup) { create(:group, :public, parent: root_group) }
+ let(:subsubgroup) { create(:group, :public, parent: subgroup) }
+
+ let(:root_project) { create(:project, group: root_group) }
+ let(:sub_project) { create(:project, group: subgroup) }
+ let(:another_project) { create(:project, group: another_subgroup) }
+ let(:subsub_project) { create(:project, group: subsubgroup) }
+
+ let!(:contacts) { create_list(:contact, 4, group: root_group) }
+ let!(:organizations) { create_list(:organization, 2, group: root_group) }
+
+ before do
+ create(:issue_customer_relations_contact, contact: contacts[0], issue: create(:issue, project: root_project))
+ create(:issue_customer_relations_contact, contact: contacts[1], issue: create(:issue, project: sub_project))
+ create(:issue_customer_relations_contact, contact: contacts[2], issue: create(:issue, project: another_project))
+ create(:issue_customer_relations_contact, contact: contacts[3], issue: create(:issue, project: subsub_project))
+ root_group.add_owner(user)
+ end
+
+ context 'moving up' do
+ let(:group) { subsubgroup }
+
+ it 'retains issue contacts' do
+ expect { transfer_service.execute(root_group) }
+ .not_to change { CustomerRelations::IssueContact.count }
+ end
+ end
+
+ context 'moving down' do
+ let(:group) { subgroup }
+
+ it 'retains issue contacts' do
+ expect { transfer_service.execute(another_subgroup) }
+ .not_to change { CustomerRelations::IssueContact.count }
+ end
+ end
+
+ context 'moving sideways' do
+ let(:group) { subsubgroup }
+
+ it 'retains issue contacts' do
+ expect { transfer_service.execute(another_subgroup) }
+ .not_to change { CustomerRelations::IssueContact.count }
+ end
+ end
+
+ context 'moving to new root group' do
+ let(:group) { root_group }
+
+ before do
+ new_parent_group.add_owner(user)
+ end
+
+ it 'moves all crm objects' do
+ expect { transfer_service.execute(new_parent_group) }
+ .to change { root_group.contacts.count }.by(-4)
+ .and change { root_group.organizations.count }.by(-2)
+ end
+
+ it 'retains issue contacts' do
+ expect { transfer_service.execute(new_parent_group) }
+ .not_to change { CustomerRelations::IssueContact.count }
+ end
+ end
+
+ context 'moving to a subgroup within a new root group' do
+ let(:group) { root_group }
+ let(:subgroup_in_new_parent_group) { create(:group, parent: new_parent_group) }
+
+ context 'with permission on the root group' do
+ before do
+ new_parent_group.add_owner(user)
+ end
+
+ it 'moves all crm objects' do
+ expect { transfer_service.execute(subgroup_in_new_parent_group) }
+ .to change { root_group.contacts.count }.by(-4)
+ .and change { root_group.organizations.count }.by(-2)
+ end
+
+ it 'retains issue contacts' do
+ expect { transfer_service.execute(subgroup_in_new_parent_group) }
+ .not_to change { CustomerRelations::IssueContact.count }
+ end
+ end
+
+ context 'with permission on the subgroup' do
+ before do
+ subgroup_in_new_parent_group.add_owner(user)
+ end
+
+ it 'raises error' do
+ transfer_service.execute(subgroup_in_new_parent_group)
+
+ expect(transfer_service.error).to eq("Transfer failed: Group contains contacts/organizations and you don't have enough permissions to move them to the new root group.")
+ end
+ end
+ end
+ end
end
end