diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 11:43:02 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 11:43:02 +0300 |
commit | d9ab72d6080f594d0b3cae15f14b3ef2c6c638cb (patch) | |
tree | 2341ef426af70ad1e289c38036737e04b0aa5007 /spec/lib/banzai | |
parent | d6e514dd13db8947884cd58fe2a9c2a063400a9b (diff) |
Add latest changes from gitlab-org/gitlab@14-4-stable-eev14.4.0-rc42
Diffstat (limited to 'spec/lib/banzai')
7 files changed, 70 insertions, 12 deletions
diff --git a/spec/lib/banzai/cross_project_reference_spec.rb b/spec/lib/banzai/cross_project_reference_spec.rb index 60ff15a88e0..e703bbc4927 100644 --- a/spec/lib/banzai/cross_project_reference_spec.rb +++ b/spec/lib/banzai/cross_project_reference_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' RSpec.describe Banzai::CrossProjectReference do let(:including_class) { Class.new.include(described_class).new } - let(:reference_cache) { Banzai::Filter::References::ReferenceCache.new(including_class, {})} + let(:reference_cache) { Banzai::Filter::References::ReferenceCache.new(including_class, {}, {})} before do allow(including_class).to receive(:context).and_return({}) diff --git a/spec/lib/banzai/filter/front_matter_filter_spec.rb b/spec/lib/banzai/filter/front_matter_filter_spec.rb index 3f966c94dd3..cef6a2ddcce 100644 --- a/spec/lib/banzai/filter/front_matter_filter_spec.rb +++ b/spec/lib/banzai/filter/front_matter_filter_spec.rb @@ -39,7 +39,7 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do aggregate_failures do expect(output).not_to include '---' - expect(output).to include "```yaml\nfoo: :foo_symbol\n" + expect(output).to include "```yaml:frontmatter\nfoo: :foo_symbol\n" end end @@ -59,7 +59,7 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do aggregate_failures do expect(output).not_to include '+++' - expect(output).to include "```toml\nfoo = :foo_symbol\n" + expect(output).to include "```toml:frontmatter\nfoo = :foo_symbol\n" end end @@ -81,7 +81,7 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do aggregate_failures do expect(output).not_to include ';;;' - expect(output).to include "```json\n{\n \"foo\": \":foo_symbol\",\n" + expect(output).to include "```json:frontmatter\n{\n \"foo\": \":foo_symbol\",\n" end end @@ -101,7 +101,7 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do aggregate_failures do expect(output).not_to include '---arbitrary' - expect(output).to include "```arbitrary\nfoo = :foo_symbol\n" + expect(output).to include "```arbitrary:frontmatter\nfoo = :foo_symbol\n" end end @@ -130,7 +130,7 @@ RSpec.describe Banzai::Filter::FrontMatterFilter do aggregate_failures do expect(output).to eq <<~MD - ```yaml + ```yaml:frontmatter foo: :foo_symbol bar: :bar_symbol ``` diff --git a/spec/lib/banzai/filter/references/milestone_reference_filter_spec.rb b/spec/lib/banzai/filter/references/milestone_reference_filter_spec.rb index cdf6110dd6c..c21a9339ebb 100644 --- a/spec/lib/banzai/filter/references/milestone_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/references/milestone_reference_filter_spec.rb @@ -437,6 +437,19 @@ RSpec.describe Banzai::Filter::References::MilestoneReferenceFilter do expect(reference_filter(act, context).to_html).to eq exp end end + + context 'when referencing both project and group milestones' do + let(:milestone) { create(:milestone, project: project) } + let(:group_milestone) { create(:milestone, title: 'group_milestone', group: group) } + + it 'links to valid references' do + links = reference_filter("See #{milestone.to_reference(full: true)} and #{group_milestone.to_reference}", context).css('a') + + expect(links.length).to eq(2) + expect(links[0].attr('href')).to eq(urls.milestone_url(milestone)) + expect(links[1].attr('href')).to eq(urls.milestone_url(group_milestone)) + end + end end context 'when milestone is open' do diff --git a/spec/lib/banzai/filter/references/reference_cache_spec.rb b/spec/lib/banzai/filter/references/reference_cache_spec.rb index c9404c381d3..dcd153da16a 100644 --- a/spec/lib/banzai/filter/references/reference_cache_spec.rb +++ b/spec/lib/banzai/filter/references/reference_cache_spec.rb @@ -12,15 +12,48 @@ RSpec.describe Banzai::Filter::References::ReferenceCache do let(:filter_class) { Banzai::Filter::References::IssueReferenceFilter } let(:filter) { filter_class.new(doc, project: project) } - let(:cache) { described_class.new(filter, { project: project }) } + let(:cache) { described_class.new(filter, { project: project }, result) } + let(:result) { {} } describe '#load_references_per_parent' do + subject { cache.load_references_per_parent(filter.nodes) } + it 'loads references grouped per parent paths' do - cache.load_references_per_parent(filter.nodes) + expect(doc).to receive(:to_html).and_call_original + + subject expect(cache.references_per_parent).to eq({ project.full_path => [issue1.iid, issue2.iid].to_set, project2.full_path => [issue3.iid].to_set }) end + + context 'when rendered_html is memoized' do + let(:result) { { rendered_html: 'html' } } + + it 'reuses memoized rendered HTML when available' do + expect(doc).not_to receive(:to_html) + + subject + end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(reference_cache_memoization: false) + end + + it 'ignores memoized rendered HTML' do + expect(doc).to receive(:to_html).and_call_original + + subject + end + end + end + + context 'when result is not available' do + let(:result) { nil } + + it { expect { subject }.not_to raise_error } + end end describe '#load_parent_per_reference' do @@ -47,7 +80,7 @@ RSpec.describe Banzai::Filter::References::ReferenceCache do it 'does not have an N+1 query problem with cross projects' do doc_single = Nokogiri::HTML.fragment("#1") filter_single = filter_class.new(doc_single, project: project) - cache_single = described_class.new(filter_single, { project: project }) + cache_single = described_class.new(filter_single, { project: project }, {}) control_count = ActiveRecord::QueryRecorder.new do cache_single.load_references_per_parent(filter_single.nodes) diff --git a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb index 16e30604c99..7e45ecdd135 100644 --- a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb +++ b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb @@ -98,6 +98,14 @@ RSpec.describe Banzai::Filter::SyntaxHighlightFilter do end end + context "when sourcepos metadata is available" do + it "includes it in the highlighted code block" do + result = filter('<pre data-sourcepos="1:1-3:3"><code lang="plaintext">This is a test</code></pre>') + + expect(result.to_html).to eq('<pre data-sourcepos="1:1-3:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">This is a test</span></code></pre>') + end + end + context "when Rouge lexing fails" do before do allow_next_instance_of(Rouge::Lexers::Ruby) do |instance| diff --git a/spec/lib/banzai/pipeline/full_pipeline_spec.rb b/spec/lib/banzai/pipeline/full_pipeline_spec.rb index 72661003361..7a335fad3f8 100644 --- a/spec/lib/banzai/pipeline/full_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/full_pipeline_spec.rb @@ -34,15 +34,16 @@ RSpec.describe Banzai::Pipeline::FullPipeline do let(:identifier) { html[/.*fnref1-(\d+).*/, 1] } let(:footnote_markdown) do <<~EOF - first[^1] and second[^second] + first[^1] and second[^second] and twenty[^twenty] [^1]: one [^second]: two + [^twenty]: twenty EOF end let(:filtered_footnote) do <<~EOF - <p dir="auto">first<sup class="footnote-ref"><a href="#fn1-#{identifier}" id="fnref1-#{identifier}">1</a></sup> and second<sup class="footnote-ref"><a href="#fn2-#{identifier}" id="fnref2-#{identifier}">2</a></sup></p> + <p dir="auto">first<sup class="footnote-ref"><a href="#fn1-#{identifier}" id="fnref1-#{identifier}">1</a></sup> and second<sup class="footnote-ref"><a href="#fn2-#{identifier}" id="fnref2-#{identifier}">2</a></sup> and twenty<sup class="footnote-ref"><a href="#fn3-#{identifier}" id="fnref3-#{identifier}">3</a></sup></p> <section class="footnotes"><ol> <li id="fn1-#{identifier}"> @@ -51,6 +52,9 @@ RSpec.describe Banzai::Pipeline::FullPipeline do <li id="fn2-#{identifier}"> <p>two <a href="#fnref2-#{identifier}" class="footnote-backref"><gl-emoji title="leftwards arrow with hook" data-name="leftwards_arrow_with_hook" data-unicode-version="1.1">↩</gl-emoji></a></p> </li> + <li id="fn3-#{identifier}"> + <p>twenty <a href="#fnref3-#{identifier}" class="footnote-backref"><gl-emoji title="leftwards arrow with hook" data-name="leftwards_arrow_with_hook" data-unicode-version="1.1">↩</gl-emoji></a></p> + </li> </ol></section> EOF end diff --git a/spec/lib/banzai/pipeline/pre_process_pipeline_spec.rb b/spec/lib/banzai/pipeline/pre_process_pipeline_spec.rb index c628d8d5b41..5021ef3a79a 100644 --- a/spec/lib/banzai/pipeline/pre_process_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/pre_process_pipeline_spec.rb @@ -20,7 +20,7 @@ RSpec.describe Banzai::Pipeline::PreProcessPipeline do aggregate_failures do expect(result[:output]).not_to include "\xEF\xBB\xBF" expect(result[:output]).not_to include '---' - expect(result[:output]).to include "```yaml\nfoo: :foo_symbol\n" + expect(result[:output]).to include "```yaml:frontmatter\nfoo: :foo_symbol\n" expect(result[:output]).to include "> blockquote\n" end end |