summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-02-12 18:01:47 +0100
committerJames Lopez <james@jameslopez.es>2016-02-12 18:01:47 +0100
commit4089be8fedbe0499108b32dc0c08b6378efc534c (patch)
treee05f63c3b942cd488eeec38f4d5c0ba3a6e7fae7
parenta5b011c9d8586453d37852856822dab692f6613b (diff)
downloadgitlab-ce-4089be8fedbe0499108b32dc0c08b6378efc534c.tar.gz
woo hoo - getting there with the cross-reference issue. Should fix the problem and updated spec
-rw-r--r--app/services/system_note_service.rb15
-rw-r--r--spec/services/system_note_service_spec.rb10
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