diff options
Diffstat (limited to 'spec/support/helpers/reference_parser_helpers.rb')
-rw-r--r-- | spec/support/helpers/reference_parser_helpers.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/spec/support/helpers/reference_parser_helpers.rb b/spec/support/helpers/reference_parser_helpers.rb new file mode 100644 index 00000000000..c01897ed1a1 --- /dev/null +++ b/spec/support/helpers/reference_parser_helpers.rb @@ -0,0 +1,39 @@ +module ReferenceParserHelpers + def empty_html_link + Nokogiri::HTML.fragment('<a></a>').children[0] + end + + shared_examples 'no N+1 queries' do + it 'avoids N+1 queries in #nodes_visible_to_user', :request_store do + context = Banzai::RenderContext.new(project, user) + + record_queries = lambda do |links| + ActiveRecord::QueryRecorder.new do + described_class.new(context).nodes_visible_to_user(user, links) + end + end + + control = record_queries.call(control_links) + actual = record_queries.call(actual_links) + + expect(actual.count).to be <= control.count + expect(actual.cached_count).to be <= control.cached_count + end + + it 'avoids N+1 queries in #records_for_nodes', :request_store do + context = Banzai::RenderContext.new(project, user) + + record_queries = lambda do |links| + ActiveRecord::QueryRecorder.new do + described_class.new(context).records_for_nodes(links) + end + end + + control = record_queries.call(control_links) + actual = record_queries.call(actual_links) + + expect(actual.count).to be <= control.count + expect(actual.cached_count).to be <= control.cached_count + end + end +end |