Commit 70b926e0 authored by Jarka Kadlecova's avatar Jarka Kadlecova

Fix cross referencing for private and internal projects

parent 667005d5
...@@ -44,14 +44,15 @@ module Mentionable ...@@ -44,14 +44,15 @@ module Mentionable
end end
def all_references(current_user = nil, extractor: nil) def all_references(current_user = nil, extractor: nil)
@extractors ||= {}
# Use custom extractor if it's passed in the function parameters. # Use custom extractor if it's passed in the function parameters.
if extractor if extractor
@extractor = extractor @extractors[current_user] = extractor
else else
@extractor ||= Gitlab::ReferenceExtractor. extractor = @extractors[current_user] ||= Gitlab::ReferenceExtractor.new(project, current_user)
new(project, current_user)
@extractor.reset_memoized_values extractor.reset_memoized_values
end end
self.class.mentionable_attrs.each do |attr, options| self.class.mentionable_attrs.each do |attr, options|
...@@ -62,10 +63,10 @@ module Mentionable ...@@ -62,10 +63,10 @@ module Mentionable
skip_project_check: skip_project_check? skip_project_check: skip_project_check?
) )
@extractor.analyze(text, options) extractor.analyze(text, options)
end end
@extractor extractor
end end
def mentioned_users(current_user = nil) def mentioned_users(current_user = nil)
......
---
title: Fix cross referencing for private and internal projects
merge_request: 11243
author:
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment