Merge branch '32483-jira-error' into 'master'
Display specific error message when JIRA test fails Closes #32483 See merge request !13100
This commit is contained in:
commit
fa4d08ed81
|
@ -102,7 +102,7 @@ export default class IntegrationSettingsForm {
|
||||||
})
|
})
|
||||||
.done((res) => {
|
.done((res) => {
|
||||||
if (res.error) {
|
if (res.error) {
|
||||||
new Flash(res.message, null, null, {
|
new Flash(`${res.message} ${res.service_response}`, null, null, {
|
||||||
title: 'Save anyway',
|
title: 'Save anyway',
|
||||||
clickHandler: (e) => {
|
clickHandler: (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
|
@ -160,7 +160,10 @@ class JiraService < IssueTrackerService
|
||||||
|
|
||||||
def test(_)
|
def test(_)
|
||||||
result = test_settings
|
result = test_settings
|
||||||
{ success: result.present?, result: result }
|
success = result.present?
|
||||||
|
result = @error if @error && !success
|
||||||
|
|
||||||
|
{ success: success, result: result }
|
||||||
end
|
end
|
||||||
|
|
||||||
# JIRA does not need test data.
|
# JIRA does not need test data.
|
||||||
|
@ -288,7 +291,8 @@ class JiraService < IssueTrackerService
|
||||||
yield
|
yield
|
||||||
|
|
||||||
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, URI::InvalidURIError, JIRA::HTTPError, OpenSSL::SSL::SSLError => e
|
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
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
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')
|
click_button('Test settings and save changes')
|
||||||
wait_for_requests
|
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'
|
expect(find('.flash-container-page')).to have_content 'Save anyway'
|
||||||
|
|
||||||
find('.flash-alert .flash-action').trigger('click')
|
find('.flash-alert .flash-action').trigger('click')
|
||||||
|
|
|
@ -135,10 +135,10 @@ describe('IntegrationSettingsForm', () => {
|
||||||
|
|
||||||
integrationSettingsForm.testSettings(formData);
|
integrationSettingsForm.testSettings(formData);
|
||||||
|
|
||||||
deferred.resolve({ error: true, message: errorMessage });
|
deferred.resolve({ error: true, message: errorMessage, service_response: 'some error' });
|
||||||
|
|
||||||
const $flashContainer = $('.flash-container');
|
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')).toBeDefined();
|
||||||
expect($flashContainer.find('.flash-action').text()).toEqual('Save anyway');
|
expect($flashContainer.find('.flash-action').text()).toEqual('Save anyway');
|
||||||
});
|
});
|
||||||
|
|
|
@ -197,21 +197,38 @@ describe JiraService do
|
||||||
)
|
)
|
||||||
end
|
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"
|
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 )
|
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
|
end
|
||||||
|
|
||||||
it 'tries to get JIRA project with URL when API URL not set' do
|
context 'when the test succeeds' do
|
||||||
test_settings('jira.example.com')
|
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
|
end
|
||||||
|
|
||||||
it 'tries to get JIRA project with API URL if set' do
|
context 'when the test fails' do
|
||||||
jira_service.update(api_url: 'http://jira.api.com')
|
it 'returns result with the error' do
|
||||||
test_settings('jira.api.com')
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue