diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-30 09:10:03 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-30 09:10:03 +0300 |
commit | 27b43bd4d613cc7b8773ca0863b8d8f9b90f6d87 (patch) | |
tree | 8bc7959282786fd8acce856cfa75ad36fda5f020 /spec | |
parent | 6b8e9712617b97b2586c90fe7855aa38e0987831 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/projects/import/jira_controller_spec.rb | 3 | ||||
-rw-r--r-- | spec/factories/usage_data.rb | 5 | ||||
-rw-r--r-- | spec/lib/gitlab/jira_import/base_importer_spec.rb | 20 | ||||
-rw-r--r-- | spec/lib/gitlab/jira_import/issues_importer_spec.rb | 3 | ||||
-rw-r--r-- | spec/lib/gitlab/jira_import/labels_importer_spec.rb | 17 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_spec.rb | 3 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 113 | ||||
-rw-r--r-- | spec/requests/api/graphql/mutations/jira_import/start_spec.rb | 3 | ||||
-rw-r--r-- | spec/services/jira_import/start_import_service_spec.rb | 122 | ||||
-rw-r--r-- | spec/support/helpers/jira_service_helper.rb | 5 | ||||
-rw-r--r-- | spec/workers/gitlab/jira_import/stage/import_issues_worker_spec.rb | 3 | ||||
-rw-r--r-- | spec/workers/gitlab/jira_import/stage/import_labels_worker_spec.rb | 4 |
12 files changed, 212 insertions, 89 deletions
diff --git a/spec/controllers/projects/import/jira_controller_spec.rb b/spec/controllers/projects/import/jira_controller_spec.rb index c3bf0c09fba..d1b0a086576 100644 --- a/spec/controllers/projects/import/jira_controller_spec.rb +++ b/spec/controllers/projects/import/jira_controller_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' describe Projects::Import::JiraController do + include JiraServiceHelper + let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } let_it_be(:jira_project_key) { 'Test' } @@ -61,6 +63,7 @@ describe Projects::Import::JiraController do before do stub_feature_flags(jira_issue_import: true) stub_feature_flags(jira_issue_import_vue: false) + stub_jira_service_test end context 'when Jira service is enabled for the project' do diff --git a/spec/factories/usage_data.rb b/spec/factories/usage_data.rb index b633038b83b..e75d5bd7d18 100644 --- a/spec/factories/usage_data.rb +++ b/spec/factories/usage_data.rb @@ -12,6 +12,11 @@ FactoryBot.define do create(:jira_service, :jira_cloud_service, project: projects[2]) create(:jira_service, :without_properties_callback, project: projects[3], properties: { url: 'https://mysite.atlassian.net' }) + jira_label = create(:label, project: projects[0]) + create(:jira_import_state, :finished, project: projects[0], label: jira_label, failed_to_import_count: 2, imported_issues_count: 7, total_issue_count: 9) + create(:jira_import_state, :finished, project: projects[1], label: jira_label, imported_issues_count: 3, total_issue_count: 3) + create(:jira_import_state, :finished, project: projects[1], label: jira_label, imported_issues_count: 3) + create(:jira_import_state, :scheduled, project: projects[1], label: jira_label) create(:prometheus_service, project: projects[1]) create(:service, project: projects[0], type: 'SlackSlashCommandsService', active: true) create(:service, project: projects[1], type: 'SlackService', active: true) diff --git a/spec/lib/gitlab/jira_import/base_importer_spec.rb b/spec/lib/gitlab/jira_import/base_importer_spec.rb index f22efcb8743..ecaf3def589 100644 --- a/spec/lib/gitlab/jira_import/base_importer_spec.rb +++ b/spec/lib/gitlab/jira_import/base_importer_spec.rb @@ -3,12 +3,17 @@ require 'spec_helper' describe Gitlab::JiraImport::BaseImporter do + include JiraServiceHelper + let(:project) { create(:project) } describe 'with any inheriting class' do - context 'when feature flag disabled' do + context 'when an error is returned from the project validation' do before do stub_feature_flags(jira_issue_import: false) + + allow(project).to receive(:validate_jira_import_settings!) + .and_raise(Projects::ImportService::Error, 'Jira import feature is disabled.') end it 'raises exception' do @@ -16,20 +21,17 @@ describe Gitlab::JiraImport::BaseImporter do end end - context 'when feature flag enabled' do + context 'when project validation is ok' do + let!(:jira_service) { create(:jira_service, project: project) } + before do stub_feature_flags(jira_issue_import: true) - end + stub_jira_service_test - context 'when Jira service was not setup' do - it 'raises exception' do - expect { described_class.new(project) }.to raise_error(Projects::ImportService::Error, 'Jira integration not configured.') - end + allow(project).to receive(:validate_jira_import_settings!) end context 'when Jira service exists' do - let!(:jira_service) { create(:jira_service, project: project) } - context 'when Jira import data is not present' do it 'raises exception' do expect { described_class.new(project) }.to raise_error(Projects::ImportService::Error, 'Unable to find Jira project to import data from.') diff --git a/spec/lib/gitlab/jira_import/issues_importer_spec.rb b/spec/lib/gitlab/jira_import/issues_importer_spec.rb index 8e16fd3e978..a7cf19a9a5b 100644 --- a/spec/lib/gitlab/jira_import/issues_importer_spec.rb +++ b/spec/lib/gitlab/jira_import/issues_importer_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' describe Gitlab::JiraImport::IssuesImporter do + include JiraServiceHelper + let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } let_it_be(:jira_import) { create(:jira_import_state, project: project) } @@ -12,6 +14,7 @@ describe Gitlab::JiraImport::IssuesImporter do before do stub_feature_flags(jira_issue_import: true) + stub_jira_service_test end describe '#imported_items_cache_key' do diff --git a/spec/lib/gitlab/jira_import/labels_importer_spec.rb b/spec/lib/gitlab/jira_import/labels_importer_spec.rb index 9b24021d8d4..4d33ede136e 100644 --- a/spec/lib/gitlab/jira_import/labels_importer_spec.rb +++ b/spec/lib/gitlab/jira_import/labels_importer_spec.rb @@ -3,9 +3,11 @@ require 'spec_helper' describe Gitlab::JiraImport::LabelsImporter do - let_it_be(:user) { create(:user) } - let_it_be(:group) { create(:group) } - let_it_be(:project) { create(:project, group: group) } + include JiraServiceHelper + + let_it_be(:user) { create(:user) } + let_it_be(:group) { create(:group) } + let_it_be(:project) { create(:project, group: group) } let_it_be(:jira_service) { create(:jira_service, project: project) } subject { described_class.new(project).execute } @@ -13,13 +15,14 @@ describe Gitlab::JiraImport::LabelsImporter do before do stub_feature_flags(jira_issue_import: true) stub_const('Gitlab::JiraImport::LabelsImporter::MAX_LABELS', 2) - - WebMock.stub_request(:get, 'https://jira.example.com/rest/api/2/serverInfo') - .to_return(body: { url: 'http://url' }.to_json ) end describe '#execute', :clean_gitlab_redis_cache do - context 'when jira import label is missing from jira import' do + before do + stub_jira_service_test + end + + context 'when label is missing from jira import' do let_it_be(:no_label_jira_import) { create(:jira_import_state, label: nil, project: project) } it 'raises error' do diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index da157eec39f..858ee360d8a 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -44,6 +44,9 @@ describe Gitlab::UsageData, :aggregate_failures do expect(count_data[:projects_jira_active]).to eq(4) expect(count_data[:projects_jira_server_active]).to eq(2) expect(count_data[:projects_jira_cloud_active]).to eq(2) + expect(count_data[:jira_imports_projects_count]).to eq(2) + expect(count_data[:jira_imports_total_imported_count]).to eq(3) + expect(count_data[:jira_imports_total_imported_issues_count]).to eq(13) expect(count_data[:projects_slack_notifications_active]).to eq(2) expect(count_data[:projects_slack_slash_active]).to eq(1) expect(count_data[:projects_slack_active]).to eq(2) diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 18f77592cd6..78c0e8aef1a 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -5945,6 +5945,119 @@ describe Project do end end + describe '#validate_jira_import_settings!' do + include JiraServiceHelper + + let_it_be(:project, reload: true) { create(:project) } + + shared_examples 'raise Jira import error' do |message| + it 'returns error' do + expect { subject }.to raise_error(Projects::ImportService::Error, message) + end + end + + shared_examples 'jira configuration base checks' do + context 'when feature flag is disabled' do + before do + stub_feature_flags(jira_issue_import: false) + end + + it_behaves_like 'raise Jira import error', 'Jira import feature is disabled.' + end + + context 'when feature flag is enabled' do + before do + stub_feature_flags(jira_issue_import: true) + end + + context 'when Jira service was not setup' do + it_behaves_like 'raise Jira import error', 'Jira integration not configured.' + end + + context 'when Jira service exists' do + let!(:jira_service) { create(:jira_service, project: project, active: true) } + + context 'when Jira connection is not valid' do + before do + WebMock.stub_request(:get, 'https://jira.example.com/rest/api/2/serverInfo') + .to_raise(JIRA::HTTPError.new(double(message: 'Some failure.'))) + end + + it_behaves_like 'raise Jira import error', 'Unable to connect to the Jira instance. Please check your Jira integration configuration.' + end + end + end + end + + before do + stub_jira_service_test + end + + context 'without user param' do + subject { project.validate_jira_import_settings! } + + it_behaves_like 'jira configuration base checks' + + context 'when jira connection is valid' do + let!(:jira_service) { create(:jira_service, project: project, active: true) } + + it 'does not return any error' do + expect { subject }.not_to raise_error + end + end + end + + context 'with user param provided' do + let_it_be(:user) { create(:user) } + + subject { project.validate_jira_import_settings!(user: user) } + + context 'when user has permission to run import' do + before do + project.add_maintainer(user) + end + + it_behaves_like 'jira configuration base checks' + end + + context 'when feature flag is enabled' do + before do + stub_feature_flags(jira_issue_import: true) + end + + context 'when user does not have permissions to run the import' do + before do + create(:jira_service, project: project, active: true) + + project.add_developer(user) + end + + it_behaves_like 'raise Jira import error', 'You do not have permissions to run the import.' + end + + context 'when user has permission to run import' do + before do + project.add_maintainer(user) + end + + let!(:jira_service) { create(:jira_service, project: project, active: true) } + + context 'when issues feature is disabled' do + let_it_be(:project, reload: true) { create(:project, :issues_disabled) } + + it_behaves_like 'raise Jira import error', 'Cannot import because issues are not available in this project.' + end + + context 'when everything is ok' do + it 'does not return any error' do + expect { subject }.not_to raise_error + end + end + end + end + end + end + def finish_job(export_job) export_job.start export_job.finish diff --git a/spec/requests/api/graphql/mutations/jira_import/start_spec.rb b/spec/requests/api/graphql/mutations/jira_import/start_spec.rb index c7dcb21ad83..84110098400 100644 --- a/spec/requests/api/graphql/mutations/jira_import/start_spec.rb +++ b/spec/requests/api/graphql/mutations/jira_import/start_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe 'Starting a Jira Import' do + include JiraServiceHelper include GraphqlHelpers let_it_be(:user) { create(:user) } @@ -104,6 +105,8 @@ describe 'Starting a Jira Import' do before do project.reload + + stub_jira_service_test end context 'when issues feature are disabled' do diff --git a/spec/services/jira_import/start_import_service_spec.rb b/spec/services/jira_import/start_import_service_spec.rb index 1eefffe11fa..759e4f3363f 100644 --- a/spec/services/jira_import/start_import_service_spec.rb +++ b/spec/services/jira_import/start_import_service_spec.rb @@ -3,113 +3,89 @@ require 'spec_helper' describe JiraImport::StartImportService do + include JiraServiceHelper + let_it_be(:user) { create(:user) } let_it_be(:project, reload: true) { create(:project) } let(:key) { 'KEY' } subject { described_class.new(user, project, key).execute } - context 'when feature flag disabled' do + context 'when an error is returned from the project validation' do before do - stub_feature_flags(jira_issue_import: false) + allow(project).to receive(:validate_jira_import_settings!) + .and_raise(Projects::ImportService::Error, 'Jira import feature is disabled.') end it_behaves_like 'responds with error', 'Jira import feature is disabled.' end - context 'when feature flag enabled' do + context 'when project validation is ok' do + let!(:jira_service) { create(:jira_service, project: project, active: true) } + before do - stub_feature_flags(jira_issue_import: true) + stub_jira_service_test + allow(project).to receive(:validate_jira_import_settings!) end - context 'when user does not have permissions to run the import' do - before do - create(:jira_service, project: project, active: true) + context 'when Jira project key is not provided' do + let(:key) { '' } - project.add_developer(user) - end - - it_behaves_like 'responds with error', 'You do not have permissions to run the import.' + it_behaves_like 'responds with error', 'Unable to find Jira project to import data from.' end - context 'when user has permission to run import' do - before do - project.add_maintainer(user) - end + context 'when correct data provided' do + let(:fake_key) { 'some-key' } - context 'when Jira service was not setup' do - it_behaves_like 'responds with error', 'Jira integration not configured.' - end + subject { described_class.new(user, project, fake_key).execute } - context 'when Jira service exists' do - let!(:jira_service) { create(:jira_service, project: project, active: true) } + context 'when import is already running' do + let_it_be(:jira_import_state) { create(:jira_import_state, :started, project: project) } - context 'when Jira project key is not provided' do - let(:key) { '' } + it_behaves_like 'responds with error', 'Jira import is already running.' + end - it_behaves_like 'responds with error', 'Unable to find Jira project to import data from.' + context 'when everything is ok' do + it 'returns success response' do + expect(subject).to be_a(ServiceResponse) + expect(subject).to be_success end - context 'when issues feature are disabled' do - let_it_be(:project, reload: true) { create(:project, :issues_disabled) } + it 'schedules Jira import' do + subject - it_behaves_like 'responds with error', 'Cannot import because issues are not available in this project.' + expect(project.latest_jira_import).to be_scheduled end - context 'when correct data provided' do - let(:fake_key) { 'some-key' } - - subject { described_class.new(user, project, fake_key).execute } - - context 'when import is already running' do - let_it_be(:jira_import_state) { create(:jira_import_state, :started, project: project) } + it 'creates Jira import data' do + jira_import = subject.payload[:import_data] - it_behaves_like 'responds with error', 'Jira import is already running.' - end - - context 'when everything is ok' do - it 'returns success response' do - expect(subject).to be_a(ServiceResponse) - expect(subject).to be_success - end - - it 'schedules Jira import' do - subject - - expect(project.latest_jira_import).to be_scheduled - end - end - - it 'creates Jira import data' do - jira_import = subject.payload[:import_data] - - expect(jira_import.jira_project_xid).to eq(0) - expect(jira_import.jira_project_name).to eq(fake_key) - expect(jira_import.jira_project_key).to eq(fake_key) - expect(jira_import.user).to eq(user) - end + expect(jira_import.jira_project_xid).to eq(0) + expect(jira_import.jira_project_name).to eq(fake_key) + expect(jira_import.jira_project_key).to eq(fake_key) + expect(jira_import.user).to eq(user) + end - it 'creates Jira import label' do - expect { subject }.to change { Label.count }.by(1) - end + it 'creates Jira import label' do + expect { subject }.to change { Label.count }.by(1) + end - it 'creates Jira label title with correct number' do - jira_import = subject.payload[:import_data] + it 'creates Jira label title with correct number' do + jira_import = subject.payload[:import_data] - label_title = "jira-import::#{jira_import.jira_project_key}-1" - expect(jira_import.label.title).to eq(label_title) - end + label_title = "jira-import::#{jira_import.jira_project_key}-1" + expect(jira_import.label.title).to eq(label_title) + end + end - context 'when multiple Jira imports for same Jira project' do - let!(:jira_imports) { create_list(:jira_import_state, 3, :finished, project: project, jira_project_key: fake_key)} + context 'when multiple Jira imports for same Jira project' do + let!(:jira_imports) { create_list(:jira_import_state, 3, :finished, project: project, jira_project_key: fake_key)} - it 'creates Jira label title with correct number' do - jira_import = subject.payload[:import_data] + it 'creates Jira label title with correct number' do + jira_import = subject.payload[:import_data] - label_title = "jira-import::#{jira_import.jira_project_key}-4" - expect(jira_import.label.title).to eq(label_title) - end - end + label_title = "jira-import::#{jira_import.jira_project_key}-4" + expect(jira_import.label.title).to eq(label_title) end end end diff --git a/spec/support/helpers/jira_service_helper.rb b/spec/support/helpers/jira_service_helper.rb index c23a8d52c84..198bedfe3bc 100644 --- a/spec/support/helpers/jira_service_helper.rb +++ b/spec/support/helpers/jira_service_helper.rb @@ -78,6 +78,11 @@ module JiraServiceHelper JIRA_API + "/issue/#{issue_id}" end + def stub_jira_service_test + WebMock.stub_request(:get, 'https://jira.example.com/rest/api/2/serverInfo') + .to_return(body: { url: 'http://url' }.to_json) + end + def stub_jira_urls(issue_id) WebMock.stub_request(:get, jira_project_url) WebMock.stub_request(:get, jira_api_comment_url(issue_id)).to_return(body: jira_issue_comments) 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 e19acbebd66..f2067522af4 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 @@ -3,6 +3,8 @@ require 'spec_helper' describe Gitlab::JiraImport::Stage::ImportIssuesWorker do + include JiraServiceHelper + let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, import_type: 'jira') } @@ -25,6 +27,7 @@ describe Gitlab::JiraImport::Stage::ImportIssuesWorker do before do stub_feature_flags(jira_issue_import: true) + stub_jira_service_test end context 'when import did not start' do 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 505137e9b22..7f289de5422 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 @@ -3,6 +3,8 @@ require 'spec_helper' describe Gitlab::JiraImport::Stage::ImportLabelsWorker do + include JiraServiceHelper + let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, import_type: 'jira') } @@ -36,6 +38,8 @@ describe Gitlab::JiraImport::Stage::ImportLabelsWorker do let!(:jira_service) { create(:jira_service, project: project) } before do + stub_jira_service_test + jira_import.start! WebMock.stub_request(:get, 'https://jira.example.com/rest/api/2/label?maxResults=500&startAt=0') |