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:
Diffstat (limited to 'spec/graphql/resolvers')
-rw-r--r--spec/graphql/resolvers/ci/catalog/resources/versions_resolver_spec.rb20
-rw-r--r--spec/graphql/resolvers/ci/group_runners_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/ci/project_runners_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/ci/runners_resolver_spec.rb10
-rw-r--r--spec/graphql/resolvers/concerns/resolves_groups_spec.rb11
-rw-r--r--spec/graphql/resolvers/container_repository_tags_resolver_spec.rb14
-rw-r--r--spec/graphql/resolvers/design_management/versions_resolver_spec.rb6
-rw-r--r--spec/graphql/resolvers/group_labels_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/labels_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/ml/find_models_resolver_spec.rb47
-rw-r--r--spec/graphql/resolvers/users_resolver_spec.rb36
11 files changed, 128 insertions, 24 deletions
diff --git a/spec/graphql/resolvers/ci/catalog/resources/versions_resolver_spec.rb b/spec/graphql/resolvers/ci/catalog/resources/versions_resolver_spec.rb
index 1ce0e91765f..4205259e5b9 100644
--- a/spec/graphql/resolvers/ci/catalog/resources/versions_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/catalog/resources/versions_resolver_spec.rb
@@ -7,8 +7,9 @@ RSpec.describe Resolvers::Ci::Catalog::Resources::VersionsResolver, feature_cate
include_context 'when there are catalog resources with versions'
+ let(:name) { nil }
let(:sort) { nil }
- let(:args) { { sort: sort }.compact }
+ let(:args) { { name: name, sort: sort }.compact }
let(:ctx) { { current_user: current_user } }
subject(:result) { resolve(described_class, ctx: ctx, obj: resource1, args: args) }
@@ -19,6 +20,23 @@ RSpec.describe Resolvers::Ci::Catalog::Resources::VersionsResolver, feature_cate
resource1.project.add_guest(current_user)
end
+ context 'when name argument is provided' do
+ let(:name) { 'v1.0' }
+
+ it 'returns the version that matches the name' do
+ expect(result.items.size).to eq(1)
+ expect(result.items.first.name).to eq('v1.0')
+ end
+
+ context 'when no version matches the name' do
+ let(:name) { 'does_not_exist' }
+
+ it 'returns empty response' do
+ expect(result).to be_empty
+ end
+ end
+ end
+
context 'when sort argument is not provided' do
it 'returns versions ordered by released_at descending' do
expect(result.items).to eq([v1_1, v1_0])
diff --git a/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb b/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb
index d1eec0baeea..d1726c8da6c 100644
--- a/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb
@@ -87,7 +87,7 @@ RSpec.describe Resolvers::Ci::GroupRunnersResolver, feature_category: :fleet_vis
status_status: 'active',
type_type: :group_type,
tag_name: ['active_runner'],
- preload: false,
+ preload: {},
search: 'abc',
sort: 'contacted_asc',
membership: :descendants,
diff --git a/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb b/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb
index 85b55521174..59ba7d4200c 100644
--- a/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb
@@ -74,7 +74,7 @@ RSpec.describe Resolvers::Ci::ProjectRunnersResolver, feature_category: :fleet_v
status_status: 'active',
type_type: :group_type,
tag_name: ['active_runner'],
- preload: false,
+ preload: {},
search: 'abc',
sort: 'contacted_asc',
project: project
diff --git a/spec/graphql/resolvers/ci/runners_resolver_spec.rb b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
index 85a90924384..a0239a6ff34 100644
--- a/spec/graphql/resolvers/ci/runners_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
@@ -98,7 +98,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver, feature_category: :fleet_visibili
upgrade_status: 'recommended',
type_type: :instance_type,
tag_name: ['active_runner'],
- preload: false,
+ preload: {},
search: 'abc',
sort: 'contacted_asc',
creator_id: '1',
@@ -125,7 +125,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver, feature_category: :fleet_visibili
let(:expected_params) do
{
active: false,
- preload: false
+ preload: {}
}
end
@@ -145,7 +145,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver, feature_category: :fleet_visibili
let(:expected_params) do
{
active: false,
- preload: false
+ preload: {}
}
end
@@ -163,7 +163,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver, feature_category: :fleet_visibili
end
let(:expected_params) do
- { preload: false }
+ { preload: {} }
end
it 'calls RunnersFinder with expected arguments' do
@@ -181,7 +181,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver, feature_category: :fleet_visibili
let(:expected_params) do
{
- preload: false,
+ preload: {},
version_prefix: 'a.b'
}
end
diff --git a/spec/graphql/resolvers/concerns/resolves_groups_spec.rb b/spec/graphql/resolvers/concerns/resolves_groups_spec.rb
index 79f3708da22..72e86d54dea 100644
--- a/spec/graphql/resolvers/concerns/resolves_groups_spec.rb
+++ b/spec/graphql/resolvers/concerns/resolves_groups_spec.rb
@@ -22,26 +22,27 @@ RSpec.describe ResolvesGroups do
end
end
- let_it_be(:lookahead_fields) do
+ let_it_be(:preloaded_fields) do
<<~FIELDS
containerRepositoriesCount
customEmoji { nodes { id } }
fullPath
+ groupMembersCount
path
dependencyProxyBlobCount
dependencyProxyBlobs { nodes { fileName } }
dependencyProxyImageCount
dependencyProxyImageTtlPolicy { enabled }
dependencyProxySetting { enabled }
+ descendantGroupsCount
+ projectsCount
FIELDS
end
- it 'avoids N+1 queries on the fields marked with lookahead' do
+ it 'avoids N+1 queries on the preloaded fields' 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)
@@ -57,7 +58,7 @@ RSpec.describe ResolvesGroups do
end
def query_groups(limit:)
- query_string = "{ groups(first: #{limit}) { nodes { id #{lookahead_fields} } } }"
+ query_string = "{ groups(first: #{limit}) { nodes { id #{preloaded_fields} } } }"
data = execute_query(query_type, graphql: query_string)
diff --git a/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb b/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb
index 5f12e8649b7..4d0f1676c7f 100644
--- a/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb
+++ b/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb
@@ -83,15 +83,16 @@ RSpec.describe Resolvers::ContainerRepositoryTagsResolver, feature_category: :co
context 'with parameters' do
using RSpec::Parameterized::TableSyntax
- where(:before, :after, :sort, :name, :first, :last, :sort_value) do
- nil | nil | 'NAME_DESC' | '' | 10 | nil | '-name'
- 'bb' | nil | 'NAME_ASC' | 'a' | nil | 5 | 'name'
- nil | 'aa' | 'NAME_DESC' | 'a' | 10 | nil | '-name'
+ where(:before, :after, :sort, :name, :first, :last, :sort_value, :referrers) do
+ nil | nil | 'NAME_DESC' | '' | 10 | nil | '-name' | nil
+ 'bb' | nil | 'NAME_ASC' | 'a' | nil | 5 | 'name' | false
+ nil | 'aa' | 'NAME_DESC' | 'a' | 10 | nil | '-name' | true
end
with_them do
let(:args) do
- { before: before, after: after, sort: sort, name: name, first: first, last: last }.compact
+ { before: before, after: after, sort: sort, name: name,
+ first: first, last: last, referrers: referrers }.compact
end
it 'calls ContainerRepository#tags_page with correct parameters' do
@@ -100,7 +101,8 @@ RSpec.describe Resolvers::ContainerRepositoryTagsResolver, feature_category: :co
last: after,
sort: sort_value,
name: name,
- page_size: [first, last].map(&:to_i).max
+ page_size: [first, last].map(&:to_i).max,
+ referrers: referrers
)
resolver(args)
diff --git a/spec/graphql/resolvers/design_management/versions_resolver_spec.rb b/spec/graphql/resolvers/design_management/versions_resolver_spec.rb
index eb39e5bafc5..744e7f35891 100644
--- a/spec/graphql/resolvers/design_management/versions_resolver_spec.rb
+++ b/spec/graphql/resolvers/design_management/versions_resolver_spec.rb
@@ -43,15 +43,15 @@ RSpec.describe Resolvers::DesignManagement::VersionsResolver do
context 'loading associations' do
it 'prevents N+1 queries when loading author' do
- control_count = ActiveRecord::QueryRecorder.new(skip_cached: false) do
+ control = ActiveRecord::QueryRecorder.new(skip_cached: false) do
resolve_versions(object).items.map(&:author)
- end.count
+ end
create_list(:design_version, 3, issue: issue)
expect do
resolve_versions(object).items.map(&:author)
- end.not_to exceed_all_query_limit(control_count)
+ end.not_to exceed_all_query_limit(control)
end
end
end
diff --git a/spec/graphql/resolvers/group_labels_resolver_spec.rb b/spec/graphql/resolvers/group_labels_resolver_spec.rb
index 08e17cedfcc..2e583a1703d 100644
--- a/spec/graphql/resolvers/group_labels_resolver_spec.rb
+++ b/spec/graphql/resolvers/group_labels_resolver_spec.rb
@@ -78,7 +78,7 @@ RSpec.describe Resolvers::GroupLabelsResolver do
Gitlab::SafeRequestStore.ensure_request_store do
resolve_labels(group, params).to_a
end
- end.not_to exceed_query_limit(control.count)
+ end.not_to exceed_query_limit(control)
end
end
diff --git a/spec/graphql/resolvers/labels_resolver_spec.rb b/spec/graphql/resolvers/labels_resolver_spec.rb
index 16cf2e73736..fd55c3131b4 100644
--- a/spec/graphql/resolvers/labels_resolver_spec.rb
+++ b/spec/graphql/resolvers/labels_resolver_spec.rb
@@ -78,7 +78,7 @@ RSpec.describe Resolvers::LabelsResolver do
Gitlab::SafeRequestStore.ensure_request_store do
resolve_labels(project, params).to_a
end
- end.not_to exceed_query_limit(control.count)
+ end.not_to exceed_query_limit(control)
end
end
diff --git a/spec/graphql/resolvers/ml/find_models_resolver_spec.rb b/spec/graphql/resolvers/ml/find_models_resolver_spec.rb
new file mode 100644
index 00000000000..ce85dd62515
--- /dev/null
+++ b/spec/graphql/resolvers/ml/find_models_resolver_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Resolvers::Ml::FindModelsResolver, feature_category: :mlops do
+ include GraphqlHelpers
+
+ describe '#resolve' do
+ let_it_be(:project) { create(:project) }
+ let_it_be(:models) { create_list(:ml_models, 2, project: project) }
+ let_it_be(:model_in_another_project) { create(:ml_models) }
+ let_it_be(:user) { project.owner }
+
+ let(:args) { { name: 'model', orderBy: 'CREATED_AT', sort: 'desc', invalid: 'blah' } }
+ let(:read_model_registry) { true }
+
+ before do
+ allow(Ability).to receive(:allowed?).and_call_original
+ allow(Ability).to receive(:allowed?)
+ .with(user, :read_model_registry, project)
+ .and_return(read_model_registry)
+ end
+
+ subject(:resolve_models) do
+ force(resolve(described_class, obj: project, ctx: { current_user: user }, args: args))&.to_a
+ end
+
+ context 'when user is allowed and model exists' do
+ it { is_expected.to eq(models.reverse) }
+
+ it 'only passes name, sort_by and order to finder' do
+ expect(::Projects::Ml::ModelFinder).to receive(:new)
+ .with(project, { name: 'model', order_by: 'created_at',
+sort: 'desc' })
+ .and_call_original
+
+ resolve_models
+ end
+ end
+
+ context 'when user does not have permission' do
+ let(:read_model_registry) { false }
+
+ it { is_expected.to be_nil }
+ end
+ end
+end
diff --git a/spec/graphql/resolvers/users_resolver_spec.rb b/spec/graphql/resolvers/users_resolver_spec.rb
index 2ae1b53c40f..ecb1bbb5618 100644
--- a/spec/graphql/resolvers/users_resolver_spec.rb
+++ b/spec/graphql/resolvers/users_resolver_spec.rb
@@ -62,6 +62,42 @@ RSpec.describe Resolvers::UsersResolver do
end
end
+ context 'when a set of group_id is passed' do
+ let_it_be(:group) { create(:group, :private) }
+ let_it_be(:subgroup) { create(:group, :private, parent: group) }
+ let_it_be(:group_member) { create(:user) }
+
+ let_it_be(:indirect_group_member) do
+ create(:user).tap { |u| subgroup.add_developer(u) }
+ end
+
+ let_it_be(:direct_group_members) do
+ [current_user, user1, group_member].each { |u| group.add_developer(u) }
+ end
+
+ it 'returns direct and indirect members of the group' do
+ expect(
+ resolve_users(args: { group_id: group.to_global_id })
+ ).to contain_exactly(indirect_group_member, *direct_group_members)
+ end
+
+ it 'raise an no resource not available error if the group do not exist group' do
+ expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ResourceNotAvailable) do
+ resolve_users(args: { group_id: "gid://gitlab/Group/#{non_existing_record_id}" })
+ end
+ end
+
+ context 'when user cannot read group' do
+ let(:current_user) { create(:user) }
+
+ it 'raise an no resource not available error the user cannot read the group' do
+ expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ResourceNotAvailable) do
+ resolve_users(args: { group_id: group.to_global_id })
+ end
+ end
+ end
+ end
+
context 'with anonymous access' do
let_it_be(:current_user) { nil }