diff options
Diffstat (limited to 'spec/lib/banzai')
89 files changed, 471 insertions, 87 deletions
diff --git a/spec/lib/banzai/color_parser_spec.rb b/spec/lib/banzai/color_parser_spec.rb index d9202ce77db..95b3955d8fe 100644 --- a/spec/lib/banzai/color_parser_spec.rb +++ b/spec/lib/banzai/color_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ColorParser do +RSpec.describe Banzai::ColorParser do describe '.parse' do context 'HEX format' do [ diff --git a/spec/lib/banzai/commit_renderer_spec.rb b/spec/lib/banzai/commit_renderer_spec.rb index e5a16b167be..a10dd6eb3a2 100644 --- a/spec/lib/banzai/commit_renderer_spec.rb +++ b/spec/lib/banzai/commit_renderer_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::CommitRenderer do +RSpec.describe Banzai::CommitRenderer do describe '.render', :clean_gitlab_redis_cache do it 'renders a commit description and title' do user = build(:user) diff --git a/spec/lib/banzai/cross_project_reference_spec.rb b/spec/lib/banzai/cross_project_reference_spec.rb index cf41af7e7a1..95b78ceb5d5 100644 --- a/spec/lib/banzai/cross_project_reference_spec.rb +++ b/spec/lib/banzai/cross_project_reference_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::CrossProjectReference do +RSpec.describe Banzai::CrossProjectReference do let(:including_class) { Class.new.include(described_class).new } before do diff --git a/spec/lib/banzai/filter/absolute_link_filter_spec.rb b/spec/lib/banzai/filter/absolute_link_filter_spec.rb index b61bd496dba..2cb70850dca 100644 --- a/spec/lib/banzai/filter/absolute_link_filter_spec.rb +++ b/spec/lib/banzai/filter/absolute_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::AbsoluteLinkFilter do +RSpec.describe Banzai::Filter::AbsoluteLinkFilter do def filter(doc, context = {}) described_class.call(doc, context) end diff --git a/spec/lib/banzai/filter/abstract_reference_filter_spec.rb b/spec/lib/banzai/filter/abstract_reference_filter_spec.rb index 6890a70518b..797f1c8d52f 100644 --- a/spec/lib/banzai/filter/abstract_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/abstract_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::AbstractReferenceFilter do +RSpec.describe Banzai::Filter::AbstractReferenceFilter do let_it_be(:project) { create(:project) } let(:doc) { Nokogiri::HTML.fragment('') } diff --git a/spec/lib/banzai/filter/ascii_doc_post_processing_filter_spec.rb b/spec/lib/banzai/filter/ascii_doc_post_processing_filter_spec.rb index bd06dae26ba..334d5c59828 100644 --- a/spec/lib/banzai/filter/ascii_doc_post_processing_filter_spec.rb +++ b/spec/lib/banzai/filter/ascii_doc_post_processing_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::AsciiDocPostProcessingFilter do +RSpec.describe Banzai::Filter::AsciiDocPostProcessingFilter do include FilterSpecHelper it "adds class for elements with data-math-style" do diff --git a/spec/lib/banzai/filter/asset_proxy_filter_spec.rb b/spec/lib/banzai/filter/asset_proxy_filter_spec.rb index ff2346fe1ba..2a4ee28130b 100644 --- a/spec/lib/banzai/filter/asset_proxy_filter_spec.rb +++ b/spec/lib/banzai/filter/asset_proxy_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::AssetProxyFilter do +RSpec.describe Banzai::Filter::AssetProxyFilter do include FilterSpecHelper def image(path) diff --git a/spec/lib/banzai/filter/audio_link_filter_spec.rb b/spec/lib/banzai/filter/audio_link_filter_spec.rb index a8459137169..4198a50e980 100644 --- a/spec/lib/banzai/filter/audio_link_filter_spec.rb +++ b/spec/lib/banzai/filter/audio_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::AudioLinkFilter do +RSpec.describe Banzai::Filter::AudioLinkFilter do def filter(doc, contexts = {}) contexts.reverse_merge!({ project: project diff --git a/spec/lib/banzai/filter/autolink_filter_spec.rb b/spec/lib/banzai/filter/autolink_filter_spec.rb index be6192f9ead..ba15860f3c9 100644 --- a/spec/lib/banzai/filter/autolink_filter_spec.rb +++ b/spec/lib/banzai/filter/autolink_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::AutolinkFilter do +RSpec.describe Banzai::Filter::AutolinkFilter do include FilterSpecHelper let(:link) { 'http://about.gitlab.com/' } diff --git a/spec/lib/banzai/filter/blockquote_fence_filter_spec.rb b/spec/lib/banzai/filter/blockquote_fence_filter_spec.rb index 8e955ec3b6b..e736943914b 100644 --- a/spec/lib/banzai/filter/blockquote_fence_filter_spec.rb +++ b/spec/lib/banzai/filter/blockquote_fence_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::BlockquoteFenceFilter do +RSpec.describe Banzai::Filter::BlockquoteFenceFilter do include FilterSpecHelper it 'converts blockquote fences to blockquote lines' do diff --git a/spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb b/spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb index 1a90abc12d9..a2d35eaa6b6 100644 --- a/spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb +++ b/spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::BroadcastMessagePlaceholdersFilter do +RSpec.describe Banzai::Filter::BroadcastMessagePlaceholdersFilter do include FilterSpecHelper subject { filter(text, current_user: user, broadcast_message_placeholders: true).to_html } diff --git a/spec/lib/banzai/filter/broadcast_message_sanitization_filter_spec.rb b/spec/lib/banzai/filter/broadcast_message_sanitization_filter_spec.rb index 317ac7ef854..1f65268bd3c 100644 --- a/spec/lib/banzai/filter/broadcast_message_sanitization_filter_spec.rb +++ b/spec/lib/banzai/filter/broadcast_message_sanitization_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::BroadcastMessageSanitizationFilter do +RSpec.describe Banzai::Filter::BroadcastMessageSanitizationFilter do include FilterSpecHelper it_behaves_like 'default whitelist' diff --git a/spec/lib/banzai/filter/color_filter_spec.rb b/spec/lib/banzai/filter/color_filter_spec.rb index f8931d37b99..dced3671323 100644 --- a/spec/lib/banzai/filter/color_filter_spec.rb +++ b/spec/lib/banzai/filter/color_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::ColorFilter, lib: true do +RSpec.describe Banzai::Filter::ColorFilter, lib: true do include FilterSpecHelper let(:color) { '#F00' } diff --git a/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb b/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb index 5cfb0e6e6f7..f04d3212437 100644 --- a/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::CommitRangeReferenceFilter do +RSpec.describe Banzai::Filter::CommitRangeReferenceFilter do include FilterSpecHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/lib/banzai/filter/commit_reference_filter_spec.rb b/spec/lib/banzai/filter/commit_reference_filter_spec.rb index 63ec597a0ba..925fd031d95 100644 --- a/spec/lib/banzai/filter/commit_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/commit_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::CommitReferenceFilter do +RSpec.describe Banzai::Filter::CommitReferenceFilter do include FilterSpecHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/lib/banzai/filter/commit_trailers_filter_spec.rb b/spec/lib/banzai/filter/commit_trailers_filter_spec.rb index 192d00805e0..03a6cc34962 100644 --- a/spec/lib/banzai/filter/commit_trailers_filter_spec.rb +++ b/spec/lib/banzai/filter/commit_trailers_filter_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'ffaker' -describe Banzai::Filter::CommitTrailersFilter do +RSpec.describe Banzai::Filter::CommitTrailersFilter do include FilterSpecHelper include CommitTrailersSpecHelper diff --git a/spec/lib/banzai/filter/design_reference_filter_spec.rb b/spec/lib/banzai/filter/design_reference_filter_spec.rb index 8a6c2e3b3f9..1b558754932 100644 --- a/spec/lib/banzai/filter/design_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/design_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::DesignReferenceFilter do +RSpec.describe Banzai::Filter::DesignReferenceFilter do include FilterSpecHelper include DesignManagementTestHelpers diff --git a/spec/lib/banzai/filter/emoji_filter_spec.rb b/spec/lib/banzai/filter/emoji_filter_spec.rb index 4e163668a28..d78763b6939 100644 --- a/spec/lib/banzai/filter/emoji_filter_spec.rb +++ b/spec/lib/banzai/filter/emoji_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::EmojiFilter do +RSpec.describe Banzai::Filter::EmojiFilter do include FilterSpecHelper it 'replaces supported name emoji' do diff --git a/spec/lib/banzai/filter/external_issue_reference_filter_spec.rb b/spec/lib/banzai/filter/external_issue_reference_filter_spec.rb index a70c820f97a..7d8fb183dbb 100644 --- a/spec/lib/banzai/filter/external_issue_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/external_issue_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::ExternalIssueReferenceFilter do +RSpec.describe Banzai::Filter::ExternalIssueReferenceFilter do include FilterSpecHelper shared_examples_for "external issue tracker" do diff --git a/spec/lib/banzai/filter/external_link_filter_spec.rb b/spec/lib/banzai/filter/external_link_filter_spec.rb index 4b2500b31f7..630730dfc1a 100644 --- a/spec/lib/banzai/filter/external_link_filter_spec.rb +++ b/spec/lib/banzai/filter/external_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -shared_examples 'an external link with rel attribute' do +RSpec.shared_examples 'an external link with rel attribute' do it 'adds rel="nofollow" to external links' do expect(doc.at_css('a')).to have_attribute('rel') expect(doc.at_css('a')['rel']).to include 'nofollow' @@ -19,7 +19,7 @@ shared_examples 'an external link with rel attribute' do end end -describe Banzai::Filter::ExternalLinkFilter do +RSpec.describe Banzai::Filter::ExternalLinkFilter do include FilterSpecHelper it 'ignores elements without an href attribute' do diff --git a/spec/lib/banzai/filter/footnote_filter_spec.rb b/spec/lib/banzai/filter/footnote_filter_spec.rb index c6dcb4e46fd..01b7319fab1 100644 --- a/spec/lib/banzai/filter/footnote_filter_spec.rb +++ b/spec/lib/banzai/filter/footnote_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::FootnoteFilter do +RSpec.describe Banzai::Filter::FootnoteFilter do include FilterSpecHelper # first[^1] and second[^second] diff --git a/spec/lib/banzai/filter/front_matter_filter_spec.rb b/spec/lib/banzai/filter/front_matter_filter_spec.rb index 1b5b1770615..3f966c94dd3 100644 --- a/spec/lib/banzai/filter/front_matter_filter_spec.rb +++ b/spec/lib/banzai/filter/front_matter_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::FrontMatterFilter do +RSpec.describe Banzai::Filter::FrontMatterFilter do include FilterSpecHelper it 'allows for `encoding:` before the front matter' do diff --git a/spec/lib/banzai/filter/gollum_tags_filter_spec.rb b/spec/lib/banzai/filter/gollum_tags_filter_spec.rb index 00d8b871224..2576dd1bf07 100644 --- a/spec/lib/banzai/filter/gollum_tags_filter_spec.rb +++ b/spec/lib/banzai/filter/gollum_tags_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::GollumTagsFilter do +RSpec.describe Banzai::Filter::GollumTagsFilter do include FilterSpecHelper let(:project) { create(:project) } diff --git a/spec/lib/banzai/filter/html_entity_filter_spec.rb b/spec/lib/banzai/filter/html_entity_filter_spec.rb index 6017380725d..d88fa21cde7 100644 --- a/spec/lib/banzai/filter/html_entity_filter_spec.rb +++ b/spec/lib/banzai/filter/html_entity_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::HtmlEntityFilter do +RSpec.describe Banzai::Filter::HtmlEntityFilter do include FilterSpecHelper let(:unescaped) { 'foo <strike attr="foo">&&&</strike>' } diff --git a/spec/lib/banzai/filter/image_lazy_load_filter_spec.rb b/spec/lib/banzai/filter/image_lazy_load_filter_spec.rb index 6475fd14ce4..9f5aa558f24 100644 --- a/spec/lib/banzai/filter/image_lazy_load_filter_spec.rb +++ b/spec/lib/banzai/filter/image_lazy_load_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::ImageLazyLoadFilter do +RSpec.describe Banzai::Filter::ImageLazyLoadFilter do include FilterSpecHelper def image(path) diff --git a/spec/lib/banzai/filter/image_link_filter_spec.rb b/spec/lib/banzai/filter/image_link_filter_spec.rb index 011e3a1e2da..5c04f6b2b3e 100644 --- a/spec/lib/banzai/filter/image_link_filter_spec.rb +++ b/spec/lib/banzai/filter/image_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::ImageLinkFilter do +RSpec.describe Banzai::Filter::ImageLinkFilter do include FilterSpecHelper def image(path) diff --git a/spec/lib/banzai/filter/inline_cluster_metrics_filter_spec.rb b/spec/lib/banzai/filter/inline_cluster_metrics_filter_spec.rb new file mode 100644 index 00000000000..fe048daa601 --- /dev/null +++ b/spec/lib/banzai/filter/inline_cluster_metrics_filter_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Banzai::Filter::InlineClusterMetricsFilter do + include FilterSpecHelper + + let!(:cluster) { create(:cluster) } + let!(:project) { create(:project) } + let(:params) { [project.namespace.path, project.path, cluster.id] } + let(:query_params) { { group: 'Food metrics', title: 'Pizza Consumption', y_label: 'Slice Count' } } + let(:trigger_url) { urls.namespace_project_cluster_url(*params, **query_params) } + let(:dashboard_url) do + urls.metrics_dashboard_namespace_project_cluster_url( + *params, + **{ + embedded: 'true', + cluster_type: 'project', + format: :json + }.merge(query_params) + ) + end + + it_behaves_like 'a metrics embed filter' +end diff --git a/spec/lib/banzai/filter/inline_diff_filter_spec.rb b/spec/lib/banzai/filter/inline_diff_filter_spec.rb index c09065fb746..1ef00139db2 100644 --- a/spec/lib/banzai/filter/inline_diff_filter_spec.rb +++ b/spec/lib/banzai/filter/inline_diff_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::InlineDiffFilter do +RSpec.describe Banzai::Filter::InlineDiffFilter do include FilterSpecHelper it 'adds inline diff span tags for deletions when using square brackets' do diff --git a/spec/lib/banzai/filter/inline_grafana_metrics_filter_spec.rb b/spec/lib/banzai/filter/inline_grafana_metrics_filter_spec.rb index 28bf5bd3e92..8bdb24ab08c 100644 --- a/spec/lib/banzai/filter/inline_grafana_metrics_filter_spec.rb +++ b/spec/lib/banzai/filter/inline_grafana_metrics_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::InlineGrafanaMetricsFilter do +RSpec.describe Banzai::Filter::InlineGrafanaMetricsFilter do include FilterSpecHelper let_it_be(:project) { create(:project) } diff --git a/spec/lib/banzai/filter/inline_metrics_filter_spec.rb b/spec/lib/banzai/filter/inline_metrics_filter_spec.rb index 1546a5e88ed..9b0b95b9da2 100644 --- a/spec/lib/banzai/filter/inline_metrics_filter_spec.rb +++ b/spec/lib/banzai/filter/inline_metrics_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::InlineMetricsFilter do +RSpec.describe Banzai::Filter::InlineMetricsFilter do include FilterSpecHelper let(:params) { ['foo', 'bar', 12] } diff --git a/spec/lib/banzai/filter/inline_metrics_redactor_filter_spec.rb b/spec/lib/banzai/filter/inline_metrics_redactor_filter_spec.rb index 9d8cd729958..cafcaef8ae2 100644 --- a/spec/lib/banzai/filter/inline_metrics_redactor_filter_spec.rb +++ b/spec/lib/banzai/filter/inline_metrics_redactor_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::InlineMetricsRedactorFilter do +RSpec.describe Banzai::Filter::InlineMetricsRedactorFilter do include FilterSpecHelper let_it_be(:project) { create(:project) } @@ -29,6 +29,26 @@ describe Banzai::Filter::InlineMetricsRedactorFilter do it_behaves_like 'retains the embed placeholder when applicable' end + context 'for a cluster metric embed' do + let_it_be(:cluster) { create(:cluster, :provided_by_gcp, :project, projects: [project]) } + let(:params) { [project.namespace.path, project.path, cluster.id] } + let(:query_params) { { group: 'Cluster Health', title: 'CPU Usage', y_label: 'CPU (cores)' } } + let(:url) { urls.metrics_dashboard_namespace_project_cluster_url(*params, **query_params) } + + context 'with user who can read cluster' do + it_behaves_like 'redacts the embed placeholder' + it_behaves_like 'retains the embed placeholder when applicable' + end + + context 'without user who can read cluster' do + let(:doc) { filter(input, current_user: create(:user)) } + + it 'redacts the embed placeholder' do + expect(doc.to_s).to be_empty + end + end + end + context 'the user has requisite permissions' do let(:user) { create(:user) } let(:doc) { filter(input, current_user: user) } diff --git a/spec/lib/banzai/filter/issuable_state_filter_spec.rb b/spec/lib/banzai/filter/issuable_state_filter_spec.rb index 5950b6878ef..a3851fd7cca 100644 --- a/spec/lib/banzai/filter/issuable_state_filter_spec.rb +++ b/spec/lib/banzai/filter/issuable_state_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::IssuableStateFilter do +RSpec.describe Banzai::Filter::IssuableStateFilter do include ActionView::Helpers::UrlHelper include FilterSpecHelper diff --git a/spec/lib/banzai/filter/issue_reference_filter_spec.rb b/spec/lib/banzai/filter/issue_reference_filter_spec.rb index 603da2b4421..98955d5cde9 100644 --- a/spec/lib/banzai/filter/issue_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/issue_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::IssueReferenceFilter do +RSpec.describe Banzai::Filter::IssueReferenceFilter do include FilterSpecHelper include DesignManagementTestHelpers diff --git a/spec/lib/banzai/filter/jira_import/adf_to_commonmark_filter_spec.rb b/spec/lib/banzai/filter/jira_import/adf_to_commonmark_filter_spec.rb new file mode 100644 index 00000000000..287b5774048 --- /dev/null +++ b/spec/lib/banzai/filter/jira_import/adf_to_commonmark_filter_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Banzai::Filter::JiraImport::AdfToCommonmarkFilter do + include FilterSpecHelper + + let_it_be(:fixtures_path) { 'lib/kramdown/atlassian_document_format' } + + it 'renders a complex document' do + source = fixture_file(File.join(fixtures_path, 'complex_document.json')) + target = fixture_file(File.join(fixtures_path, 'complex_document.md')) + + expect(filter(source)).to eq target + end + + it 'renders original source when it is invalid JSON' do + source = fixture_file(File.join(fixtures_path, 'invalid_json.json')) + + expect(filter(source)).to eq "Invalid Atlassian Document Format JSON\n\n#{source}" + end + + it 'renders original source when missing document node' do + source = fixture_file(File.join(fixtures_path, 'invalid_no_doc.json')) + + expect(filter(source)).to eq "Invalid Atlassian Document Format JSON\n\n#{source}" + end +end diff --git a/spec/lib/banzai/filter/label_reference_filter_spec.rb b/spec/lib/banzai/filter/label_reference_filter_spec.rb index 0b697ab2040..dadf98d9b76 100644 --- a/spec/lib/banzai/filter/label_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/label_reference_filter_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'html/pipeline' -describe Banzai::Filter::LabelReferenceFilter do +RSpec.describe Banzai::Filter::LabelReferenceFilter do include FilterSpecHelper let(:project) { create(:project, :public, name: 'sample-project') } diff --git a/spec/lib/banzai/filter/markdown_filter_spec.rb b/spec/lib/banzai/filter/markdown_filter_spec.rb index d0a43564903..8d01a651651 100644 --- a/spec/lib/banzai/filter/markdown_filter_spec.rb +++ b/spec/lib/banzai/filter/markdown_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::MarkdownFilter do +RSpec.describe Banzai::Filter::MarkdownFilter do include FilterSpecHelper describe 'markdown engine from context' do diff --git a/spec/lib/banzai/filter/math_filter_spec.rb b/spec/lib/banzai/filter/math_filter_spec.rb index c8fd92edcdf..9f6688f4f7d 100644 --- a/spec/lib/banzai/filter/math_filter_spec.rb +++ b/spec/lib/banzai/filter/math_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::MathFilter do +RSpec.describe Banzai::Filter::MathFilter do include FilterSpecHelper it 'leaves regular inline code unchanged' do diff --git a/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb b/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb index 12ee952b10e..f24fcf98b1f 100644 --- a/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::MergeRequestReferenceFilter do +RSpec.describe Banzai::Filter::MergeRequestReferenceFilter do include FilterSpecHelper let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/filter/mermaid_filter_spec.rb b/spec/lib/banzai/filter/mermaid_filter_spec.rb index ae6725cc14c..c9bfcffe98f 100644 --- a/spec/lib/banzai/filter/mermaid_filter_spec.rb +++ b/spec/lib/banzai/filter/mermaid_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::MermaidFilter do +RSpec.describe Banzai::Filter::MermaidFilter do include FilterSpecHelper it 'adds `js-render-mermaid` class to the `code` tag' do diff --git a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb index 0c8413adcba..62b1711ee57 100644 --- a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::MilestoneReferenceFilter do +RSpec.describe Banzai::Filter::MilestoneReferenceFilter do include FilterSpecHelper let(:parent_group) { create(:group, :public) } diff --git a/spec/lib/banzai/filter/output_safety_spec.rb b/spec/lib/banzai/filter/output_safety_spec.rb index 5ffe591c9a4..5b7b7298411 100644 --- a/spec/lib/banzai/filter/output_safety_spec.rb +++ b/spec/lib/banzai/filter/output_safety_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::OutputSafety do +RSpec.describe Banzai::Filter::OutputSafety do subject do Class.new do include Banzai::Filter::OutputSafety diff --git a/spec/lib/banzai/filter/plantuml_filter_spec.rb b/spec/lib/banzai/filter/plantuml_filter_spec.rb index abe525ac47a..5ad94c74514 100644 --- a/spec/lib/banzai/filter/plantuml_filter_spec.rb +++ b/spec/lib/banzai/filter/plantuml_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::PlantumlFilter do +RSpec.describe Banzai::Filter::PlantumlFilter do include FilterSpecHelper it 'replaces plantuml pre tag with img tag' do diff --git a/spec/lib/banzai/filter/project_reference_filter_spec.rb b/spec/lib/banzai/filter/project_reference_filter_spec.rb index a054b79ec03..ac7a90a5893 100644 --- a/spec/lib/banzai/filter/project_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/project_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::ProjectReferenceFilter do +RSpec.describe Banzai::Filter::ProjectReferenceFilter do include FilterSpecHelper def invalidate_reference(reference) diff --git a/spec/lib/banzai/filter/reference_filter_spec.rb b/spec/lib/banzai/filter/reference_filter_spec.rb index d889b0b832d..d5978db13c0 100644 --- a/spec/lib/banzai/filter/reference_filter_spec.rb +++ b/spec/lib/banzai/filter/reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::ReferenceFilter do +RSpec.describe Banzai::Filter::ReferenceFilter do let(:project) { build_stubbed(:project) } describe '#each_node' do @@ -44,4 +44,249 @@ describe Banzai::Filter::ReferenceFilter do expect(filter.nodes).to eq([document.children[0]]) end end + + RSpec.shared_context 'document nodes' do + let(:document) { Nokogiri::HTML.fragment('<p data-sourcepos="1:1-1:18"></p>') } + let(:nodes) { [] } + let(:filter) { described_class.new(document, project: project) } + let(:ref_pattern) { nil } + let(:href_link) { nil } + + before do + nodes.each do |node| + document.children.first.add_child(node) + end + end + end + + RSpec.shared_context 'new nodes' do + let(:nodes) { [{ value: "1" }, { value: "2" }, { value: "3" }] } + let(:expected_nodes) { [{ value: "1.1" }, { value: "1.2" }, { value: "1.3" }, { value: "2.1" }, { value: "2.2" }, { value: "2.3" }, { value: "3.1" }, { value: "3.2" }, { value: "3.3" }] } + let(:new_nodes) do + { + 0 => [{ value: "1.1" }, { value: "1.2" }, { value: "1.3" }], + 2 => [{ value: "3.1" }, { value: "3.2" }, { value: "3.3" }], + 1 => [{ value: "2.1" }, { value: "2.2" }, { value: "2.3" }] + } + end + end + + RSpec.shared_examples 'replaces text' do |method_name, index| + let(:args) { [filter.nodes[index], index, ref_pattern || href_link].compact } + + context 'when content didnt change' do + it 'does not replace link node with html' do + filter.send(method_name, *args) do + existing_content + end + + expect(filter).not_to receive(:replace_text_with_html) + end + end + + context 'when link node has changed' do + let(:html) { %(text <a href="reference_url" class="gfm gfm-user" title="reference">Reference</a>) } + + it 'replaces reference node' do + filter.send(method_name, *args) do + html + end + + expect(document.css('a').length).to eq 1 + end + + it 'calls replace_and_update_new_nodes' do + expect(filter).to receive(:replace_and_update_new_nodes).with(filter.nodes[index], index, html) + + filter.send(method_name, *args) do + html + end + end + + it 'stores filtered new nodes' do + filter.send(method_name, *args) do + html + end + + expect(filter.instance_variable_get(:@new_nodes)).to eq({ index => [filter.each_node.to_a[index]] }) + end + + context "with update_nodes_for_banzai_reference_filter feature flag disabled" do + before do + stub_feature_flags(update_nodes_for_banzai_reference_filter: false) + end + + it 'does not call replace_and_update_new_nodes' do + expect(filter).not_to receive(:replace_and_update_new_nodes).with(filter.nodes[index], index, html) + + filter.send(method_name, *args) do + html + end + end + end + end + end + + RSpec.shared_examples 'replaces document node' do |method_name| + context 'when parent has only one node' do + let(:nodes) { [node] } + + it_behaves_like 'replaces text', method_name, 0 + end + + context 'when parent has multiple nodes' do + let(:node1) { Nokogiri::HTML.fragment('<span>span text</span>') } + let(:node2) { Nokogiri::HTML.fragment('<span>text</span>') } + + context 'when pattern matches in the first node' do + let(:nodes) { [node, node1, node2] } + + it_behaves_like 'replaces text', method_name, 0 + end + + context 'when pattern matches in the middle node' do + let(:nodes) { [node1, node, node2] } + + it_behaves_like 'replaces text', method_name, 1 + end + + context 'when pattern matches in the last node' do + let(:nodes) { [node1, node2, node] } + + it_behaves_like 'replaces text', method_name, 2 + end + end + end + + describe '#replace_text_when_pattern_matches' do + include_context 'document nodes' + let(:node) { Nokogiri::HTML.fragment('text @reference') } + + let(:ref_pattern) { %r{(?<!\w)@(?<user>[a-zA-Z0-9_\-\.]*)}x } + + context 'when node has no reference pattern' do + let(:node) { Nokogiri::HTML.fragment('random text') } + let(:nodes) { [node] } + + it 'skips node' do + expect { |b| filter.replace_text_when_pattern_matches(filter.nodes[0], 0, ref_pattern, &b) }.not_to yield_control + end + end + + it_behaves_like 'replaces document node', :replace_text_when_pattern_matches do + let(:existing_content) { node.to_html } + end + end + + describe '#replace_link_node_with_text' do + include_context 'document nodes' + let(:node) { Nokogiri::HTML.fragment('<a>end text</a>') } + + it_behaves_like 'replaces document node', :replace_link_node_with_text do + let(:existing_content) { node.text } + end + end + + describe '#replace_link_node_with_href' do + include_context 'document nodes' + let(:node) { Nokogiri::HTML.fragment('<a href="link">end text</a>') } + let(:href_link) { CGI.unescape(node.attr('href').to_s) } + + it_behaves_like 'replaces document node', :replace_link_node_with_href do + let(:existing_content) { href_link } + end + end + + describe "#call_and_update_nodes" do + context "with update_nodes_for_banzai_reference_filter feature flag enabled" do + include_context 'new nodes' + let(:document) { Nokogiri::HTML.fragment('<a href="foo">foo</a>') } + let(:filter) { described_class.new(document, project: project) } + + before do + stub_feature_flags(update_nodes_for_banzai_reference_filter: true) + end + + it "updates all new nodes", :aggregate_failures do + filter.instance_variable_set('@nodes', nodes) + + expect(filter).to receive(:call) { filter.instance_variable_set('@new_nodes', new_nodes) } + expect(filter).to receive(:with_update_nodes).and_call_original + expect(filter).to receive(:update_nodes!).and_call_original + + filter.call_and_update_nodes + + expect(filter.result[:reference_filter_nodes]).to eq(expected_nodes) + end + end + + context "with update_nodes_for_banzai_reference_filter feature flag disabled" do + include_context 'new nodes' + + before do + stub_feature_flags(update_nodes_for_banzai_reference_filter: false) + end + + it "does not change nodes", :aggregate_failures do + document = Nokogiri::HTML.fragment('<a href="foo">foo</a>') + filter = described_class.new(document, project: project) + filter.instance_variable_set('@nodes', nodes) + + expect(filter).to receive(:call) { filter.instance_variable_set('@new_nodes', new_nodes) } + expect(filter).not_to receive(:with_update_nodes) + expect(filter).not_to receive(:update_nodes!) + + filter.call_and_update_nodes + + expect(filter.nodes).to eq(nodes) + expect(filter.result[:reference_filter_nodes]).to be nil + end + end + end + + describe ".call" do + include_context 'new nodes' + + let(:document) { Nokogiri::HTML.fragment('<a href="foo">foo</a>') } + + let(:result) { { reference_filter_nodes: nodes } } + + before do + stub_feature_flags(update_nodes_for_banzai_reference_filter: true) + end + + it "updates all nodes", :aggregate_failures do + expect_next_instance_of(described_class) do |filter| + expect(filter).to receive(:call_and_update_nodes).and_call_original + expect(filter).to receive(:with_update_nodes).and_call_original + expect(filter).to receive(:call) { filter.instance_variable_set('@new_nodes', new_nodes) } + expect(filter).to receive(:update_nodes!).and_call_original + end + + described_class.call(document, { project: project }, result) + + expect(result[:reference_filter_nodes]).to eq(expected_nodes) + end + + context "with update_nodes_for_banzai_reference_filter feature flag disabled" do + let(:result) { {} } + + before do + stub_feature_flags(update_nodes_for_banzai_reference_filter: false) + end + + it "updates all nodes", :aggregate_failures do + expect_next_instance_of(described_class) do |filter| + expect(filter).to receive(:call_and_update_nodes).and_call_original + expect(filter).not_to receive(:with_update_nodes) + expect(filter).to receive(:call) { filter.instance_variable_set('@new_nodes', new_nodes) } + expect(filter).not_to receive(:update_nodes!) + end + + described_class.call(document, { project: project }, result) + + expect(result[:reference_filter_nodes]).to be nil + end + end + end end diff --git a/spec/lib/banzai/filter/reference_redactor_filter_spec.rb b/spec/lib/banzai/filter/reference_redactor_filter_spec.rb index 956bc85e53f..ac1cabb34cc 100644 --- a/spec/lib/banzai/filter/reference_redactor_filter_spec.rb +++ b/spec/lib/banzai/filter/reference_redactor_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::ReferenceRedactorFilter do +RSpec.describe Banzai::Filter::ReferenceRedactorFilter do include ActionView::Helpers::UrlHelper include FilterSpecHelper diff --git a/spec/lib/banzai/filter/repository_link_filter_spec.rb b/spec/lib/banzai/filter/repository_link_filter_spec.rb index 81f93f885f7..815053aac2f 100644 --- a/spec/lib/banzai/filter/repository_link_filter_spec.rb +++ b/spec/lib/banzai/filter/repository_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::RepositoryLinkFilter do +RSpec.describe Banzai::Filter::RepositoryLinkFilter do include GitHelpers include RepoHelpers diff --git a/spec/lib/banzai/filter/sanitization_filter_spec.rb b/spec/lib/banzai/filter/sanitization_filter_spec.rb index 607dc3fda47..09dcd5518ff 100644 --- a/spec/lib/banzai/filter/sanitization_filter_spec.rb +++ b/spec/lib/banzai/filter/sanitization_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::SanitizationFilter do +RSpec.describe Banzai::Filter::SanitizationFilter do include FilterSpecHelper it_behaves_like 'default whitelist' diff --git a/spec/lib/banzai/filter/snippet_reference_filter_spec.rb b/spec/lib/banzai/filter/snippet_reference_filter_spec.rb index 62ce12406a2..f23fbc5be88 100644 --- a/spec/lib/banzai/filter/snippet_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/snippet_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::SnippetReferenceFilter do +RSpec.describe Banzai::Filter::SnippetReferenceFilter do include FilterSpecHelper let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/filter/spaced_link_filter_spec.rb b/spec/lib/banzai/filter/spaced_link_filter_spec.rb index 98c38813144..2c64657d69d 100644 --- a/spec/lib/banzai/filter/spaced_link_filter_spec.rb +++ b/spec/lib/banzai/filter/spaced_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::SpacedLinkFilter do +RSpec.describe Banzai::Filter::SpacedLinkFilter do include FilterSpecHelper let(:link) { '[example](page slug)' } diff --git a/spec/lib/banzai/filter/suggestion_filter_spec.rb b/spec/lib/banzai/filter/suggestion_filter_spec.rb index 9c4650b73de..7d6092e21e9 100644 --- a/spec/lib/banzai/filter/suggestion_filter_spec.rb +++ b/spec/lib/banzai/filter/suggestion_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::SuggestionFilter do +RSpec.describe Banzai::Filter::SuggestionFilter do include FilterSpecHelper let(:input) { %(<pre class="code highlight js-syntax-highlight suggestion"><code>foo\n</code></pre>) } diff --git a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb index 5a844fb61e3..a2875fad421 100644 --- a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb +++ b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::SyntaxHighlightFilter do +RSpec.describe Banzai::Filter::SyntaxHighlightFilter do include FilterSpecHelper shared_examples "XSS prevention" do |lang| diff --git a/spec/lib/banzai/filter/table_of_contents_filter_spec.rb b/spec/lib/banzai/filter/table_of_contents_filter_spec.rb index 05ef77c811a..2d17855707f 100644 --- a/spec/lib/banzai/filter/table_of_contents_filter_spec.rb +++ b/spec/lib/banzai/filter/table_of_contents_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::TableOfContentsFilter do +RSpec.describe Banzai::Filter::TableOfContentsFilter do include FilterSpecHelper def header(level, text) diff --git a/spec/lib/banzai/filter/table_of_contents_tag_filter_spec.rb b/spec/lib/banzai/filter/table_of_contents_tag_filter_spec.rb index 20f32d7347d..56f36af5066 100644 --- a/spec/lib/banzai/filter/table_of_contents_tag_filter_spec.rb +++ b/spec/lib/banzai/filter/table_of_contents_tag_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::TableOfContentsTagFilter do +RSpec.describe Banzai::Filter::TableOfContentsTagFilter do include FilterSpecHelper context 'table of contents' do diff --git a/spec/lib/banzai/filter/upload_link_filter_spec.rb b/spec/lib/banzai/filter/upload_link_filter_spec.rb index 8844ad78306..0f8c773c68d 100644 --- a/spec/lib/banzai/filter/upload_link_filter_spec.rb +++ b/spec/lib/banzai/filter/upload_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::UploadLinkFilter do +RSpec.describe Banzai::Filter::UploadLinkFilter do def filter(doc, contexts = {}) contexts.reverse_merge!( project: project, diff --git a/spec/lib/banzai/filter/user_reference_filter_spec.rb b/spec/lib/banzai/filter/user_reference_filter_spec.rb index cd6b68343b5..d8de3e5cc11 100644 --- a/spec/lib/banzai/filter/user_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/user_reference_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::UserReferenceFilter do +RSpec.describe Banzai::Filter::UserReferenceFilter do include FilterSpecHelper def get_reference(user) diff --git a/spec/lib/banzai/filter/video_link_filter_spec.rb b/spec/lib/banzai/filter/video_link_filter_spec.rb index c324c36fe4d..32fbc6b687f 100644 --- a/spec/lib/banzai/filter/video_link_filter_spec.rb +++ b/spec/lib/banzai/filter/video_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::VideoLinkFilter do +RSpec.describe Banzai::Filter::VideoLinkFilter do def filter(doc, contexts = {}) contexts.reverse_merge!({ project: project diff --git a/spec/lib/banzai/filter/wiki_link_filter_spec.rb b/spec/lib/banzai/filter/wiki_link_filter_spec.rb index 827f38ef717..7a4464a2604 100644 --- a/spec/lib/banzai/filter/wiki_link_filter_spec.rb +++ b/spec/lib/banzai/filter/wiki_link_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Filter::WikiLinkFilter do +RSpec.describe Banzai::Filter::WikiLinkFilter do include FilterSpecHelper let(:namespace) { build_stubbed(:namespace, name: "wiki_link_ns") } diff --git a/spec/lib/banzai/filter_array_spec.rb b/spec/lib/banzai/filter_array_spec.rb index bed41a80d29..47bc5633300 100644 --- a/spec/lib/banzai/filter_array_spec.rb +++ b/spec/lib/banzai/filter_array_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::FilterArray do +RSpec.describe Banzai::FilterArray do describe '#insert_after' do it 'inserts an element after a provided element' do filters = described_class.new(%w(a b c)) diff --git a/spec/lib/banzai/issuable_extractor_spec.rb b/spec/lib/banzai/issuable_extractor_spec.rb index 7fa6048c1c6..c4ee7160e12 100644 --- a/spec/lib/banzai/issuable_extractor_spec.rb +++ b/spec/lib/banzai/issuable_extractor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::IssuableExtractor do +RSpec.describe Banzai::IssuableExtractor do let(:project) { create(:project) } let(:user) { create(:user) } let(:extractor) { described_class.new(Banzai::RenderContext.new(project, user)) } diff --git a/spec/lib/banzai/object_renderer_spec.rb b/spec/lib/banzai/object_renderer_spec.rb index aef11775e60..f8d7acd3148 100644 --- a/spec/lib/banzai/object_renderer_spec.rb +++ b/spec/lib/banzai/object_renderer_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ObjectRenderer do +RSpec.describe Banzai::ObjectRenderer do let(:project) { create(:project, :repository) } let(:user) { project.owner } let(:renderer) do diff --git a/spec/lib/banzai/pipeline/broadcast_message_pipeline_spec.rb b/spec/lib/banzai/pipeline/broadcast_message_pipeline_spec.rb index 9832b132b58..41a91c56f3b 100644 --- a/spec/lib/banzai/pipeline/broadcast_message_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/broadcast_message_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline::BroadcastMessagePipeline do +RSpec.describe Banzai::Pipeline::BroadcastMessagePipeline do before do stub_commonmark_sourcepos_disabled end diff --git a/spec/lib/banzai/pipeline/description_pipeline_spec.rb b/spec/lib/banzai/pipeline/description_pipeline_spec.rb index 6778a273bba..82d4f883e0d 100644 --- a/spec/lib/banzai/pipeline/description_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/description_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline::DescriptionPipeline do +RSpec.describe Banzai::Pipeline::DescriptionPipeline do let_it_be(:project) { create(:project) } def parse(html) diff --git a/spec/lib/banzai/pipeline/email_pipeline_spec.rb b/spec/lib/banzai/pipeline/email_pipeline_spec.rb index 77186861225..c7a0b9fefa1 100644 --- a/spec/lib/banzai/pipeline/email_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/email_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline::EmailPipeline do +RSpec.describe Banzai::Pipeline::EmailPipeline do describe '.filters' do it 'returns the expected type' do expect(described_class.filters).to be_kind_of(Banzai::FilterArray) diff --git a/spec/lib/banzai/pipeline/emoji_pipeline_spec.rb b/spec/lib/banzai/pipeline/emoji_pipeline_spec.rb index 744df3e0b96..6de9d65f1b2 100644 --- a/spec/lib/banzai/pipeline/emoji_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/emoji_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline::EmojiPipeline do +RSpec.describe Banzai::Pipeline::EmojiPipeline do def parse(text) described_class.to_html(text, {}) end diff --git a/spec/lib/banzai/pipeline/full_pipeline_spec.rb b/spec/lib/banzai/pipeline/full_pipeline_spec.rb index b4047e369fb..0127ac11c81 100644 --- a/spec/lib/banzai/pipeline/full_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/full_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline::FullPipeline do +RSpec.describe Banzai::Pipeline::FullPipeline do describe 'References' do let(:project) { create(:project, :public) } let(:issue) { create(:issue, project: project) } diff --git a/spec/lib/banzai/pipeline/gfm_pipeline_spec.rb b/spec/lib/banzai/pipeline/gfm_pipeline_spec.rb index 448422b15e3..beb760637b0 100644 --- a/spec/lib/banzai/pipeline/gfm_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/gfm_pipeline_spec.rb @@ -2,12 +2,63 @@ require 'spec_helper' -describe Banzai::Pipeline::GfmPipeline do +RSpec.describe Banzai::Pipeline::GfmPipeline do describe 'integration between parsing regular and external issue references' do let(:project) { create(:redmine_project, :public) } context 'when internal issue tracker is enabled' do context 'when shorthand pattern #ISSUE_ID is used' do + it 'links an internal issues and keep updated nodes in result[:reference_filter_nodes]', :aggregate_failures do + issue = create(:issue, project: project) + markdown = "text #{issue.to_reference(project, full: true)}" + + result = described_class.call(markdown, project: project) + link = result[:output].css('a').first + text = result[:output].children.first + + expect(link['href']).to eq(Gitlab::Routing.url_helpers.project_issue_path(project, issue)) + expect(result[:reference_filter_nodes]).to eq([text]) + end + end + + it 'executes :each_node only once for first reference filter', :aggregate_failures do + issue = create(:issue, project: project) + markdown = "text #{issue.to_reference(project, full: true)}" + + expect_any_instance_of(Banzai::Filter::ReferenceFilter).to receive(:each_node).once + + described_class.call(markdown, project: project) + end + + context "with update_nodes_for_banzai_reference_filter feature flag disabled" do + before do + stub_feature_flags(update_nodes_for_banzai_reference_filter: false) + end + + context 'when shorthand pattern #ISSUE_ID is used' do + it 'links an internal issues and doesnt store nodes in result[:reference_filter_nodes]', :aggregate_failures do + issue = create(:issue, project: project) + markdown = "text #{issue.to_reference(project, full: true)}" + result = described_class.call(markdown, project: project) + link = result[:output].css('a').first + + expect(link['href']).to eq(Gitlab::Routing.url_helpers.project_issue_path(project, issue)) + expect(result[:reference_filter_nodes]).to eq nil + end + end + + it 'execute :each_node for each reference_filter', :aggregate_failures do + issue = create(:issue, project: project) + markdown = "text #{issue.to_reference(project, full: true)}" + described_class.reference_filters do |reference_filter| + expect_any_instance_of(reference_filter).to receive(:each_node).once + end + + described_class.call(markdown, project: project) + end + end + + context 'when shorthand pattern #ISSUE_ID is used' do it 'links an internal issue if it exists' do issue = create(:issue, project: project) markdown = issue.to_reference(project, full: true) diff --git a/spec/lib/banzai/pipeline/jira_import/adf_commonmark_pipeline_spec.rb b/spec/lib/banzai/pipeline/jira_import/adf_commonmark_pipeline_spec.rb new file mode 100644 index 00000000000..d8841a9753e --- /dev/null +++ b/spec/lib/banzai/pipeline/jira_import/adf_commonmark_pipeline_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Banzai::Pipeline::JiraImport::AdfCommonmarkPipeline do + let_it_be(:fixtures_path) { 'lib/kramdown/atlassian_document_format' } + + it 'converts text in Atlassian Document Format ' do + source = fixture_file(File.join(fixtures_path, 'paragraph.json')) + target = fixture_file(File.join(fixtures_path, 'paragraph.md')) + output = described_class.call(source, {})[:output] + + expect(output).to eq target + end +end diff --git a/spec/lib/banzai/pipeline/post_process_pipeline_spec.rb b/spec/lib/banzai/pipeline/post_process_pipeline_spec.rb index ab72354edcf..d9f45769550 100644 --- a/spec/lib/banzai/pipeline/post_process_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/post_process_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline::PostProcessPipeline do +RSpec.describe Banzai::Pipeline::PostProcessPipeline do context 'when a document only has upload links' do it 'does not make any Gitaly calls', :request_store do markdown = <<-MARKDOWN.strip_heredoc diff --git a/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb b/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb index b2c24284eb9..4af782c7d73 100644 --- a/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline::WikiPipeline do +RSpec.describe Banzai::Pipeline::WikiPipeline do let_it_be(:namespace) { create(:namespace, name: "wiki_link_ns") } let_it_be(:project) { create(:project, :public, name: "wiki_link_project", namespace: namespace) } let_it_be(:wiki) { ProjectWiki.new(project, double(:user)) } diff --git a/spec/lib/banzai/pipeline_spec.rb b/spec/lib/banzai/pipeline_spec.rb index eeff7287ff5..7d4df2ca5ce 100644 --- a/spec/lib/banzai/pipeline_spec.rb +++ b/spec/lib/banzai/pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Pipeline do +RSpec.describe Banzai::Pipeline do describe '.[]' do subject { described_class[name] } diff --git a/spec/lib/banzai/querying_spec.rb b/spec/lib/banzai/querying_spec.rb index b7a235b0558..b76f6ec533c 100644 --- a/spec/lib/banzai/querying_spec.rb +++ b/spec/lib/banzai/querying_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Querying do +RSpec.describe Banzai::Querying do describe '.css' do it 'optimizes queries for elements with classes' do document = double(:document) diff --git a/spec/lib/banzai/reference_parser/base_parser_spec.rb b/spec/lib/banzai/reference_parser/base_parser_spec.rb index b1002c1db25..0eea51262ba 100644 --- a/spec/lib/banzai/reference_parser/base_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/base_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::BaseParser do +RSpec.describe Banzai::ReferenceParser::BaseParser do include ReferenceParserHelpers let(:user) { create(:user) } diff --git a/spec/lib/banzai/reference_parser/commit_parser_spec.rb b/spec/lib/banzai/reference_parser/commit_parser_spec.rb index 7f7c750fe74..612ce6b93f1 100644 --- a/spec/lib/banzai/reference_parser/commit_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/commit_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::CommitParser do +RSpec.describe Banzai::ReferenceParser::CommitParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb b/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb index 78b337466aa..2f64aef4fb7 100644 --- a/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::CommitRangeParser do +RSpec.describe Banzai::ReferenceParser::CommitRangeParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/design_parser_spec.rb b/spec/lib/banzai/reference_parser/design_parser_spec.rb index 76708acf887..92d3a4aaad2 100644 --- a/spec/lib/banzai/reference_parser/design_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/design_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::DesignParser do +RSpec.describe Banzai::ReferenceParser::DesignParser do include ReferenceParserHelpers include DesignManagementTestHelpers diff --git a/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb b/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb index 9343d52e44b..5f92eb42e74 100644 --- a/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::ExternalIssueParser do +RSpec.describe Banzai::ReferenceParser::ExternalIssueParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/issue_parser_spec.rb b/spec/lib/banzai/reference_parser/issue_parser_spec.rb index ac321aca5e9..76f13e7b3aa 100644 --- a/spec/lib/banzai/reference_parser/issue_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/issue_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::IssueParser do +RSpec.describe Banzai::ReferenceParser::IssueParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/label_parser_spec.rb b/spec/lib/banzai/reference_parser/label_parser_spec.rb index 8b66a891e69..8f287e15b37 100644 --- a/spec/lib/banzai/reference_parser/label_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/label_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::LabelParser do +RSpec.describe Banzai::ReferenceParser::LabelParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/mentioned_group_parser_spec.rb b/spec/lib/banzai/reference_parser/mentioned_group_parser_spec.rb index 8346ba93f88..4610da7cbe6 100644 --- a/spec/lib/banzai/reference_parser/mentioned_group_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/mentioned_group_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::MentionedGroupParser do +RSpec.describe Banzai::ReferenceParser::MentionedGroupParser do include ReferenceParserHelpers let(:group) { create(:group, :private) } diff --git a/spec/lib/banzai/reference_parser/mentioned_project_parser_spec.rb b/spec/lib/banzai/reference_parser/mentioned_project_parser_spec.rb index b99c02351d0..7eb58ee40d3 100644 --- a/spec/lib/banzai/reference_parser/mentioned_project_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/mentioned_project_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::MentionedProjectParser do +RSpec.describe Banzai::ReferenceParser::MentionedProjectParser do include ReferenceParserHelpers let(:group) { create(:group, :private) } diff --git a/spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb b/spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb index b10e5d19828..4be07866db1 100644 --- a/spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::MentionedUserParser do +RSpec.describe Banzai::ReferenceParser::MentionedUserParser do include ReferenceParserHelpers let(:group) { create(:group, :private) } diff --git a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb index cb65893aea0..32a9f09c3f6 100644 --- a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::MergeRequestParser do +RSpec.describe Banzai::ReferenceParser::MergeRequestParser do include ReferenceParserHelpers let(:user) { create(:user) } diff --git a/spec/lib/banzai/reference_parser/milestone_parser_spec.rb b/spec/lib/banzai/reference_parser/milestone_parser_spec.rb index 25ba41dd8a0..95f71154e38 100644 --- a/spec/lib/banzai/reference_parser/milestone_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/milestone_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::MilestoneParser do +RSpec.describe Banzai::ReferenceParser::MilestoneParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/project_parser_spec.rb b/spec/lib/banzai/reference_parser/project_parser_spec.rb index e87fa3e8767..6358a04f12a 100644 --- a/spec/lib/banzai/reference_parser/project_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/project_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::ProjectParser do +RSpec.describe Banzai::ReferenceParser::ProjectParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/snippet_parser_spec.rb b/spec/lib/banzai/reference_parser/snippet_parser_spec.rb index 6581ed0d7c3..cdc660b4f4a 100644 --- a/spec/lib/banzai/reference_parser/snippet_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/snippet_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::SnippetParser do +RSpec.describe Banzai::ReferenceParser::SnippetParser do include ReferenceParserHelpers let(:project) { create(:project, :public) } diff --git a/spec/lib/banzai/reference_parser/user_parser_spec.rb b/spec/lib/banzai/reference_parser/user_parser_spec.rb index 71d2e1de3b6..d4f4339cf17 100644 --- a/spec/lib/banzai/reference_parser/user_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/user_parser_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceParser::UserParser do +RSpec.describe Banzai::ReferenceParser::UserParser do include ReferenceParserHelpers let(:group) { create(:group) } diff --git a/spec/lib/banzai/reference_redactor_spec.rb b/spec/lib/banzai/reference_redactor_spec.rb index 0dec6395fb3..de774267b81 100644 --- a/spec/lib/banzai/reference_redactor_spec.rb +++ b/spec/lib/banzai/reference_redactor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::ReferenceRedactor do +RSpec.describe Banzai::ReferenceRedactor do let(:user) { create(:user) } let(:project) { build(:project) } let(:redactor) { described_class.new(Banzai::RenderContext.new(project, user)) } diff --git a/spec/lib/banzai/render_context_spec.rb b/spec/lib/banzai/render_context_spec.rb index ad17db11613..c4b609b936e 100644 --- a/spec/lib/banzai/render_context_spec.rb +++ b/spec/lib/banzai/render_context_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::RenderContext do +RSpec.describe Banzai::RenderContext do let(:document) { Nokogiri::HTML.fragment('<p>hello</p>') } describe '#project_for_node' do diff --git a/spec/lib/banzai/renderer_spec.rb b/spec/lib/banzai/renderer_spec.rb index b540a76face..52bf3087875 100644 --- a/spec/lib/banzai/renderer_spec.rb +++ b/spec/lib/banzai/renderer_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Banzai::Renderer do +RSpec.describe Banzai::Renderer do let(:renderer) { described_class } def fake_object(fresh:) |