diff options
Diffstat (limited to 'spec/lib/gitlab/jira_import_spec.rb')
-rw-r--r-- | spec/lib/gitlab/jira_import_spec.rb | 125 |
1 files changed, 124 insertions, 1 deletions
diff --git a/spec/lib/gitlab/jira_import_spec.rb b/spec/lib/gitlab/jira_import_spec.rb index c5c3d6ef4b9..5b95891c97e 100644 --- a/spec/lib/gitlab/jira_import_spec.rb +++ b/spec/lib/gitlab/jira_import_spec.rb @@ -5,9 +5,109 @@ require 'spec_helper' describe Gitlab::JiraImport do let(:project_id) { 321 } + describe '.validate_project_settings!' do + include JiraServiceHelper + + let_it_be(:project, reload: true) { create(:project) } + let(:additional_params) { {} } + + subject { described_class.validate_project_settings!(project, additional_params) } + + 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 'with configuration_check set to false' do + before do + additional_params[:configuration_check] = false + end + + it 'does not raise Jira integration error' do + expect { subject }.not_to raise_error + end + 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 + + before do + stub_jira_service_test + end + + context 'without user param' do + 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) } + + let(:additional_params) { { 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' + + context 'when jira service is configured' do + 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 + + 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 + end + end + describe '.jira_issue_cache_key' do it 'returns cache key for Jira issue imported to given project' do - expect(described_class.jira_issue_cache_key(project_id, 'DEMO-123')).to eq("jira-import/items-mapper/#{project_id}/issues/DEMO-123") + expect(described_class.jira_item_cache_key(project_id, 'DEMO-123', :issues)).to eq("jira-import/items-mapper/#{project_id}/issues/DEMO-123") end end @@ -44,6 +144,29 @@ describe Gitlab::JiraImport do end end + describe '.cache_users_mapping', :clean_gitlab_redis_cache do + let(:data) { { 'user1' => '456', 'user234' => '23' } } + + it 'stores the data correctly' do + described_class.cache_users_mapping(project_id, data) + + expect(Gitlab::Cache::Import::Caching.read("jira-import/items-mapper/#{project_id}/users/user1")).to eq('456') + expect(Gitlab::Cache::Import::Caching.read("jira-import/items-mapper/#{project_id}/users/user234")).to eq('23') + end + end + + describe '.get_user_mapping', :clean_gitlab_redis_cache do + it 'reads the data correctly' do + Gitlab::Cache::Import::Caching.write("jira-import/items-mapper/#{project_id}/users/user-123", '456') + + expect(described_class.get_user_mapping(project_id, 'user-123')).to eq(456) + end + + it 'returns nil if value not found' do + expect(described_class.get_user_mapping(project_id, 'user-123')).to be_nil + end + end + describe '.store_issues_next_started_at', :clean_gitlab_redis_cache do it 'stores nil value' do described_class.store_issues_next_started_at(project_id, nil) |