Commit 757493e2 authored by Arturo Herrero's avatar Arturo Herrero Committed by Markus Koller

Extract JiraService#find_issue method

parent 01eafdbc
...@@ -157,8 +157,12 @@ class JiraService < IssueTrackerService ...@@ -157,8 +157,12 @@ class JiraService < IssueTrackerService
# support any events. # support any events.
end end
def find_issue(issue_key)
jira_request { client.Issue.find(issue_key) }
end
def close_issue(entity, external_issue) def close_issue(entity, external_issue)
issue = jira_request { client.Issue.find(external_issue.iid) } issue = find_issue(external_issue.iid)
return if issue.nil? || has_resolution?(issue) || !jira_issue_transition_id.present? return if issue.nil? || has_resolution?(issue) || !jira_issue_transition_id.present?
...@@ -172,7 +176,7 @@ class JiraService < IssueTrackerService ...@@ -172,7 +176,7 @@ class JiraService < IssueTrackerService
# Depending on the Jira project's workflow, a comment during transition # Depending on the Jira project's workflow, a comment during transition
# may or may not be allowed. Refresh the issue after transition and check # may or may not be allowed. Refresh the issue after transition and check
# if it is closed, so we don't have one comment for every commit. # if it is closed, so we don't have one comment for every commit.
issue = jira_request { client.Issue.find(issue.key) } if transition_issue(issue) issue = find_issue(issue.key) if transition_issue(issue)
add_issue_solved_comment(issue, commit_id, commit_url) if has_resolution?(issue) add_issue_solved_comment(issue, commit_id, commit_url) if has_resolution?(issue)
end end
...@@ -181,7 +185,7 @@ class JiraService < IssueTrackerService ...@@ -181,7 +185,7 @@ class JiraService < IssueTrackerService
return s_("JiraService|Events for %{noteable_model_name} are disabled.") % { noteable_model_name: noteable.model_name.plural.humanize(capitalize: false) } return s_("JiraService|Events for %{noteable_model_name} are disabled.") % { noteable_model_name: noteable.model_name.plural.humanize(capitalize: false) }
end end
jira_issue = jira_request { client.Issue.find(mentioned.id) } jira_issue = find_issue(mentioned.id)
return unless jira_issue.present? return unless jira_issue.present?
......
...@@ -5,12 +5,21 @@ require 'spec_helper' ...@@ -5,12 +5,21 @@ require 'spec_helper'
RSpec.describe JiraService do RSpec.describe JiraService do
include AssetsHelpers include AssetsHelpers
let_it_be(:project) { create(:project, :repository) }
let(:url) { 'http://jira.example.com' } let(:url) { 'http://jira.example.com' }
let(:api_url) { 'http://api-jira.example.com' } let(:api_url) { 'http://api-jira.example.com' }
let(:username) { 'jira-username' } let(:username) { 'jira-username' }
let(:password) { 'jira-password' } let(:password) { 'jira-password' }
let(:transition_id) { 'test27' } let(:transition_id) { 'test27' }
let(:server_info_results) { { 'deploymentType' => 'Cloud' } } let(:server_info_results) { { 'deploymentType' => 'Cloud' } }
let(:jira_service) do
described_class.new(
project: project,
url: url,
username: username,
password: password
)
end
before do before do
WebMock.stub_request(:get, /serverInfo/).to_return(body: server_info_results.to_json ) WebMock.stub_request(:get, /serverInfo/).to_return(body: server_info_results.to_json )
...@@ -19,7 +28,7 @@ RSpec.describe JiraService do ...@@ -19,7 +28,7 @@ RSpec.describe JiraService do
describe '#options' do describe '#options' do
let(:options) do let(:options) do
{ {
project: create(:project), project: project,
active: true, active: true,
username: 'username', username: 'username',
password: 'test', password: 'test',
...@@ -108,7 +117,7 @@ RSpec.describe JiraService do ...@@ -108,7 +117,7 @@ RSpec.describe JiraService do
describe '#create' do describe '#create' do
let(:params) do let(:params) do
{ {
project: create(:project), project: project,
url: url, api_url: api_url, url: url, api_url: api_url,
username: username, password: password, username: username, password: password,
jira_issue_transition_id: transition_id jira_issue_transition_id: transition_id
...@@ -434,10 +443,23 @@ RSpec.describe JiraService do ...@@ -434,10 +443,23 @@ RSpec.describe JiraService do
end end
end end
describe '#find_issue' do
let(:issue_key) { 'JIRA-123' }
let(:issue_url) { "#{url}/rest/api/2/issue/#{issue_key}" }
before do
stub_request(:get, issue_url).with(basic_auth: [username, password])
end
it 'call the Jira API to get the issue' do
jira_service.find_issue(issue_key)
expect(WebMock).to have_requested(:get, issue_url)
end
end
describe '#close_issue' do describe '#close_issue' do
let(:custom_base_url) { 'http://custom_url' } let(:custom_base_url) { 'http://custom_url' }
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
shared_examples 'close_issue' do shared_examples 'close_issue' do
before do before do
...@@ -445,7 +467,6 @@ RSpec.describe JiraService do ...@@ -445,7 +467,6 @@ RSpec.describe JiraService do
allow(@jira_service).to receive_messages( allow(@jira_service).to receive_messages(
project_id: project.id, project_id: project.id,
project: project, project: project,
service_hook: true,
url: 'http://jira.example.com', url: 'http://jira.example.com',
username: 'gitlab_jira_username', username: 'gitlab_jira_username',
password: 'gitlab_jira_password', password: 'gitlab_jira_password',
...@@ -657,17 +678,7 @@ RSpec.describe JiraService do ...@@ -657,17 +678,7 @@ RSpec.describe JiraService do
end end
describe '#create_cross_reference_note' do describe '#create_cross_reference_note' do
let_it_be(:user) { build_stubbed(:user) } let_it_be(:user) { build_stubbed(:user) }
let_it_be(:project) { create(:project, :repository) }
let(:jira_service) do
described_class.new(
project: project,
url: url,
username: username,
password: password
)
end
let(:jira_issue) { ExternalIssue.new('JIRA-123', project) } let(:jira_issue) { ExternalIssue.new('JIRA-123', project) }
subject { jira_service.create_cross_reference_note(jira_issue, resource, user) } subject { jira_service.create_cross_reference_note(jira_issue, resource, user) }
...@@ -732,15 +743,6 @@ RSpec.describe JiraService do ...@@ -732,15 +743,6 @@ RSpec.describe JiraService do
describe '#test' do describe '#test' do
let(:server_info_results) { { 'url' => 'http://url', 'deploymentType' => 'Cloud' } } let(:server_info_results) { { 'url' => 'http://url', 'deploymentType' => 'Cloud' } }
let_it_be(:project) { create(:project, :repository) }
let(:jira_service) do
described_class.new(
url: url,
project: project,
username: username,
password: password
)
end
def server_info def server_info
jira_service.test(nil) jira_service.test(nil)
...@@ -790,7 +792,6 @@ RSpec.describe JiraService do ...@@ -790,7 +792,6 @@ RSpec.describe JiraService do
} }
allow(Gitlab.config).to receive(:issues_tracker).and_return(settings) allow(Gitlab.config).to receive(:issues_tracker).and_return(settings)
project = create(:project)
service = project.create_jira_service(active: true) service = project.create_jira_service(active: true)
expect(service.url).to eq('http://jira.sample/projects/project_a') expect(service.url).to eq('http://jira.sample/projects/project_a')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment