Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarin Jankovski <maxlazio@gmail.com>2015-01-27 09:08:27 +0300
committerMarin Jankovski <maxlazio@gmail.com>2015-01-27 09:08:27 +0300
commit33913f9b8fef1f8df45dc26239faf8fa4cffc982 (patch)
treed8e1686bf7c74e6c936ab2598a9780b46afae28c
parent00a0d5aeeaf19ea4d72fd1890afac099026f1706 (diff)
Make issue tracker service fields required.
-rw-r--r--app/models/project.rb2
-rw-r--r--app/models/project_services/issue_tracker_service.rb4
-rw-r--r--spec/factories/projects.rb6
-rw-r--r--spec/models/jira_service_spec.rb83
4 files changed, 91 insertions, 4 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index de31f14b98e..43b61897a3c 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -319,7 +319,7 @@ class Project < ActiveRecord::Base
end
def external_issues_trackers
- services.select { |service| service.category == :issue_tracker }
+ services.select { |service| service.issue_tracker? }
end
def external_issue_tracker
diff --git a/app/models/project_services/issue_tracker_service.rb b/app/models/project_services/issue_tracker_service.rb
index 7ff6e0f284d..fc7b2fe5acd 100644
--- a/app/models/project_services/issue_tracker_service.rb
+++ b/app/models/project_services/issue_tracker_service.rb
@@ -1,5 +1,7 @@
class IssueTrackerService < Service
+ validates :project_url, :issues_url, :new_issue_url, presence: true, if: :activated?
+
def category
:issue_tracker
end
@@ -34,6 +36,8 @@ class IssueTrackerService < Service
issues_url: issues_tracker['issues_url'],
new_issue_url: issues_tracker['new_issue_url']
}
+ else
+ self.properties = {}
end
end
end
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index 499139089d9..5ae57718c1a 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -80,9 +80,9 @@ FactoryGirl.define do
project.create_redmine_service(
active: true,
properties: {
- project_url: 'http://redmine/projects/project_name_in_redmine',
- issues_url: "http://redmine/#{project.id}/project_name_in_redmine/:id",
- new_issue_url: 'http://redmine/projects/project_name_in_redmine/issues/new'
+ 'project_url' => 'http://redmine/projects/project_name_in_redmine',
+ 'issues_url' => "http://redmine/#{project.id}/project_name_in_redmine/:id",
+ 'new_issue_url' => 'http://redmine/projects/project_name_in_redmine/issues/new'
}
)
end
diff --git a/spec/models/jira_service_spec.rb b/spec/models/jira_service_spec.rb
new file mode 100644
index 00000000000..0c73a68c924
--- /dev/null
+++ b/spec/models/jira_service_spec.rb
@@ -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