Allow to test JIRA service when project does not have repository
This commit is contained in:
parent
e4c05de75c
commit
8c2143a0a7
4 changed files with 75 additions and 7 deletions
|
@ -163,6 +163,21 @@ class JiraService < IssueTrackerService
|
|||
add_comment(data, issue_key)
|
||||
end
|
||||
|
||||
# reason why service cannot be tested
|
||||
def disabled_title
|
||||
"Please fill in Password and Username."
|
||||
end
|
||||
|
||||
def can_test?
|
||||
username.present? && password.present?
|
||||
end
|
||||
|
||||
# JIRA does not need test data.
|
||||
# We are requesting the project that belongs to the project key.
|
||||
def test_data(user = nil, project = nil)
|
||||
nil
|
||||
end
|
||||
|
||||
def test_settings
|
||||
return unless url.present?
|
||||
# Test settings by getting the project
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
= form.submit 'Save changes', class: 'btn btn-save'
|
||||
|
||||
- if @service.valid? && @service.activated?
|
||||
- disabled = @service.can_test? ? '':'disabled'
|
||||
= link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service), class: "btn #{disabled}", title: @service.disabled_title
|
||||
- unless @service.can_test?
|
||||
- disabled_class = 'disabled'
|
||||
- disabled_title = @service.disabled_title
|
||||
|
||||
= link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service), class: "btn #{disabled_class}", title: disabled_title
|
||||
= link_to "Cancel", namespace_project_services_path(@project.namespace, @project), class: "btn btn-cancel"
|
||||
|
|
4
changelogs/unreleased/issue_23032.yml
Normal file
4
changelogs/unreleased/issue_23032.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Allow to test JIRA service settings without having a repository
|
||||
merge_request:
|
||||
author:
|
|
@ -33,6 +33,41 @@ describe JiraService, models: true do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#can_test?' do
|
||||
let(:jira_service) { described_class.new }
|
||||
|
||||
it 'returns false if username is blank' do
|
||||
allow(jira_service).to receive_messages(
|
||||
url: 'http://jira.example.com',
|
||||
username: '',
|
||||
password: '12345678'
|
||||
)
|
||||
|
||||
expect(jira_service.can_test?).to be_falsy
|
||||
end
|
||||
|
||||
it 'returns false if password is blank' do
|
||||
allow(jira_service).to receive_messages(
|
||||
url: 'http://jira.example.com',
|
||||
username: 'tester',
|
||||
password: ''
|
||||
)
|
||||
|
||||
expect(jira_service.can_test?).to be_falsy
|
||||
end
|
||||
|
||||
it 'returns true if password and username are present' do
|
||||
jira_service = described_class.new
|
||||
allow(jira_service).to receive_messages(
|
||||
url: 'http://jira.example.com',
|
||||
username: 'tester',
|
||||
password: '12345678'
|
||||
)
|
||||
|
||||
expect(jira_service.can_test?).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
describe "Execute" do
|
||||
let(:user) { create(:user) }
|
||||
let(:project) { create(:project) }
|
||||
|
@ -46,16 +81,19 @@ describe JiraService, models: true do
|
|||
service_hook: true,
|
||||
url: 'http://jira.example.com',
|
||||
username: 'gitlab_jira_username',
|
||||
password: 'gitlab_jira_password'
|
||||
password: 'gitlab_jira_password',
|
||||
project_key: 'GitLabProject'
|
||||
)
|
||||
|
||||
@jira_service.save
|
||||
|
||||
project_url = 'http://gitlab_jira_username:gitlab_jira_password@jira.example.com/rest/api/2/issue/JIRA-123'
|
||||
@transitions_url = 'http://gitlab_jira_username:gitlab_jira_password@jira.example.com/rest/api/2/issue/JIRA-123/transitions'
|
||||
@comment_url = 'http://gitlab_jira_username:gitlab_jira_password@jira.example.com/rest/api/2/issue/JIRA-123/comment'
|
||||
project_issues_url = 'http://gitlab_jira_username:gitlab_jira_password@jira.example.com/rest/api/2/issue/JIRA-123'
|
||||
@project_url = 'http://gitlab_jira_username:gitlab_jira_password@jira.example.com/rest/api/2/project/GitLabProject'
|
||||
@transitions_url = 'http://gitlab_jira_username:gitlab_jira_password@jira.example.com/rest/api/2/issue/JIRA-123/transitions'
|
||||
@comment_url = 'http://gitlab_jira_username:gitlab_jira_password@jira.example.com/rest/api/2/issue/JIRA-123/comment'
|
||||
|
||||
WebMock.stub_request(:get, project_url)
|
||||
WebMock.stub_request(:get, @project_url)
|
||||
WebMock.stub_request(:get, project_issues_url)
|
||||
WebMock.stub_request(:post, @transitions_url)
|
||||
WebMock.stub_request(:post, @comment_url)
|
||||
end
|
||||
|
@ -99,6 +137,14 @@ describe JiraService, models: true do
|
|||
body: /this-is-a-custom-id/
|
||||
).once
|
||||
end
|
||||
|
||||
context "when testing" do
|
||||
it "tries to get jira project" do
|
||||
@jira_service.execute(nil)
|
||||
|
||||
expect(WebMock).to have_requested(:get, @project_url)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "Stored password invalidation" do
|
||||
|
|
Loading…
Reference in a new issue