diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 030f9af3..0d1301d0 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -42,7 +42,7 @@ module IssuesHelper end def url_for_issue(issue_id) - if @project.issues_tracker == Project.issues_tracker.default_value + if @project.used_default_issues_tracker? url = project_issue_url project_id: @project, id: issue_id else url = Settings[:issues_tracker][@project.issues_tracker]["issues_url"] @@ -51,20 +51,10 @@ module IssuesHelper end def title_for_issue(issue_id) - if issue = @project.issues.where(id: issue_id).first + if @project.used_default_issues_tracker? && issue = @project.issues.where(id: issue_id).first issue.title else "" end end - - def issue_exists?(issue_id) - return false if @project.nil? - - if @project.issues_tracker == Project.issues_tracker.default_value - @project.issues.where(id: issue_id).first.present? - else - true - end - end end diff --git a/app/models/project.rb b/app/models/project.rb index 9ba3080c..612a318c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -205,6 +205,18 @@ class Project < ActiveRecord::Base issues.tag_counts_on(:labels) end + def issue_exists?(issue_id) + if used_default_issues_tracker? + self.issues.where(id: issue_id).first.present? + else + true + end + end + + def used_default_issues_tracker? + self.issues_tracker == Project.issues_tracker.default_value + end + def services [gitlab_ci_service].compact end diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index befac462..4e78d881 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -163,7 +163,7 @@ module Gitlab end def reference_issue(identifier) - if issue_exists? identifier + if @project.issue_exists? identifier url = url_for_issue(identifier) title = title_for_issue(identifier) diff --git a/spec/factories.rb b/spec/factories.rb index b81984b5..b846f0a4 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -29,6 +29,10 @@ FactoryGirl.define do creator end + factory :redmine_project, parent: :project do + issues_tracker { "redmine" } + end + factory :group do sequence(:name) { |n| "group#{n}" } path { name.downcase.gsub(/\s/, '_') } diff --git a/spec/lib/issues_tracker_spec.rb b/spec/lib/issues_tracker_spec.rb deleted file mode 100644 index f0bbd883..00000000 --- a/spec/lib/issues_tracker_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'spec_helper' - -describe IssuesTracker do - let(:project) { double('project') } - - before do - @project = project - project.stub(repository: stub(ref_names: ['master', 'foo/bar/baz', 'v1.0.0', 'v2.0.0'])) - project.stub(path_with_namespace: 'gitlab/gitlab-ci') - end - - it 'returns url for issue' do - ololo - end -end - diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 48432eac..c5603f52 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -190,4 +190,37 @@ describe Project do Project.new(path: "empty").repository.should be_nil end end + + describe :issue_exists? do + let(:project) { create(:project) } + let(:existed_issue) { create(:issue, project: project) } + let(:not_existed_issue) { create(:issue) } + let(:ext_project) { create(:redmine_project) } + + it "should be true or if used internal tracker and issue exists" do + project.issue_exists?(existed_issue.id).should be_true + end + + it "should be false or if used internal tracker and issue not exists" do + project.issue_exists?(not_existed_issue.id).should be_false + end + + it "should always be true if used other tracker" do + ext_project.issue_exists?(rand(100)).should be_true + end + end + + describe :used_default_issues_tracker? do + let(:project) { create(:project) } + let(:ext_project) { create(:redmine_project) } + + it "should be true if used internal tracker" do + project.used_default_issues_tracker?.should be_true + end + + it "should be false if used other tracker" do + ext_project.used_default_issues_tracker?.should be_false + end + end + end