summaryrefslogtreecommitdiff
path: root/spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb')
-rw-r--r--spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb b/spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb
index 32a706925ba..7ab3b24b1c2 100644
--- a/spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb
@@ -219,4 +219,31 @@ RSpec.describe Banzai::Filter::References::SnippetReferenceFilter do
expect(reference_filter(act, project: nil, group: create(:group)).to_html).to eq exp
end
end
+
+ context 'checking N+1' do
+ let(:namespace2) { create(:namespace) }
+ let(:project2) { create(:project, :public, namespace: namespace2) }
+ let(:snippet2) { create(:project_snippet, project: project2) }
+ let(:reference2) { "#{project2.full_path}$#{snippet2.id}" }
+
+ it 'does not have N+1 per multiple references per project', :use_sql_query_cache do
+ markdown = "#{reference} $9999990"
+
+ control_count = ActiveRecord::QueryRecorder.new(skip_cached: false) do
+ reference_filter(markdown)
+ end.count
+
+ markdown = "#{reference} $9999990 $9999991 $9999992 $9999993 #{reference2} something/cool$12"
+
+ # Since we're not batching snippet queries across projects,
+ # we have to account for that.
+ # 1 for both projects, 1 for snippets in each project == 3
+ # TODO: https://gitlab.com/gitlab-org/gitlab/-/issues/330359
+ max_count = control_count + 1
+
+ expect do
+ reference_filter(markdown)
+ end.not_to exceed_all_query_limit(max_count)
+ end
+ end
end