Commit 46b7a3f8 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Prevent PG::Error exception when check commit reference on commit

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent 90c96d1d
...@@ -47,7 +47,7 @@ class Note < ActiveRecord::Base ...@@ -47,7 +47,7 @@ class Note < ActiveRecord::Base
scope :for_commit_id, ->(commit_id) { where(noteable_type: "Commit", commit_id: commit_id) } scope :for_commit_id, ->(commit_id) { where(noteable_type: "Commit", commit_id: commit_id) }
scope :inline, ->{ where("line_code IS NOT NULL") } scope :inline, ->{ where("line_code IS NOT NULL") }
scope :not_inline, ->{ where(line_code: [nil, '']) } scope :not_inline, ->{ where(line_code: [nil, '']) }
scope :system, ->{ where(system: true) }
scope :common, ->{ where(noteable_type: ["", nil]) } scope :common, ->{ where(noteable_type: ["", nil]) }
scope :fresh, ->{ order("created_at ASC, id ASC") } scope :fresh, ->{ order("created_at ASC, id ASC") }
scope :inc_author_project, ->{ includes(:project, :author) } scope :inc_author_project, ->{ includes(:project, :author) }
...@@ -168,9 +168,14 @@ class Note < ActiveRecord::Base ...@@ -168,9 +168,14 @@ class Note < ActiveRecord::Base
# Determine whether or not a cross-reference note already exists. # Determine whether or not a cross-reference note already exists.
def cross_reference_exists?(noteable, mentioner) def cross_reference_exists?(noteable, mentioner)
gfm_reference = mentioner_gfm_ref(noteable, mentioner) gfm_reference = mentioner_gfm_ref(noteable, mentioner)
notes = if noteable.is_a?(Commit)
where(['noteable_id = ? and system = ? and note like ?', where(commit_id: noteable.id)
noteable.id, true, "_mentioned in #{gfm_reference}_"]).any? else
where(noteable_id: noteable.id)
end
notes.where('note like ?', "_mentioned in #{gfm_reference}_").
system.any?
end end
def search(query) def search(query)
......
...@@ -258,6 +258,17 @@ describe Note do ...@@ -258,6 +258,17 @@ describe Note do
its(:commit_id) { should == commit.id } its(:commit_id) { should == commit.id }
its(:note) { should == "_mentioned in issue ##{issue.iid}_" } its(:note) { should == "_mentioned in issue ##{issue.iid}_" }
end end
context 'commit from commit' do
let(:parent_commit) { commit.parents.first }
subject { Note.create_cross_reference_note(commit, parent_commit, author, project) }
it { should be_valid }
its(:noteable_type) { should == "Commit" }
its(:noteable_id) { should be_nil }
its(:commit_id) { should == commit.id }
its(:note) { should == "_mentioned in commit #{parent_commit.id[0...6]}_" }
end
end end
describe '#cross_reference_exists?' do describe '#cross_reference_exists?' do
...@@ -278,6 +289,15 @@ describe Note do ...@@ -278,6 +289,15 @@ describe Note do
it 'detects if a mentionable has not already been mentioned' do it 'detects if a mentionable has not already been mentioned' do
Note.cross_reference_exists?(issue, commit1).should be_false Note.cross_reference_exists?(issue, commit1).should be_false
end end
context 'commit on commit' do
before do
Note.create_cross_reference_note(commit0, commit1, author, project)
end
it { Note.cross_reference_exists?(commit0, commit1).should be_true }
it { Note.cross_reference_exists?(commit1, commit0).should be_false }
end
end end
describe '#system?' do describe '#system?' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment