diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-06-09 10:08:04 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-06-09 10:08:04 +0000 |
commit | 378904d6288a96013ff1994f011f2f21ebd67c18 (patch) | |
tree | 1099a5f465bd0909a728a3f4feec5fea97f4e30d | |
parent | 4d6a338cc464a17538446ca4114b629f0600e9b1 (diff) | |
parent | 23954b0f77ec048ed1a74eb30531c63de8b21b17 (diff) | |
download | gitlab-ce-378904d6288a96013ff1994f011f2f21ebd67c18.tar.gz |
Merge branch 'rs-issue-1778' into 'master'
Correctly remove already-mentioned commits for cross references
Fixes #1778
See merge request !785
-rw-r--r-- | app/models/concerns/mentionable.rb | 8 | ||||
-rw-r--r-- | spec/models/concerns/mentionable_spec.rb | 21 |
2 files changed, 26 insertions, 3 deletions
diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb index 6f9f54d08cc..10c39cb1ece 100644 --- a/app/models/concerns/mentionable.rb +++ b/app/models/concerns/mentionable.rb @@ -67,7 +67,13 @@ module Mentionable # Create a cross-reference Note for each GFM reference to another Mentionable found in +mentionable_text+. def create_cross_references!(p = project, a = author, without = []) - refs = references(p) - without + refs = references(p) + + # We're using this method instead of Array diffing because that requires + # both of the object's `hash` values to be the same, which may not be the + # case for otherwise identical Commit objects. + refs.reject! { |ref| without.include?(ref) } + refs.each do |ref| Note.create_cross_reference_note(ref, local_reference, a) end diff --git a/spec/models/concerns/mentionable_spec.rb b/spec/models/concerns/mentionable_spec.rb index eadb941a3fa..22237f2e9f2 100644 --- a/spec/models/concerns/mentionable_spec.rb +++ b/spec/models/concerns/mentionable_spec.rb @@ -1,14 +1,31 @@ require 'spec_helper' describe Issue, "Mentionable" do - describe :mentioned_users do + describe '#mentioned_users' do let!(:user) { create(:user, username: 'stranger') } let!(:user2) { create(:user, username: 'john') } - let!(:issue) { create(:issue, description: '@stranger mentioned') } + let!(:issue) { create(:issue, description: "#{user.to_reference} mentioned") } subject { issue.mentioned_users } it { is_expected.to include(user) } it { is_expected.not_to include(user2) } end + + describe '#create_cross_references!' do + let(:project) { create(:project) } + let(:author) { double('author') } + let(:commit) { project.commit } + let(:commit2) { project.commit } + + let!(:issue) do + create(:issue, project: project, description: commit.to_reference) + end + + it 'correctly removes already-mentioned Commits' do + expect(Note).not_to receive(:create_cross_reference_note) + + issue.create_cross_references!(project, author, [commit2]) + end + end end |