diff options
Diffstat (limited to 'spec/services/bulk_create_integration_service_spec.rb')
-rw-r--r-- | spec/services/bulk_create_integration_service_spec.rb | 94 |
1 files changed, 75 insertions, 19 deletions
diff --git a/spec/services/bulk_create_integration_service_spec.rb b/spec/services/bulk_create_integration_service_spec.rb index 5d896f78b35..674382ee14f 100644 --- a/spec/services/bulk_create_integration_service_spec.rb +++ b/spec/services/bulk_create_integration_service_spec.rb @@ -5,13 +5,15 @@ require 'spec_helper' RSpec.describe BulkCreateIntegrationService do include JiraServiceHelper - before do + before_all do stub_jira_service_test end + let_it_be(:excluded_group) { create(:group) } + let_it_be(:excluded_project) { create(:project, group: excluded_group) } + let(:instance_integration) { create(:jira_service, :instance) } + let(:template_integration) { create(:jira_service, :template) } let(:excluded_attributes) { %w[id project_id group_id inherit_from_id instance template created_at updated_at] } - let!(:instance_integration) { create(:jira_service, :instance) } - let!(:template_integration) { create(:jira_service, :template) } shared_examples 'creates integration from batch ids' do it 'updates the inherited integrations' do @@ -37,71 +39,125 @@ RSpec.describe BulkCreateIntegrationService do it 'updates inherit_from_id attributes' do described_class.new(integration, batch, association).execute - expect(created_integration.reload.inherit_from_id).to eq(integration.id) + expect(created_integration.reload.inherit_from_id).to eq(inherit_from_id) end end - shared_examples 'runs project callbacks' do + shared_examples 'updates project callbacks' do it 'updates projects#has_external_issue_tracker for issue tracker services' do described_class.new(integration, batch, association).execute expect(project.reload.has_external_issue_tracker).to eq(true) + expect(excluded_project.reload.has_external_issue_tracker).to eq(false) end context 'with an external wiki integration' do - let(:integration) do - ExternalWikiService.create!( - instance: true, - active: true, - push_events: false, - external_wiki_url: 'http://external-wiki-url.com' - ) + before do + integration.update!(category: 'common', type: 'ExternalWikiService') end it 'updates projects#has_external_wiki for external wiki services' do described_class.new(integration, batch, association).execute expect(project.reload.has_external_wiki).to eq(true) + expect(excluded_project.reload.has_external_wiki).to eq(false) end end end - context 'with an instance-level integration' do + shared_examples 'does not update project callbacks' do + it 'does not update projects#has_external_issue_tracker for issue tracker services' do + described_class.new(integration, batch, association).execute + + expect(project.reload.has_external_issue_tracker).to eq(false) + end + + context 'with an inactive external wiki integration' do + let(:integration) { create(:external_wiki_service, :instance, active: false) } + + it 'does not update projects#has_external_wiki for external wiki services' do + described_class.new(integration, batch, association).execute + + expect(project.reload.has_external_wiki).to eq(false) + end + end + end + + context 'passing an instance-level integration' do let(:integration) { instance_integration } + let(:inherit_from_id) { integration.id } context 'with a project association' do let!(:project) { create(:project) } let(:created_integration) { project.jira_service } - let(:batch) { Project.all } + let(:batch) { Project.where(id: project.id) } let(:association) { 'project' } it_behaves_like 'creates integration from batch ids' it_behaves_like 'updates inherit_from_id' - it_behaves_like 'runs project callbacks' + it_behaves_like 'updates project callbacks' + + context 'when integration is not active' do + before do + integration.update!(active: false) + end + + it_behaves_like 'does not update project callbacks' + end end context 'with a group association' do let!(:group) { create(:group) } let(:created_integration) { Service.find_by(group: group) } - let(:batch) { Group.all } + let(:batch) { Group.where(id: group.id) } + let(:association) { 'group' } + + it_behaves_like 'creates integration from batch ids' + it_behaves_like 'updates inherit_from_id' + end + end + + context 'passing a group integration' do + let_it_be(:group) { create(:group) } + + context 'with a project association' do + let!(:project) { create(:project, group: group) } + let(:integration) { create(:jira_service, group: group, project: nil) } + let(:created_integration) { project.jira_service } + let(:batch) { Project.where(id: Project.minimum(:id)..Project.maximum(:id)).without_integration(integration).in_namespace(integration.group.self_and_descendants) } + let(:association) { 'project' } + let(:inherit_from_id) { integration.id } + + it_behaves_like 'creates integration from batch ids' + it_behaves_like 'updates inherit_from_id' + it_behaves_like 'updates project callbacks' + end + + context 'with a group association' do + let!(:subgroup) { create(:group, parent: group) } + let(:integration) { create(:jira_service, group: group, project: nil, inherit_from_id: instance_integration.id) } + let(:created_integration) { Service.find_by(group: subgroup) } + let(:batch) { Group.where(id: subgroup.id) } let(:association) { 'group' } + let(:inherit_from_id) { instance_integration.id } it_behaves_like 'creates integration from batch ids' it_behaves_like 'updates inherit_from_id' end end - context 'with a template integration' do + context 'passing a template integration' do let(:integration) { template_integration } context 'with a project association' do let!(:project) { create(:project) } let(:created_integration) { project.jira_service } - let(:batch) { Project.all } + let(:batch) { Project.where(id: project.id) } let(:association) { 'project' } + let(:inherit_from_id) { integration.id } it_behaves_like 'creates integration from batch ids' - it_behaves_like 'runs project callbacks' + it_behaves_like 'updates project callbacks' end end end |