diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2018-03-20 09:29:15 +0100 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2018-03-20 09:46:04 +0100 |
commit | 1d4985a5b56b55afb7aae35610eeb19303160faa (patch) | |
tree | baa0dc9b4059061d1c30137a961e9ac971e801d3 | |
parent | 5f6754185fc8bca6bb510a0aa17410dbffa293ff (diff) | |
download | gitlab-ce-jprovazn-issueref.tar.gz |
Fix issuable state indicatorjprovazn-issueref
Now the issuable reference check works only in project scope, if we
reference an issuable from a non-project resource (e.g. epics), then
project is not set, and there is mismatch in generated issue references.
With this patch, if project is not set we also check if an html text
isn't full path issuable reference.
Closes gitlab-ee#4683
Related to #30916
-rw-r--r-- | changelogs/unreleased/jprovazn-issueref.yml | 6 | ||||
-rw-r--r-- | lib/banzai/filter/issuable_state_filter.rb | 6 | ||||
-rw-r--r-- | spec/lib/banzai/filter/issuable_state_filter_spec.rb | 7 |
3 files changed, 18 insertions, 1 deletions
diff --git a/changelogs/unreleased/jprovazn-issueref.yml b/changelogs/unreleased/jprovazn-issueref.yml new file mode 100644 index 00000000000..ee19cac7b19 --- /dev/null +++ b/changelogs/unreleased/jprovazn-issueref.yml @@ -0,0 +1,6 @@ +--- +title: Display state indicator for issuable references in non-project scope (e.g. + when referencing issuables from group scope). +merge_request: +author: +type: fixed diff --git a/lib/banzai/filter/issuable_state_filter.rb b/lib/banzai/filter/issuable_state_filter.rb index 77299abe324..aadca04a4bb 100644 --- a/lib/banzai/filter/issuable_state_filter.rb +++ b/lib/banzai/filter/issuable_state_filter.rb @@ -17,7 +17,7 @@ module Banzai issuables.each do |node, issuable| next if !can_read_cross_project? && issuable.project != project - if VISIBLE_STATES.include?(issuable.state) && node.inner_html == issuable.reference_link_text(project) + if VISIBLE_STATES.include?(issuable.state) && issuable_reference?(node.inner_html, issuable) node.content += " (#{issuable.state})" end end @@ -27,6 +27,10 @@ module Banzai private + def issuable_reference?(text, issuable) + text == issuable.reference_link_text(project) || (project.nil? && text == issuable.to_reference(project, full: true)) + end + def can_read_cross_project? Ability.allowed?(current_user, :read_cross_project) end diff --git a/spec/lib/banzai/filter/issuable_state_filter_spec.rb b/spec/lib/banzai/filter/issuable_state_filter_spec.rb index 17347768a49..9c11d12562a 100644 --- a/spec/lib/banzai/filter/issuable_state_filter_spec.rb +++ b/spec/lib/banzai/filter/issuable_state_filter_spec.rb @@ -77,6 +77,13 @@ describe Banzai::Filter::IssuableStateFilter do expect(doc.css('a').last.text).to eq("#{closed_issue.to_reference(other_project)} (closed)") end + it 'handles references from non-project scopes' do + link = create_link(closed_issue.to_reference(other_project), issue: closed_issue.id, reference_type: 'issue') + doc = filter(link, context.merge(project: nil)) + + expect(doc.css('a').last.text).to eq("#{closed_issue.to_reference(other_project)} (closed)") + end + it 'skips cross project references if the user cannot read cross project' do expect(Ability).to receive(:allowed?).with(user, :read_cross_project) { false } link = create_link(closed_issue.to_reference(other_project), issue: closed_issue.id, reference_type: 'issue') |