98 lines
2.8 KiB
Ruby
98 lines
2.8 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Mentionable do
|
|
include Mentionable
|
|
|
|
def author
|
|
nil
|
|
end
|
|
|
|
describe :references do
|
|
let(:project) { create(:project) }
|
|
|
|
it 'excludes JIRA references' do
|
|
allow(project).to receive_messages(jira_tracker?: true)
|
|
expect(referenced_mentionables(project, 'JIRA-123')).to be_empty
|
|
end
|
|
end
|
|
end
|
|
|
|
describe Issue, "Mentionable" do
|
|
describe '#mentioned_users' do
|
|
let!(:user) { create(:user, username: 'stranger') }
|
|
let!(:user2) { create(:user, username: 'john') }
|
|
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(SystemNoteService).not_to receive(:cross_reference)
|
|
|
|
issue.create_cross_references!(author, [commit2])
|
|
end
|
|
end
|
|
|
|
describe '#create_new_cross_references!' do
|
|
let(:project) { create(:project) }
|
|
let(:author) { create(:author) }
|
|
let(:issues) { create_list(:issue, 2, project: project, author: author) }
|
|
|
|
context 'before changes are persisted' do
|
|
it 'ignores pre-existing references' do
|
|
issue = create_issue(description: issues[0].to_reference)
|
|
|
|
expect(SystemNoteService).not_to receive(:cross_reference)
|
|
|
|
issue.description = 'New description'
|
|
issue.create_new_cross_references!
|
|
end
|
|
|
|
it 'notifies new references' do
|
|
issue = create_issue(description: issues[0].to_reference)
|
|
|
|
expect(SystemNoteService).to receive(:cross_reference).with(issues[1], any_args)
|
|
|
|
issue.description = issues[1].to_reference
|
|
issue.create_new_cross_references!
|
|
end
|
|
end
|
|
|
|
context 'after changes are persisted' do
|
|
it 'ignores pre-existing references' do
|
|
issue = create_issue(description: issues[0].to_reference)
|
|
|
|
expect(SystemNoteService).not_to receive(:cross_reference)
|
|
|
|
issue.update_attributes(description: 'New description')
|
|
issue.create_new_cross_references!
|
|
end
|
|
|
|
it 'notifies new references' do
|
|
issue = create_issue(description: issues[0].to_reference)
|
|
|
|
expect(SystemNoteService).to receive(:cross_reference).with(issues[1], any_args)
|
|
|
|
issue.update_attributes(description: issues[1].to_reference)
|
|
issue.create_new_cross_references!
|
|
end
|
|
end
|
|
|
|
def create_issue(description:)
|
|
create(:issue, project: project, description: description, author: author)
|
|
end
|
|
end
|
|
end
|