diff options
Diffstat (limited to 'spec/workers/gitlab')
8 files changed, 163 insertions, 186 deletions
diff --git a/spec/workers/gitlab/import/stuck_project_import_jobs_worker_spec.rb b/spec/workers/gitlab/import/stuck_project_import_jobs_worker_spec.rb new file mode 100644 index 00000000000..5afc5717b82 --- /dev/null +++ b/spec/workers/gitlab/import/stuck_project_import_jobs_worker_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Import::StuckProjectImportJobsWorker do + let(:worker) { described_class.new } + + describe 'with scheduled import_status' do + it_behaves_like 'stuck import job detection' do + let(:import_state) { create(:project, :import_scheduled).import_state } + + before do + import_state.update(jid: '123') + end + end + end + + describe 'with started import_status' do + it_behaves_like 'stuck import job detection' do + let(:import_state) { create(:project, :import_started).import_state } + + before do + import_state.update(jid: '123') + end + end + end +end diff --git a/spec/workers/gitlab/jira_import/stage/finish_import_worker_spec.rb b/spec/workers/gitlab/jira_import/stage/finish_import_worker_spec.rb index 4cb6f5e28b8..084302be7d8 100644 --- a/spec/workers/gitlab/jira_import/stage/finish_import_worker_spec.rb +++ b/spec/workers/gitlab/jira_import/stage/finish_import_worker_spec.rb @@ -11,47 +11,33 @@ describe Gitlab::JiraImport::Stage::FinishImportWorker do end describe '#perform' do - context 'when feature flag enabled' do - before do - stub_feature_flags(jira_issue_import: false) - end + let_it_be(:jira_import, reload: true) { create(:jira_import_state, :scheduled, project: project) } + context 'when import did not start' do it_behaves_like 'cannot do Jira import' end - context 'when feature flag enabled' do - let_it_be(:jira_import, reload: true) { create(:jira_import_state, :scheduled, project: project) } + context 'when import started' do + let_it_be(:import_label) { create(:label, project: project, title: 'jira-import') } + let_it_be(:imported_issues) { create_list(:labeled_issue, 3, project: project, labels: [import_label]) } before do - stub_feature_flags(jira_issue_import: true) - end + expect(Gitlab::JiraImport).to receive(:get_import_label_id).and_return(import_label.id) + expect(Gitlab::JiraImport).to receive(:issue_failures).and_return(2) - context 'when import did not start' do - it_behaves_like 'cannot do Jira import' + jira_import.start! + worker.perform(project.id) end - context 'when import started' do - let_it_be(:import_label) { create(:label, project: project, title: 'jira-import') } - let_it_be(:imported_issues) { create_list(:labeled_issue, 3, project: project, labels: [import_label]) } - - before do - expect(Gitlab::JiraImport).to receive(:get_import_label_id).and_return(import_label.id) - expect(Gitlab::JiraImport).to receive(:issue_failures).and_return(2) - - jira_import.start! - worker.perform(project.id) - end - - it 'changes import state to finished' do - expect(project.jira_import_status).to eq('finished') - end + it 'changes import state to finished' do + expect(project.jira_import_status).to eq('finished') + end - it 'saves imported issues counts' do - latest_jira_import = project.latest_jira_import - expect(latest_jira_import.total_issue_count).to eq(5) - expect(latest_jira_import.failed_to_import_count).to eq(2) - expect(latest_jira_import.imported_issues_count).to eq(3) - end + it 'saves imported issues counts' do + latest_jira_import = project.latest_jira_import + expect(latest_jira_import.total_issue_count).to eq(5) + expect(latest_jira_import.failed_to_import_count).to eq(2) + expect(latest_jira_import.imported_issues_count).to eq(3) end end end diff --git a/spec/workers/gitlab/jira_import/stage/import_attachments_worker_spec.rb b/spec/workers/gitlab/jira_import/stage/import_attachments_worker_spec.rb index e6d41ae8bb4..34981d974cd 100644 --- a/spec/workers/gitlab/jira_import/stage/import_attachments_worker_spec.rb +++ b/spec/workers/gitlab/jira_import/stage/import_attachments_worker_spec.rb @@ -10,34 +10,19 @@ describe Gitlab::JiraImport::Stage::ImportAttachmentsWorker do end describe '#perform' do - context 'when feature flag disabled' do - before do - stub_feature_flags(jira_issue_import: false) - end + let_it_be(:jira_import) { create(:jira_import_state, :scheduled, project: project) } + context 'when import did not start' do it_behaves_like 'cannot do Jira import' it_behaves_like 'does not advance to next stage' end - context 'when feature flag enabled' do - let_it_be(:jira_import) { create(:jira_import_state, :scheduled, project: project) } - + context 'when import started' do before do - stub_feature_flags(jira_issue_import: true) + jira_import.start! end - context 'when import did not start' do - it_behaves_like 'cannot do Jira import' - it_behaves_like 'does not advance to next stage' - end - - context 'when import started' do - before do - jira_import.start! - end - - it_behaves_like 'advance to next stage', :notes - end + it_behaves_like 'advance to next stage', :notes end end end diff --git a/spec/workers/gitlab/jira_import/stage/import_issues_worker_spec.rb b/spec/workers/gitlab/jira_import/stage/import_issues_worker_spec.rb index f2067522af4..40f6cf75412 100644 --- a/spec/workers/gitlab/jira_import/stage/import_issues_worker_spec.rb +++ b/spec/workers/gitlab/jira_import/stage/import_issues_worker_spec.rb @@ -13,65 +13,53 @@ describe Gitlab::JiraImport::Stage::ImportIssuesWorker do end describe '#perform' do - context 'when feature flag disabled' do - before do - stub_feature_flags(jira_issue_import: false) - end + let_it_be(:jira_import, reload: true) { create(:jira_import_state, :scheduled, project: project) } + + before do + stub_jira_service_test + end + context 'when import did not start' do it_behaves_like 'cannot do Jira import' it_behaves_like 'does not advance to next stage' end - context 'when feature flag enabled' do - let_it_be(:jira_import, reload: true) { create(:jira_import_state, :scheduled, project: project) } + context 'when import started', :clean_gitlab_redis_cache do + let_it_be(:jira_service) { create(:jira_service, project: project) } before do - stub_feature_flags(jira_issue_import: true) - stub_jira_service_test + jira_import.start! + allow_next_instance_of(Gitlab::JiraImport::IssuesImporter) do |instance| + allow(instance).to receive(:fetch_issues).and_return([]) + end end - context 'when import did not start' do - it_behaves_like 'cannot do Jira import' - it_behaves_like 'does not advance to next stage' + context 'when start_at is nil' do + it_behaves_like 'advance to next stage', :attachments end - context 'when import started', :clean_gitlab_redis_cache do - let_it_be(:jira_service) { create(:jira_service, project: project) } - + context 'when start_at is zero' do before do - jira_import.start! - allow_next_instance_of(Gitlab::JiraImport::IssuesImporter) do |instance| - allow(instance).to receive(:fetch_issues).and_return([]) - end - end - - context 'when start_at is nil' do - it_behaves_like 'advance to next stage', :attachments + allow(Gitlab::Cache::Import::Caching).to receive(:read).and_return(0) end - context 'when start_at is zero' do - before do - allow(Gitlab::Cache::Import::Caching).to receive(:read).and_return(0) - end + it_behaves_like 'advance to next stage', :issues + end - it_behaves_like 'advance to next stage', :issues + context 'when start_at is greater than zero' do + before do + allow(Gitlab::Cache::Import::Caching).to receive(:read).and_return(25) end - context 'when start_at is greater than zero' do - before do - allow(Gitlab::Cache::Import::Caching).to receive(:read).and_return(25) - end + it_behaves_like 'advance to next stage', :issues + end - it_behaves_like 'advance to next stage', :issues + context 'when start_at is below zero' do + before do + allow(Gitlab::Cache::Import::Caching).to receive(:read).and_return(-1) end - context 'when start_at is below zero' do - before do - allow(Gitlab::Cache::Import::Caching).to receive(:read).and_return(-1) - end - - it_behaves_like 'advance to next stage', :attachments - end + it_behaves_like 'advance to next stage', :attachments end end end diff --git a/spec/workers/gitlab/jira_import/stage/import_labels_worker_spec.rb b/spec/workers/gitlab/jira_import/stage/import_labels_worker_spec.rb index 7f289de5422..1215b41bd9f 100644 --- a/spec/workers/gitlab/jira_import/stage/import_labels_worker_spec.rb +++ b/spec/workers/gitlab/jira_import/stage/import_labels_worker_spec.rb @@ -13,48 +13,33 @@ describe Gitlab::JiraImport::Stage::ImportLabelsWorker do end describe '#perform' do - context 'when feature flag disabled' do - before do - stub_feature_flags(jira_issue_import: false) - end + let_it_be(:jira_import, reload: true) { create(:jira_import_state, :scheduled, project: project) } + context 'when import did not start' do it_behaves_like 'cannot do Jira import' it_behaves_like 'does not advance to next stage' end - context 'when feature flag enabled' do - let_it_be(:jira_import, reload: true) { create(:jira_import_state, :scheduled, project: project) } + context 'when import started' do + let!(:jira_service) { create(:jira_service, project: project) } before do - stub_feature_flags(jira_issue_import: true) - end - - context 'when import did not start' do - it_behaves_like 'cannot do Jira import' - it_behaves_like 'does not advance to next stage' - end + stub_jira_service_test - context 'when import started' do - let!(:jira_service) { create(:jira_service, project: project) } + jira_import.start! - before do - stub_jira_service_test + WebMock.stub_request(:get, 'https://jira.example.com/rest/api/2/label?maxResults=500&startAt=0') + .to_return(body: {}.to_json ) + end - jira_import.start! + it_behaves_like 'advance to next stage', :issues - WebMock.stub_request(:get, 'https://jira.example.com/rest/api/2/label?maxResults=500&startAt=0') - .to_return(body: {}.to_json ) + it 'executes labels importer' do + expect_next_instance_of(Gitlab::JiraImport::LabelsImporter) do |instance| + expect(instance).to receive(:execute).and_return(Gitlab::JobWaiter.new) end - it_behaves_like 'advance to next stage', :issues - - it 'executes labels importer' do - expect_next_instance_of(Gitlab::JiraImport::LabelsImporter) do |instance| - expect(instance).to receive(:execute).and_return(Gitlab::JobWaiter.new) - end - - described_class.new.perform(project.id) - end + described_class.new.perform(project.id) end end end diff --git a/spec/workers/gitlab/jira_import/stage/import_notes_worker_spec.rb b/spec/workers/gitlab/jira_import/stage/import_notes_worker_spec.rb index f9bdbd669d8..a0a9ad6f695 100644 --- a/spec/workers/gitlab/jira_import/stage/import_notes_worker_spec.rb +++ b/spec/workers/gitlab/jira_import/stage/import_notes_worker_spec.rb @@ -10,34 +10,19 @@ describe Gitlab::JiraImport::Stage::ImportNotesWorker do end describe '#perform' do - context 'when feature flag disabled' do - before do - stub_feature_flags(jira_issue_import: false) - end + let_it_be(:jira_import) { create(:jira_import_state, :scheduled, project: project) } + context 'when import did not start' do it_behaves_like 'cannot do Jira import' it_behaves_like 'does not advance to next stage' end - context 'when feature flag enabled' do - let_it_be(:jira_import) { create(:jira_import_state, :scheduled, project: project) } - + context 'when import started' do before do - stub_feature_flags(jira_issue_import: true) + jira_import.start! end - context 'when import did not start' do - it_behaves_like 'cannot do Jira import' - it_behaves_like 'does not advance to next stage' - end - - context 'when import started' do - before do - jira_import.start! - end - - it_behaves_like 'advance to next stage', :finish - end + it_behaves_like 'advance to next stage', :finish end end end diff --git a/spec/workers/gitlab/jira_import/stage/start_import_worker_spec.rb b/spec/workers/gitlab/jira_import/stage/start_import_worker_spec.rb index 9cffe6e4ff7..a4fc761accf 100644 --- a/spec/workers/gitlab/jira_import/stage/start_import_worker_spec.rb +++ b/spec/workers/gitlab/jira_import/stage/start_import_worker_spec.rb @@ -12,80 +12,62 @@ describe Gitlab::JiraImport::Stage::StartImportWorker do end describe '#perform' do - context 'when feature flag not disabled' do - before do - stub_feature_flags(jira_issue_import: false) - end + let_it_be(:jira_import, reload: true) { create(:jira_import_state, project: project, jid: jid) } - it 'exits because import not allowed' do + context 'when import is not scheduled' do + it 'exits because import not started' do expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).not_to receive(:perform_async) worker.perform(project.id) end end - context 'when feature flag enabled' do - let_it_be(:jira_import, reload: true) { create(:jira_import_state, project: project, jid: jid) } - + context 'when import is scheduled' do before do - stub_feature_flags(jira_issue_import: true) + jira_import.schedule! end - context 'when import is not scheduled' do - it 'exits because import not started' do - expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).not_to receive(:perform_async) + it 'advances to importing labels' do + expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).to receive(:perform_async) - worker.perform(project.id) - end + worker.perform(project.id) end + end - context 'when import is scheduled' do - before do - jira_import.schedule! - end + context 'when import is started' do + before do + jira_import.update!(status: :started) + end + context 'when this is the same worker that stated import' do it 'advances to importing labels' do + allow(worker).to receive(:jid).and_return(jid) expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).to receive(:perform_async) worker.perform(project.id) end end - context 'when import is started' do - before do - jira_import.update!(status: :started) - end - - context 'when this is the same worker that stated import' do - it 'advances to importing labels' do - allow(worker).to receive(:jid).and_return(jid) - expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).to receive(:perform_async) - - worker.perform(project.id) - end - end - - context 'when this is a different worker that stated import' do - it 'advances to importing labels' do - allow(worker).to receive(:jid).and_return('87654321') - expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).not_to receive(:perform_async) + context 'when this is a different worker that stated import' do + it 'advances to importing labels' do + allow(worker).to receive(:jid).and_return('87654321') + expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).not_to receive(:perform_async) - worker.perform(project.id) - end + worker.perform(project.id) end end + end - context 'when import is finished' do - before do - jira_import.update!(status: :finished) - end + context 'when import is finished' do + before do + jira_import.update!(status: :finished) + end - it 'advances to importing labels' do - allow(worker).to receive(:jid).and_return(jid) - expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).not_to receive(:perform_async) + it 'advances to importing labels' do + allow(worker).to receive(:jid).and_return(jid) + expect(Gitlab::JiraImport::Stage::ImportLabelsWorker).not_to receive(:perform_async) - worker.perform(project.id) - end + worker.perform(project.id) end end end diff --git a/spec/workers/gitlab/jira_import/stuck_jira_import_jobs_worker_spec.rb b/spec/workers/gitlab/jira_import/stuck_jira_import_jobs_worker_spec.rb new file mode 100644 index 00000000000..fae52cec2b4 --- /dev/null +++ b/spec/workers/gitlab/jira_import/stuck_jira_import_jobs_worker_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe ::Gitlab::JiraImport::StuckJiraImportJobsWorker do + let_it_be(:current_user) { create(:user) } + let_it_be(:project) { create(:project) } + let(:worker) { described_class.new } + + describe 'with scheduled Jira import' do + it_behaves_like 'stuck import job detection' do + let(:import_state) { create(:jira_import_state, :scheduled, project: project) } + + before do + import_state.update(jid: '123') + end + end + end + + describe 'with started jira import' do + it_behaves_like 'stuck import job detection' do + let(:import_state) { create(:jira_import_state, :started, project: project) } + + before do + import_state.update(jid: '123') + end + end + end + + describe 'with failed jira import' do + let(:import_state) { create(:jira_import_state, :failed, project: project) } + + it 'detects no stuck jobs' do + expect(worker).to receive(:track_metrics).with(0, 0) + + worker.perform + end + end +end |