Correctly remove already-mentioned commits for cross references
Fixes #1778
This commit is contained in:
parent
b637f84950
commit
23954b0f77
|
@ -67,7 +67,13 @@ module Mentionable
|
||||||
|
|
||||||
# Create a cross-reference Note for each GFM reference to another Mentionable found in +mentionable_text+.
|
# 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 = [])
|
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|
|
refs.each do |ref|
|
||||||
Note.create_cross_reference_note(ref, local_reference, a)
|
Note.create_cross_reference_note(ref, local_reference, a)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,14 +1,31 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Issue, "Mentionable" do
|
describe Issue, "Mentionable" do
|
||||||
describe :mentioned_users do
|
describe '#mentioned_users' do
|
||||||
let!(:user) { create(:user, username: 'stranger') }
|
let!(:user) { create(:user, username: 'stranger') }
|
||||||
let!(:user2) { create(:user, username: 'john') }
|
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 }
|
subject { issue.mentioned_users }
|
||||||
|
|
||||||
it { is_expected.to include(user) }
|
it { is_expected.to include(user) }
|
||||||
it { is_expected.not_to include(user2) }
|
it { is_expected.not_to include(user2) }
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in New Issue