summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-03-22 23:36:07 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-03-22 23:36:07 +0000
commitfb30039668f68834d9951746181201423fa8b269 (patch)
tree7a27f3599ea698c3030e3e7d733633ff3fbc4192 /spec
parent1d85e5fffff66e5b074480d91b414968955b1ee5 (diff)
parent83d552d50d5485950052a8b9fcba384b81f33c43 (diff)
downloadgitlab-ce-fb30039668f68834d9951746181201423fa8b269.tar.gz
Merge branch 'disable-ref-generation-in-code-blocks' into 'master'
Disable reference generation in preformatted/code blocks ### Summary If a user adds text in code or preformatted text via Markdown or HTML that contains `#XXX`, the system adds a note that issue `XXX` was mentioned. This is particularly annoying because we often list gdb backtrace dumps into our issues, and many issues get mentioned as a result. For example: ``` (gdb) bt #0 0x00000000004004c4 in second () at main.cc:6 #1 0x00000000004004d2 in first () at main.cc:11 #2 0x00000000004004dd in main () at main.cc:17 (gdb) ``` ### Steps to reproduce 1. In an issue, write the above text using Markdown or HTML tags (e.g. `<code>`, `<pre>`). 2. Observe that [issue 1](https://gitlab.com/gitlab-org/gitlab-ce/issues/1) and [issue 2](https://gitlab.com/gitlab-org/gitlab-ce/issues/2) have a note that says they were mentioned. ### Expected behavior Everything enclosed in the code blocks should be ignored as references. ### Observed behavior Issues get referenced unnecessarily. ### Fix I've made `reference_extractor.rb` strip out HTML and Markdown blocks before processing. I considered running the raw text through the entire Markdown processor, but this seems overkill and perhaps could lead to some unintended side effects. See merge request !365
Diffstat (limited to 'spec')
-rw-r--r--spec/lib/gitlab/reference_extractor_spec.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb
index 5ebe44f6fb7..b3f4bb5aeda 100644
--- a/spec/lib/gitlab/reference_extractor_spec.rb
+++ b/spec/lib/gitlab/reference_extractor_spec.rb
@@ -50,6 +50,26 @@ describe Gitlab::ReferenceExtractor do
expect(text).to eq('issue #123 is just the worst, @user')
end
+ it 'extracts no references for <pre>..</pre> blocks' do
+ subject.analyze("<pre>def puts '#1 issue'\nend\n</pre>```", nil)
+ expect(subject.issues).to be_blank
+ end
+
+ it 'extracts no references for <code>..</code> blocks' do
+ subject.analyze("<code>def puts '!1 request'\nend\n</code>```", nil)
+ expect(subject.merge_requests).to be_blank
+ end
+
+ it 'extracts no references for code blocks with language' do
+ subject.analyze("this code:\n```ruby\ndef puts '#1 issue'\nend\n```", nil)
+ expect(subject.issues).to be_blank
+ end
+
+ it 'extracts issue references for invalid code blocks' do
+ subject.analyze('test: ```this one talks about issue #1234```', nil)
+ expect(subject.issues).to eq([{ project: nil, id: '1234' }])
+ end
+
it 'handles all possible kinds of references' do
accessors = Gitlab::Markdown::TYPES.map { |t| "#{t}s".to_sym }
expect(subject).to respond_to(*accessors)