Make issue tracker service fields required.

This commit is contained in:
Marin Jankovski 2015-01-26 22:08:27 -08:00
parent 00a0d5aeea
commit 33913f9b8f
4 changed files with 91 additions and 4 deletions

View file

@ -319,7 +319,7 @@ class Project < ActiveRecord::Base
end end
def external_issues_trackers def external_issues_trackers
services.select { |service| service.category == :issue_tracker } services.select { |service| service.issue_tracker? }
end end
def external_issue_tracker def external_issue_tracker

View file

@ -1,5 +1,7 @@
class IssueTrackerService < Service class IssueTrackerService < Service
validates :project_url, :issues_url, :new_issue_url, presence: true, if: :activated?
def category def category
:issue_tracker :issue_tracker
end end
@ -34,6 +36,8 @@ class IssueTrackerService < Service
issues_url: issues_tracker['issues_url'], issues_url: issues_tracker['issues_url'],
new_issue_url: issues_tracker['new_issue_url'] new_issue_url: issues_tracker['new_issue_url']
} }
else
self.properties = {}
end end
end end
end end

View file

@ -80,9 +80,9 @@ FactoryGirl.define do
project.create_redmine_service( project.create_redmine_service(
active: true, active: true,
properties: { properties: {
project_url: 'http://redmine/projects/project_name_in_redmine', 'project_url' => 'http://redmine/projects/project_name_in_redmine',
issues_url: "http://redmine/#{project.id}/project_name_in_redmine/:id", 'issues_url' => "http://redmine/#{project.id}/project_name_in_redmine/:id",
new_issue_url: 'http://redmine/projects/project_name_in_redmine/issues/new' 'new_issue_url' => 'http://redmine/projects/project_name_in_redmine/issues/new'
} }
) )
end end

View file

@ -0,0 +1,83 @@
require 'spec_helper'
describe JiraService do
describe "Associations" do
it { should belong_to :project }
it { should have_one :service_hook }
end
describe "Validations" do
context "active" do
before do
subject.active = true
end
it { should validate_presence_of :project_url }
it { should validate_presence_of :issues_url }
it { should validate_presence_of :new_issue_url }
end
end
describe 'description and title' do
let(:project) { create(:project) }
context 'when it is not set' do
before do
@service = project.create_jira_service(active: true)
end
after do
@service.destroy!
end
it 'should be initialized' do
expect(@service.title).to eq('JIRA')
expect(@service.description).to eq("Jira issue tracker")
end
end
context 'when it is set' do
before do
properties = { 'title' => 'Jira One', 'description' => 'Jira One issue tracker' }
@service = project.create_jira_service(active: true, properties: properties)
end
after do
@service.destroy!
end
it "should be correct" do
expect(@service.title).to eq('Jira One')
expect(@service.description).to eq('Jira One issue tracker')
end
end
end
describe 'project and issue urls' do
let(:project) { create(:project) }
context 'when gitlab.yml was initialized' do
before do
settings = { "jira" => {
"title" => "Jira",
"project_url" => "http://jira.sample/projects/project_a",
"issues_url" => "http://jira.sample/issues/:id",
"new_issue_url" => "http://jira.sample/projects/project_a/issues/new"
}
}
Gitlab.config.stub(:issues_tracker).and_return(settings)
@service = project.create_jira_service(active: true)
end
after do
@service.destroy!
end
it 'should be prepopulated with the settings' do
expect(@service.properties[:project_url]).to eq('http://jira.sample/projects/project_a')
expect(@service.properties[:issues_url]).to eq("http://jira.sample/issues/:id")
expect(@service.properties[:new_issue_url]).to eq("http://jira.sample/projects/project_a/issues/new")
end
end
end
end