Commit fa4d08ed authored by Sean McGivern's avatar Sean McGivern

Merge branch '32483-jira-error' into 'master'

Display specific error message when JIRA test fails

Closes #32483

See merge request !13100
parents 50910755 aa2b3ff1
......@@ -102,7 +102,7 @@ export default class IntegrationSettingsForm {
})
.done((res) => {
if (res.error) {
new Flash(res.message, null, null, {
new Flash(`${res.message} ${res.service_response}`, null, null, {
title: 'Save anyway',
clickHandler: (e) => {
e.preventDefault();
......
......@@ -160,7 +160,10 @@ class JiraService < IssueTrackerService
def test(_)
result = test_settings
{ success: result.present?, result: result }
success = result.present?
result = @error if @error && !success
{ success: success, result: result }
end
# JIRA does not need test data.
......@@ -288,7 +291,8 @@ class JiraService < IssueTrackerService
yield
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, URI::InvalidURIError, JIRA::HTTPError, OpenSSL::SSL::SSLError => e
Rails.logger.info "#{self.class.name} Send message ERROR: #{client_url} - #{e.message}"
@error = e.message
Rails.logger.info "#{self.class.name} Send message ERROR: #{client_url} - #{@error}"
nil
end
......
---
title: Display specific error message when JIRA test fails
merge_request:
author:
......@@ -62,7 +62,7 @@ feature 'Setup Jira service', :js do
click_button('Test settings and save changes')
wait_for_requests
expect(find('.flash-container-page')).to have_content 'Test failed.'
expect(find('.flash-container-page')).to have_content 'Test failed. message'
expect(find('.flash-container-page')).to have_content 'Save anyway'
find('.flash-alert .flash-action').trigger('click')
......
......@@ -135,10 +135,10 @@ describe('IntegrationSettingsForm', () => {
integrationSettingsForm.testSettings(formData);
deferred.resolve({ error: true, message: errorMessage });
deferred.resolve({ error: true, message: errorMessage, service_response: 'some error' });
const $flashContainer = $('.flash-container');
expect($flashContainer.find('.flash-text').text()).toEqual(errorMessage);
expect($flashContainer.find('.flash-text').text()).toEqual('Test failed. some error');
expect($flashContainer.find('.flash-action')).toBeDefined();
expect($flashContainer.find('.flash-action').text()).toEqual('Save anyway');
});
......
......@@ -197,21 +197,38 @@ describe JiraService do
)
end
def test_settings(api_url)
def test_settings(api_url = nil)
api_url ||= 'jira.example.com'
test_url = "http://#{api_url}/rest/api/2/serverInfo"
WebMock.stub_request(:get, test_url).with(basic_auth: %w(jira_username jira_password)).to_return(body: { url: 'http://url' }.to_json )
jira_service.test_settings
jira_service.test(nil)
end
it 'tries to get JIRA project with URL when API URL not set' do
test_settings('jira.example.com')
context 'when the test succeeds' do
it 'tries to get JIRA project with URL when API URL not set' do
test_settings('jira.example.com')
end
it 'returns correct result' do
expect(test_settings).to eq( { success: true, result: { 'url' => 'http://url' } })
end
it 'tries to get JIRA project with API URL if set' do
jira_service.update(api_url: 'http://jira.api.com')
test_settings('jira.api.com')
end
end
it 'tries to get JIRA project with API URL if set' do
jira_service.update(api_url: 'http://jira.api.com')
test_settings('jira.api.com')
context 'when the test fails' do
it 'returns result with the error' do
test_url = 'http://jira.example.com/rest/api/2/serverInfo'
WebMock.stub_request(:get, test_url).with(basic_auth: %w(jira_username jira_password))
.to_raise(JIRA::HTTPError.new(double(message: 'Some specific failure.')))
expect(jira_service.test(nil)).to eq( { success: false, result: 'Some specific failure.' })
end
end
end
......
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