summaryrefslogtreecommitdiff
path: root/spec/models/preloaders/merge_request_diff_preloader_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/preloaders/merge_request_diff_preloader_spec.rb')
-rw-r--r--spec/models/preloaders/merge_request_diff_preloader_spec.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/spec/models/preloaders/merge_request_diff_preloader_spec.rb b/spec/models/preloaders/merge_request_diff_preloader_spec.rb
new file mode 100644
index 00000000000..9a76d42e73f
--- /dev/null
+++ b/spec/models/preloaders/merge_request_diff_preloader_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Preloaders::MergeRequestDiffPreloader do
+ let_it_be(:merge_request_1) { create(:merge_request) }
+ let_it_be(:merge_request_2) { create(:merge_request) }
+ let_it_be(:merge_request_3) { create(:merge_request_without_merge_request_diff) }
+
+ let(:merge_requests) { [merge_request_1, merge_request_2, merge_request_3] }
+
+ def trigger(merge_requests)
+ Array(merge_requests).each(&:merge_request_diff)
+ end
+
+ def merge_requests_with_preloaded_diff
+ described_class.new(MergeRequest.where(id: merge_requests.map(&:id)).to_a).preload_all
+ end
+
+ it 'does not trigger N+1 queries' do
+ # warmup
+ trigger(merge_requests_with_preloaded_diff)
+
+ first_merge_request = merge_requests_with_preloaded_diff.first
+ clean_merge_requests = merge_requests_with_preloaded_diff
+
+ expect { trigger(clean_merge_requests) }.to issue_same_number_of_queries_as { trigger(first_merge_request) }
+ end
+end