Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-03-18 23:02:30 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-03-18 23:02:30 +0300
commit41fe97390ceddf945f3d967b8fdb3de4c66b7dea (patch)
tree9c8d89a8624828992f06d892cd2f43818ff5dcc8 /spec/lib/banzai
parent0804d2dc31052fb45a1efecedc8e06ce9bc32862 (diff)
Add latest changes from gitlab-org/gitlab@14-9-stable-eev14.9.0-rc42
Diffstat (limited to 'spec/lib/banzai')
-rw-r--r--spec/lib/banzai/filter/front_matter_filter_spec.rb53
-rw-r--r--spec/lib/banzai/filter/image_link_filter_spec.rb62
-rw-r--r--spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb2
-rw-r--r--spec/lib/banzai/filter/reference_redactor_filter_spec.rb3
-rw-r--r--spec/lib/banzai/filter/references/external_issue_reference_filter_spec.rb19
-rw-r--r--spec/lib/banzai/filter/references/label_reference_filter_spec.rb2
-rw-r--r--spec/lib/banzai/filter/task_list_filter_spec.rb13
-rw-r--r--spec/lib/banzai/reference_redactor_spec.rb3
8 files changed, 142 insertions, 15 deletions
diff --git a/spec/lib/banzai/filter/front_matter_filter_spec.rb b/spec/lib/banzai/filter/front_matter_filter_spec.rb
index 1562c388296..f3543ab9582 100644
--- a/spec/lib/banzai/filter/front_matter_filter_spec.rb
+++ b/spec/lib/banzai/filter/front_matter_filter_spec.rb
@@ -105,6 +105,56 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do
end
end
+ context 'source position mapping' do
+ it 'keeps spaces before and after' do
+ content = <<~MD
+
+
+ ---
+
+ foo: :foo_symbol
+
+ ---
+
+
+ # Header
+ MD
+
+ output = filter(content)
+
+ expect(output).to eq <<~MD
+
+
+ ```yaml:frontmatter
+
+ foo: :foo_symbol
+
+ ```
+
+
+ # Header
+ MD
+ end
+
+ it 'keeps an empty line in place of the encoding' do
+ content = <<~MD
+ # encoding: UTF-8
+ ---
+ foo: :foo_symbol
+ ---
+ MD
+
+ output = filter(content)
+
+ expect(output).to eq <<~MD
+
+ ```yaml:frontmatter
+ foo: :foo_symbol
+ ```
+ MD
+ end
+ end
+
context 'on content without front matter' do
it 'returns the content unmodified' do
content = <<~MD
@@ -119,7 +169,7 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do
context 'on front matter without content' do
it 'converts YAML front matter to a fenced code block' do
- content = <<~MD
+ content = <<~MD.rstrip
---
foo: :foo_symbol
bar: :bar_symbol
@@ -134,7 +184,6 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do
foo: :foo_symbol
bar: :bar_symbol
```
-
MD
end
end
diff --git a/spec/lib/banzai/filter/image_link_filter_spec.rb b/spec/lib/banzai/filter/image_link_filter_spec.rb
index 5c04f6b2b3e..238c3cdb9c1 100644
--- a/spec/lib/banzai/filter/image_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/image_link_filter_spec.rb
@@ -5,34 +5,82 @@ require 'spec_helper'
RSpec.describe Banzai::Filter::ImageLinkFilter do
include FilterSpecHelper
- def image(path)
- %(<img src="#{path}" />)
+ let(:path) { '/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg' }
+ let(:context) { {} }
+
+ def image(path, alt: nil, data_src: nil)
+ alt_tag = alt ? %Q{alt="#{alt}"} : ""
+ data_src_tag = data_src ? %Q{data-src="#{data_src}"} : ""
+
+ %(<img src="#{path}" #{alt_tag} #{data_src_tag} />)
end
it 'wraps the image with a link to the image src' do
- doc = filter(image('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg'))
+ doc = filter(image(path), context)
+
expect(doc.at_css('img')['src']).to eq doc.at_css('a')['href']
end
it 'does not wrap a duplicate link' do
- doc = filter(%Q(<a href="/whatever">#{image('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg')}</a>))
+ doc = filter(%Q(<a href="/whatever">#{image(path)}</a>), context)
+
expect(doc.to_html).to match %r{^<a href="/whatever"><img[^>]*></a>$}
end
it 'works with external images' do
- doc = filter(image('https://i.imgur.com/DfssX9C.jpg'))
+ doc = filter(image('https://i.imgur.com/DfssX9C.jpg'), context)
+
expect(doc.at_css('img')['src']).to eq doc.at_css('a')['href']
end
it 'works with inline images' do
- doc = filter(%Q(<p>test #{image('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg')} inline</p>))
+ doc = filter(%Q(<p>test #{image(path)} inline</p>), context)
+
expect(doc.to_html).to match %r{^<p>test <a[^>]*><img[^>]*></a> inline</p>$}
end
it 'keep the data-canonical-src' do
- doc = filter(%q(<img src="http://assets.example.com/6cd/4d7" data-canonical-src="http://example.com/test.png" />))
+ doc = filter(%q(<img src="http://assets.example.com/6cd/4d7" data-canonical-src="http://example.com/test.png" />), context)
expect(doc.at_css('img')['src']).to eq doc.at_css('a')['href']
expect(doc.at_css('img')['data-canonical-src']).to eq doc.at_css('a')['data-canonical-src']
end
+
+ it 'adds no-attachment icon class to the link' do
+ doc = filter(image(path), context)
+
+ expect(doc.at_css('a')['class']).to match(%r{no-attachment-icon})
+ end
+
+ context 'when :link_replaces_image is true' do
+ let(:context) { { link_replaces_image: true } }
+
+ it 'replaces the image with link to image src', :aggregate_failures do
+ doc = filter(image(path), context)
+
+ expect(doc.to_html).to match(%r{^<a[^>]*>#{path}</a>$})
+ expect(doc.at_css('a')['href']).to eq(path)
+ end
+
+ it 'uses image alt as a link text', :aggregate_failures do
+ doc = filter(image(path, alt: 'My image'), context)
+
+ expect(doc.to_html).to match(%r{^<a[^>]*>My image</a>$})
+ expect(doc.at_css('a')['href']).to eq(path)
+ end
+
+ it 'uses image data-src as a link text', :aggregate_failures do
+ data_src = '/uploads/data-src.png'
+ doc = filter(image(path, data_src: data_src), context)
+
+ expect(doc.to_html).to match(%r{^<a[^>]*>#{data_src}</a>$})
+ expect(doc.at_css('a')['href']).to eq(data_src)
+ end
+
+ it 'adds attachment icon class to the link' do
+ doc = filter(image(path), context)
+
+ expect(doc.at_css('a')['class']).to match(%r{with-attachment-icon})
+ end
+ end
end
diff --git a/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb b/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb
index 0840ccf19e4..ef23725c790 100644
--- a/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb
+++ b/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb
@@ -33,7 +33,7 @@ RSpec.describe Banzai::Filter::IssuableReferenceExpansionFilter do
end
it 'ignores non-issuable links' do
- link = create_link('text', project: project, reference_type: 'issue')
+ link = create_link('text', project: project.id, reference_type: 'issue')
doc = filter(link, context)
expect(doc.css('a').last.text).to eq('text')
diff --git a/spec/lib/banzai/filter/reference_redactor_filter_spec.rb b/spec/lib/banzai/filter/reference_redactor_filter_spec.rb
index d0336e9e059..a2f34d42814 100644
--- a/spec/lib/banzai/filter/reference_redactor_filter_spec.rb
+++ b/spec/lib/banzai/filter/reference_redactor_filter_spec.rb
@@ -3,7 +3,6 @@
require 'spec_helper'
RSpec.describe Banzai::Filter::ReferenceRedactorFilter do
- include ActionView::Helpers::UrlHelper
include FilterSpecHelper
it 'ignores non-GFM links' do
@@ -14,7 +13,7 @@ RSpec.describe Banzai::Filter::ReferenceRedactorFilter do
end
def reference_link(data)
- link_to('text', '', class: 'gfm', data: data)
+ ActionController::Base.helpers.link_to('text', '', class: 'gfm', data: data)
end
it 'skips when the skip_redaction flag is set' do
diff --git a/spec/lib/banzai/filter/references/external_issue_reference_filter_spec.rb b/spec/lib/banzai/filter/references/external_issue_reference_filter_spec.rb
index d7bcebbbe34..2e811d35662 100644
--- a/spec/lib/banzai/filter/references/external_issue_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/references/external_issue_reference_filter_spec.rb
@@ -256,4 +256,23 @@ RSpec.describe Banzai::Filter::References::ExternalIssueReferenceFilter do
it_behaves_like "external issue tracker"
end
end
+
+ context 'checking N+1' do
+ let_it_be(:integration) { create(:redmine_integration, project: project) }
+ let_it_be(:issue1) { ExternalIssue.new("#123", project) }
+ let_it_be(:issue2) { ExternalIssue.new("YT-123", project) }
+
+ before do
+ project.update!(issues_enabled: false)
+ end
+
+ it 'does not have N+1 per multiple references per project', :use_sql_query_cache do
+ single_reference = "External Issue #{issue1.to_reference}"
+ multiple_references = "External Issues #{issue1.to_reference} and #{issue2.to_reference}"
+
+ control_count = ActiveRecord::QueryRecorder.new { reference_filter(single_reference).to_html }.count
+
+ expect { reference_filter(multiple_references).to_html }.not_to exceed_query_limit(control_count)
+ end
+ end
end
diff --git a/spec/lib/banzai/filter/references/label_reference_filter_spec.rb b/spec/lib/banzai/filter/references/label_reference_filter_spec.rb
index b18d68c8dd4..c342a831d62 100644
--- a/spec/lib/banzai/filter/references/label_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/references/label_reference_filter_spec.rb
@@ -277,7 +277,7 @@ RSpec.describe Banzai::Filter::References::LabelReferenceFilter do
end
context 'References with html entities' do
- let!(:label) { create(:label, name: '&lt;html&gt;', project: project) }
+ let!(:label) { create(:label, title: '&lt;html&gt;', project: project) }
it 'links to a valid reference' do
doc = reference_filter('See ~"&lt;html&gt;"')
diff --git a/spec/lib/banzai/filter/task_list_filter_spec.rb b/spec/lib/banzai/filter/task_list_filter_spec.rb
new file mode 100644
index 00000000000..c89acd1a643
--- /dev/null
+++ b/spec/lib/banzai/filter/task_list_filter_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Banzai::Filter::TaskListFilter do
+ include FilterSpecHelper
+
+ it 'adds `<task-button></task-button>` to every list item' do
+ doc = filter("<ul data-sourcepos=\"1:1-2:20\">\n<li data-sourcepos=\"1:1-1:20\">[ ] testing item 1</li>\n<li data-sourcepos=\"2:1-2:20\">[x] testing item 2</li>\n</ul>")
+
+ expect(doc.xpath('.//li//task-button').count).to eq(2)
+ end
+end
diff --git a/spec/lib/banzai/reference_redactor_spec.rb b/spec/lib/banzai/reference_redactor_spec.rb
index 78cceedd0e5..45e14032a98 100644
--- a/spec/lib/banzai/reference_redactor_spec.rb
+++ b/spec/lib/banzai/reference_redactor_spec.rb
@@ -106,13 +106,12 @@ RSpec.describe Banzai::ReferenceRedactor do
end
context 'when the user cannot read cross project' do
- include ActionView::Helpers::UrlHelper
let(:project) { create(:project) }
let(:other_project) { create(:project, :public) }
def create_link(issuable)
type = issuable.class.name.underscore.downcase
- link_to(issuable.to_reference, '',
+ ActionController::Base.helpers.link_to(issuable.to_reference, '',
class: 'gfm has-tooltip',
title: issuable.title,
data: {