Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-11-18 16:16:36 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-11-18 16:16:36 +0300
commit311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch)
tree07e7870bca8aed6d61fdcc810731c50d2c40af47 /spec/graphql/resolvers/concerns/resolves_groups_spec.rb
parent27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff)
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'spec/graphql/resolvers/concerns/resolves_groups_spec.rb')
-rw-r--r--spec/graphql/resolvers/concerns/resolves_groups_spec.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/spec/graphql/resolvers/concerns/resolves_groups_spec.rb b/spec/graphql/resolvers/concerns/resolves_groups_spec.rb
new file mode 100644
index 00000000000..bfbbae29e92
--- /dev/null
+++ b/spec/graphql/resolvers/concerns/resolves_groups_spec.rb
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe ResolvesGroups do
+ include GraphqlHelpers
+ include AfterNextHelpers
+
+ let_it_be(:user) { create(:user) }
+ let_it_be(:groups) { create_pair(:group) }
+
+ let_it_be(:resolver) do
+ Class.new(Resolvers::BaseResolver) do
+ include ResolvesGroups
+ type Types::GroupType, null: true
+ end
+ end
+
+ let_it_be(:query_type) do
+ query_factory do |query|
+ query.field :groups,
+ Types::GroupType.connection_type,
+ null: true,
+ resolver: resolver
+ end
+ end
+
+ let_it_be(:lookahead_fields) do
+ <<~FIELDS
+ contacts { nodes { id } }
+ containerRepositoriesCount
+ customEmoji { nodes { id } }
+ fullPath
+ organizations { nodes { id } }
+ path
+ dependencyProxyBlobCount
+ dependencyProxyBlobs { nodes { fileName } }
+ dependencyProxyImageCount
+ dependencyProxyImageTtlPolicy { enabled }
+ dependencyProxySetting { enabled }
+ FIELDS
+ end
+
+ it 'avoids N+1 queries on the fields marked with lookahead' do
+ group_ids = groups.map(&:id)
+
+ allow_next(resolver).to receive(:resolve_groups).and_return(Group.id_in(group_ids))
+ # Prevent authorization queries from affecting the test.
+ allow(Ability).to receive(:allowed?).and_return(true)
+
+ single_group_query = ActiveRecord::QueryRecorder.new do
+ data = query_groups(limit: 1)
+ expect(data.size).to eq(1)
+ end
+
+ multi_group_query = -> {
+ data = query_groups(limit: 2)
+ expect(data.size).to eq(2)
+ }
+
+ expect { multi_group_query.call }.not_to exceed_query_limit(single_group_query)
+ end
+
+ def query_groups(limit:)
+ query_string = "{ groups(first: #{limit}) { nodes { id #{lookahead_fields} } } }"
+
+ data = execute_query(query_type, graphql: query_string)
+
+ graphql_dig_at(data, :data, :groups, :nodes)
+ end
+end