summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2017-04-21 15:20:18 +0000
committerLin Jen-Shin <godfat@godfat.org>2017-04-22 00:21:33 +0800
commit70fece35ad6a845df371603184fe532a312d0dc8 (patch)
treef441aa8ad37770582162c065c5a7e159a68a2be4
parentb5e9b8f8ca6d43acc8e4741bd6c00a8587073bc1 (diff)
downloadgitlab-ce-70fece35ad6a845df371603184fe532a312d0dc8.tar.gz
Merge branch 'sh-fix-issue-31215-2' into 'master'
Based on !10841 Fix Error 500 when referencing issue with project in pending delete Closes #31215 See merge request !10843
-rw-r--r--app/models/issue.rb2
-rw-r--r--changelogs/unreleased/sh-fix-issue-31215-2.yml4
-rw-r--r--spec/lib/banzai/redactor_spec.rb25
3 files changed, 30 insertions, 1 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index d8d9db477d2..26650603ccc 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -201,7 +201,7 @@ class Issue < ActiveRecord::Base
# Returns `true` if the current issue can be viewed by either a logged in User
# or an anonymous user.
def visible_to_user?(user = nil)
- return false unless project.feature_available?(:issues, user)
+ return false unless project && project.feature_available?(:issues, user)
user ? readable_by?(user) : publicly_visible?
end
diff --git a/changelogs/unreleased/sh-fix-issue-31215-2.yml b/changelogs/unreleased/sh-fix-issue-31215-2.yml
new file mode 100644
index 00000000000..eab5bb5d0ae
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-issue-31215-2.yml
@@ -0,0 +1,4 @@
+---
+title: Fix error when an issue reference has a pending deleting project
+merge_request: 10843
+author:
diff --git a/spec/lib/banzai/redactor_spec.rb b/spec/lib/banzai/redactor_spec.rb
index 6d2c141e18b..e6f2963193c 100644
--- a/spec/lib/banzai/redactor_spec.rb
+++ b/spec/lib/banzai/redactor_spec.rb
@@ -42,6 +42,31 @@ describe Banzai::Redactor do
end
end
+ context 'when project is in pending delete' do
+ let!(:issue) { create(:issue, project: project) }
+ let(:redactor) { described_class.new(project, user) }
+
+ before do
+ project.update(pending_delete: true)
+ end
+
+ it 'redacts an issue attached' do
+ doc = Nokogiri::HTML.fragment("<a class='gfm' data-reference-type='issue' data-issue='#{issue.id}'>foo</a>")
+
+ redactor.redact([doc])
+
+ expect(doc.to_html).to eq('foo')
+ end
+
+ it 'redacts an external issue' do
+ doc = Nokogiri::HTML.fragment("<a class='gfm' data-reference-type='issue' data-external-issue='#{issue.id}' data-project='#{project.id}'>foo</a>")
+
+ redactor.redact([doc])
+
+ expect(doc.to_html).to eq('foo')
+ end
+ end
+
context 'when reference visible to user' do
it 'does not redact an array of documents' do
doc1_html = '<a class="gfm" data-reference-type="issue">foo</a>'