diff options
-rw-r--r-- | app/services/system_note_service.rb | 15 | ||||
-rw-r--r-- | spec/services/system_note_service_spec.rb | 10 |
2 files changed, 17 insertions, 8 deletions
diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index 34b6636c39f..843b44abd17 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -280,6 +280,7 @@ class SystemNoteService # mentioner - Mentionable object # # Returns Boolean + def self.cross_reference_exists?(noteable, mentioner) # Initial scope should be system notes of this noteable type notes = Note.system.where(noteable_type: noteable.class) @@ -291,14 +292,20 @@ class SystemNoteService notes = notes.where(noteable_id: noteable.id) end - gfm_reference = mentioner.gfm_reference(nil) - notes = notes.where('note LIKE ?', "#{cross_reference_note_prefix}%#{gfm_reference}") - - notes.count > 0 + notes_for_mentioner(mentioner, noteable, notes).count > 0 end 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 = {}) Note.create(args.merge(system: true)) end diff --git a/spec/services/system_note_service_spec.rb b/spec/services/system_note_service_spec.rb index 655efa0670b..0c063fcb959 100644 --- a/spec/services/system_note_service_spec.rb +++ b/spec/services/system_note_service_spec.rb @@ -425,18 +425,20 @@ describe SystemNoteService, services: true do end end - context 'commit from fork' do + context 'commit with cross-reference from fork' do let(:author2) { create(:user) } let(:forked_project) { Projects::ForkService.new(project, author2).execute } let(:commit2) { forked_project.commit } 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 - 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)). - to be_falsey + to be true end end end |