Commit 4089be8f authored by James Lopez's avatar James Lopez

woo hoo - getting there with the cross-reference issue. Should fix the problem and updated spec

parent a5b011c9
...@@ -280,6 +280,7 @@ class SystemNoteService ...@@ -280,6 +280,7 @@ class SystemNoteService
# mentioner - Mentionable object # mentioner - Mentionable object
# #
# Returns Boolean # Returns Boolean
def self.cross_reference_exists?(noteable, mentioner) def self.cross_reference_exists?(noteable, mentioner)
# Initial scope should be system notes of this noteable type # Initial scope should be system notes of this noteable type
notes = Note.system.where(noteable_type: noteable.class) notes = Note.system.where(noteable_type: noteable.class)
...@@ -291,14 +292,20 @@ class SystemNoteService ...@@ -291,14 +292,20 @@ class SystemNoteService
notes = notes.where(noteable_id: noteable.id) notes = notes.where(noteable_id: noteable.id)
end end
gfm_reference = mentioner.gfm_reference(nil) notes_for_mentioner(mentioner, noteable, notes).count > 0
notes = notes.where('note LIKE ?', "#{cross_reference_note_prefix}%#{gfm_reference}")
notes.count > 0
end end
private private
def self.notes_for_mentioner(mentioner, noteable, notes)
if mentioner.is_a?(Commit)
notes.where('note LIKE ?', "#{cross_reference_note_prefix}%#{mentioner.to_reference(nil)}")
else
gfm_reference = mentioner.gfm_reference(noteable.project)
notes.where(note: cross_reference_note_content(gfm_reference))
end
end
def self.create_note(args = {}) def self.create_note(args = {})
Note.create(args.merge(system: true)) Note.create(args.merge(system: true))
end end
......
...@@ -425,18 +425,20 @@ describe SystemNoteService, services: true do ...@@ -425,18 +425,20 @@ describe SystemNoteService, services: true do
end end
end end
context 'commit from fork' do context 'commit with cross-reference from fork' do
let(:author2) { create(:user) } let(:author2) { create(:user) }
let(:forked_project) { Projects::ForkService.new(project, author2).execute } let(:forked_project) { Projects::ForkService.new(project, author2).execute }
let(:commit2) { forked_project.commit } let(:commit2) { forked_project.commit }
before do before do
described_class.cross_reference(noteable, commit2, author2) allow(commit0).to receive(:to_reference) { noteable.project.to_reference +
commit0.class.reference_prefix + commit0.id}
described_class.cross_reference(noteable, commit0, author2)
end end
it 'is falsey when is a fork mentioning an external issue' do it 'is true when a fork mentions an external issue' do
expect(described_class.cross_reference_exists?(noteable, commit2)). expect(described_class.cross_reference_exists?(noteable, commit2)).
to be_falsey to be true
end end
end end
end end
......
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