Merge branch '31978-cross-reference-fix' into 'master'
Fix cross referencing for private and internal projects Closes #31978 See merge request !11243
This commit is contained in:
commit
cc9a413dcc
3 changed files with 88 additions and 6 deletions
|
@ -44,14 +44,15 @@ module Mentionable
|
|||
end
|
||||
|
||||
def all_references(current_user = nil, extractor: nil)
|
||||
@extractors ||= {}
|
||||
|
||||
# Use custom extractor if it's passed in the function parameters.
|
||||
if extractor
|
||||
@extractor = extractor
|
||||
@extractors[current_user] = extractor
|
||||
else
|
||||
@extractor ||= Gitlab::ReferenceExtractor.
|
||||
new(project, current_user)
|
||||
extractor = @extractors[current_user] ||= Gitlab::ReferenceExtractor.new(project, current_user)
|
||||
|
||||
@extractor.reset_memoized_values
|
||||
extractor.reset_memoized_values
|
||||
end
|
||||
|
||||
self.class.mentionable_attrs.each do |attr, options|
|
||||
|
@ -62,10 +63,10 @@ module Mentionable
|
|||
skip_project_check: skip_project_check?
|
||||
)
|
||||
|
||||
@extractor.analyze(text, options)
|
||||
extractor.analyze(text, options)
|
||||
end
|
||||
|
||||
@extractor
|
||||
extractor
|
||||
end
|
||||
|
||||
def mentioned_users(current_user = nil)
|
||||
|
|
4
changelogs/unreleased/31978-cross-reference-fix.yml
Normal file
4
changelogs/unreleased/31978-cross-reference-fix.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Fix cross referencing for private and internal projects
|
||||
merge_request: 11243
|
||||
author:
|
77
spec/features/issues/notes_on_issues_spec.rb
Normal file
77
spec/features/issues/notes_on_issues_spec.rb
Normal file
|
@ -0,0 +1,77 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'Create notes on issues', :js, :feature do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
shared_examples 'notes with reference' do
|
||||
let(:issue) { create(:issue, project: project) }
|
||||
let(:note_text) { "Check #{mention.to_reference}" }
|
||||
|
||||
before do
|
||||
project.team << [user, :developer]
|
||||
login_as(user)
|
||||
visit namespace_project_issue_path(project.namespace, project, issue)
|
||||
|
||||
fill_in 'note[note]', with: note_text
|
||||
click_button 'Comment'
|
||||
|
||||
wait_for_ajax
|
||||
end
|
||||
|
||||
it 'creates a note with reference and cross references the issue' do
|
||||
page.within('div#notes li.note div.note-text') do
|
||||
expect(page).to have_content(note_text)
|
||||
expect(page.find('a')).to have_content(mention.to_reference)
|
||||
end
|
||||
|
||||
find('div#notes li.note div.note-text a').click
|
||||
|
||||
page.within('div#notes li.note .system-note-message') do
|
||||
expect(page).to have_content('mentioned in issue')
|
||||
expect(page.find('a')).to have_content(issue.to_reference)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'mentioning issue on a private project' do
|
||||
it_behaves_like 'notes with reference' do
|
||||
let(:project) { create(:project, :private) }
|
||||
let(:mention) { create(:issue, project: project) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'mentioning issue on an internal project' do
|
||||
it_behaves_like 'notes with reference' do
|
||||
let(:project) { create(:project, :internal) }
|
||||
let(:mention) { create(:issue, project: project) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'mentioning issue on a public project' do
|
||||
it_behaves_like 'notes with reference' do
|
||||
let(:project) { create(:project, :public) }
|
||||
let(:mention) { create(:issue, project: project) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'mentioning merge request on a private project' do
|
||||
it_behaves_like 'notes with reference' do
|
||||
let(:project) { create(:project, :private) }
|
||||
let(:mention) { create(:merge_request, source_project: project) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'mentioning merge request on an internal project' do
|
||||
it_behaves_like 'notes with reference' do
|
||||
let(:project) { create(:project, :internal) }
|
||||
let(:mention) { create(:merge_request, source_project: project) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'mentioning merge request on a public project' do
|
||||
it_behaves_like 'notes with reference' do
|
||||
let(:project) { create(:project, :public) }
|
||||
let(:mention) { create(:merge_request, source_project: project) }
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue