summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/serializers/environment_serializer_shared_examples.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/shared_examples/serializers/environment_serializer_shared_examples.rb')
-rw-r--r--spec/support/shared_examples/serializers/environment_serializer_shared_examples.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/spec/support/shared_examples/serializers/environment_serializer_shared_examples.rb b/spec/support/shared_examples/serializers/environment_serializer_shared_examples.rb
new file mode 100644
index 00000000000..00146335ef7
--- /dev/null
+++ b/spec/support/shared_examples/serializers/environment_serializer_shared_examples.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+RSpec.shared_examples 'avoid N+1 on environments serialization' do
+ it 'avoids N+1 database queries with grouping', :request_store do
+ create_environment_with_associations(project)
+
+ control = ActiveRecord::QueryRecorder.new { serialize(grouping: true) }
+
+ create_environment_with_associations(project)
+
+ expect { serialize(grouping: true) }.not_to exceed_query_limit(control.count)
+ end
+
+ it 'avoids N+1 database queries without grouping', :request_store do
+ create_environment_with_associations(project)
+
+ control = ActiveRecord::QueryRecorder.new { serialize(grouping: false) }
+
+ create_environment_with_associations(project)
+
+ expect { serialize(grouping: false) }.not_to exceed_query_limit(control.count)
+ end
+
+ def serialize(grouping:)
+ EnvironmentSerializer.new(current_user: user, project: project).yield_self do |serializer|
+ serializer.within_folders if grouping
+ serializer.represent(Environment.where(project: project))
+ end
+ end
+end