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')
-rw-r--r--spec/graphql/gitlab_schema_spec.rb6
-rw-r--r--spec/graphql/graphql_triggers_spec.rb22
-rw-r--r--spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb13
-rw-r--r--spec/graphql/mutations/ci/job_token_scope/add_project_spec.rb40
-rw-r--r--spec/graphql/mutations/ci/pipeline_schedule/variable_input_type_spec.rb2
-rw-r--r--spec/graphql/mutations/issues/create_spec.rb6
-rw-r--r--spec/graphql/resolvers/alert_management/http_integrations_resolver_spec.rb3
-rw-r--r--spec/graphql/resolvers/alert_management/integrations_resolver_spec.rb3
-rw-r--r--spec/graphql/resolvers/board_lists_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/ci/config_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/ci/inherited_variables_resolver_spec.rb53
-rw-r--r--spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/ci/project_pipeline_counts_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/ci/runner_job_count_resolver_spec.rb56
-rw-r--r--spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb17
-rw-r--r--spec/graphql/resolvers/ci/runners_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/design_management/version_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/echo_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/issue_status_counts_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/metrics/dashboard_resolver_spec.rb56
-rw-r--r--spec/graphql/resolvers/project_issues_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/users/participants_resolver_spec.rb3
-rw-r--r--spec/graphql/types/alert_management/alert_type_spec.rb1
-rw-r--r--spec/graphql/types/ci/detailed_status_type_spec.rb2
-rw-r--r--spec/graphql/types/ci/group_variable_type_spec.rb4
-rw-r--r--spec/graphql/types/ci/project_variable_type_spec.rb4
-rw-r--r--spec/graphql/types/commit_signatures/verification_status_enum_spec.rb2
-rw-r--r--spec/graphql/types/deployment_tag_type_spec.rb (renamed from spec/graphql/types/detployment_tag_type_spec.rb)2
-rw-r--r--spec/graphql/types/environment_type_spec.rb2
-rw-r--r--spec/graphql/types/global_id_type_spec.rb6
-rw-r--r--spec/graphql/types/ide_type_spec.rb15
-rw-r--r--spec/graphql/types/issue_type_spec.rb1
-rw-r--r--spec/graphql/types/metrics/dashboard_type_spec.rb22
-rw-r--r--spec/graphql/types/project_statistics_type_spec.rb4
-rw-r--r--spec/graphql/types/project_type_spec.rb8
-rw-r--r--spec/graphql/types/root_storage_statistics_type_spec.rb6
-rw-r--r--spec/graphql/types/user_type_spec.rb42
37 files changed, 236 insertions, 183 deletions
diff --git a/spec/graphql/gitlab_schema_spec.rb b/spec/graphql/gitlab_schema_spec.rb
index b5c2d4da9ac..885bbc82ecc 100644
--- a/spec/graphql/gitlab_schema_spec.rb
+++ b/spec/graphql/gitlab_schema_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
RSpec.describe GitlabSchema do
- let_it_be(:connections) { GitlabSchema.connections.all_wrappers }
+ let_it_be(:connections) { described_class.connections.all_wrappers }
let_it_be(:tracers) { described_class.tracers }
let(:user) { build :user }
@@ -12,10 +12,6 @@ RSpec.describe GitlabSchema do
expect(tracers).to include(BatchLoader::GraphQL)
end
- it 'enables the generic instrumenter' do
- expect(tracers).to include(instance_of(::Gitlab::Graphql::GenericTracing))
- end
-
it 'has the base mutation' do
expect(described_class.mutation).to eq(::Types::MutationType)
end
diff --git a/spec/graphql/graphql_triggers_spec.rb b/spec/graphql/graphql_triggers_spec.rb
index 864818351a1..3f58f2678d8 100644
--- a/spec/graphql/graphql_triggers_spec.rb
+++ b/spec/graphql/graphql_triggers_spec.rb
@@ -20,7 +20,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
issuable
)
- GraphqlTriggers.issuable_assignees_updated(issuable)
+ described_class.issuable_assignees_updated(issuable)
end
end
@@ -32,7 +32,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
issuable
).and_call_original
- GraphqlTriggers.issuable_title_updated(issuable)
+ described_class.issuable_title_updated(issuable)
end
end
@@ -44,7 +44,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
issuable
).and_call_original
- GraphqlTriggers.issuable_description_updated(issuable)
+ described_class.issuable_description_updated(issuable)
end
end
@@ -62,7 +62,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
issuable
)
- GraphqlTriggers.issuable_labels_updated(issuable)
+ described_class.issuable_labels_updated(issuable)
end
end
@@ -74,7 +74,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
issuable
).and_call_original
- GraphqlTriggers.issuable_dates_updated(issuable)
+ described_class.issuable_dates_updated(issuable)
end
end
@@ -86,7 +86,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
issuable
).and_call_original
- GraphqlTriggers.issuable_milestone_updated(issuable)
+ described_class.issuable_milestone_updated(issuable)
end
end
@@ -100,7 +100,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
merge_request
).and_call_original
- GraphqlTriggers.merge_request_reviewers_updated(merge_request)
+ described_class.merge_request_reviewers_updated(merge_request)
end
end
@@ -114,7 +114,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
merge_request
).and_call_original
- GraphqlTriggers.merge_request_merge_status_updated(merge_request)
+ described_class.merge_request_merge_status_updated(merge_request)
end
end
@@ -128,7 +128,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
merge_request
).and_call_original
- GraphqlTriggers.merge_request_approval_state_updated(merge_request)
+ described_class.merge_request_approval_state_updated(merge_request)
end
end
@@ -140,7 +140,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
issuable
).and_call_original
- GraphqlTriggers.work_item_updated(issuable)
+ described_class.work_item_updated(issuable)
end
context 'when triggered with an Issue' do
@@ -154,7 +154,7 @@ RSpec.describe GraphqlTriggers, feature_category: :shared do
work_item
).and_call_original
- GraphqlTriggers.work_item_updated(issue)
+ described_class.work_item_updated(issue)
end
end
end
diff --git a/spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb b/spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb
index 164bd9b1e39..c92aeb43f51 100644
--- a/spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb
+++ b/spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb
@@ -6,7 +6,8 @@ RSpec.describe Mutations::AlertManagement::PrometheusIntegration::Create do
let_it_be(:current_user) { create(:user) }
let_it_be(:project) { create(:project) }
- let(:args) { { project_path: project.full_path, active: true, api_url: 'http://prometheus.com/' } }
+ let(:api_url) { 'http://prometheus.com/' }
+ let(:args) { { project_path: project.full_path, active: true, api_url: api_url } }
specify { expect(described_class).to require_graphql_authorizations(:admin_project) }
@@ -29,6 +30,14 @@ RSpec.describe Mutations::AlertManagement::PrometheusIntegration::Create do
end
end
+ context 'when api_url is nil' do
+ let(:api_url) { nil }
+
+ it 'creates the integration' do
+ expect { resolve }.to change(::Alerting::ProjectAlertingSetting, :count).by(1)
+ end
+ end
+
context 'when UpdateService responds with success' do
it 'returns the integration with no errors' do
expect(resolve).to eq(
@@ -38,7 +47,7 @@ RSpec.describe Mutations::AlertManagement::PrometheusIntegration::Create do
end
it 'creates a corresponding token' do
- expect { resolve }.to change(::Alerting::ProjectAlertingSetting, :count).by(1)
+ expect { resolve }.to change(::Integrations::Prometheus, :count).by(1)
end
end
diff --git a/spec/graphql/mutations/ci/job_token_scope/add_project_spec.rb b/spec/graphql/mutations/ci/job_token_scope/add_project_spec.rb
index 0485796fe56..54da3061323 100644
--- a/spec/graphql/mutations/ci/job_token_scope/add_project_spec.rb
+++ b/spec/graphql/mutations/ci/job_token_scope/add_project_spec.rb
@@ -20,10 +20,6 @@ RSpec.describe Mutations::Ci::JobTokenScope::AddProject, feature_category: :cont
mutation.resolve(**mutation_args)
end
- before do
- stub_feature_flags(frozen_outbound_job_token_scopes_override: false)
- end
-
context 'when user is not logged in' do
let(:current_user) { nil }
@@ -75,42 +71,6 @@ RSpec.describe Mutations::Ci::JobTokenScope::AddProject, feature_category: :cont
end
end
- context 'when FF frozen_outbound_job_token_scopes is disabled' do
- before do
- stub_feature_flags(frozen_outbound_job_token_scopes: false)
- end
-
- it 'adds target project to the outbound job token scope by default' do
- expect do
- expect(subject).to include(ci_job_token_scope: be_present, errors: be_empty)
- end.to change { Ci::JobToken::ProjectScopeLink.outbound.count }.by(1)
- end
-
- context 'when mutation uses the direction argument' do
- let(:mutation_args) { super().merge!(direction: direction) }
-
- context 'when targeting the outbound allowlist' do
- let(:direction) { :outbound }
-
- it 'adds the target project' do
- expect do
- expect(subject).to include(ci_job_token_scope: be_present, errors: be_empty)
- end.to change { Ci::JobToken::ProjectScopeLink.outbound.count }.by(1)
- end
- end
-
- context 'when targeting the inbound allowlist' do
- let(:direction) { :inbound }
-
- it 'adds the target project' do
- expect do
- expect(subject).to include(ci_job_token_scope: be_present, errors: be_empty)
- end.to change { Ci::JobToken::ProjectScopeLink.inbound.count }.by(1)
- end
- end
- end
- end
-
context 'when the service returns an error' do
let(:service) { double(:service) }
diff --git a/spec/graphql/mutations/ci/pipeline_schedule/variable_input_type_spec.rb b/spec/graphql/mutations/ci/pipeline_schedule/variable_input_type_spec.rb
index 564bc95b352..a932002d614 100644
--- a/spec/graphql/mutations/ci/pipeline_schedule/variable_input_type_spec.rb
+++ b/spec/graphql/mutations/ci/pipeline_schedule/variable_input_type_spec.rb
@@ -5,5 +5,5 @@ require 'spec_helper'
RSpec.describe Mutations::Ci::PipelineSchedule::VariableInputType, feature_category: :continuous_integration do
specify { expect(described_class.graphql_name).to eq('PipelineScheduleVariableInput') }
- it { expect(described_class.arguments.keys).to match_array(%w[key value variableType]) }
+ it { expect(described_class.arguments.keys).to match_array(%w[id key value variableType destroy]) }
end
diff --git a/spec/graphql/mutations/issues/create_spec.rb b/spec/graphql/mutations/issues/create_spec.rb
index 24348097021..04b437b27b5 100644
--- a/spec/graphql/mutations/issues/create_spec.rb
+++ b/spec/graphql/mutations/issues/create_spec.rb
@@ -19,8 +19,7 @@ RSpec.describe Mutations::Issues::Create do
description: 'new description',
confidential: true,
due_date: Date.tomorrow,
- discussion_locked: true,
- issue_type: 'issue'
+ discussion_locked: true
}
end
@@ -29,7 +28,8 @@ RSpec.describe Mutations::Issues::Create do
project_path: project.full_path,
milestone_id: milestone.to_global_id,
labels: [project_label1.title, project_label2.title, new_label1, new_label2],
- assignee_ids: [assignee1.to_global_id, assignee2.to_global_id]
+ assignee_ids: [assignee1.to_global_id, assignee2.to_global_id],
+ issue_type: 'issue'
}.merge(expected_attributes)
end
diff --git a/spec/graphql/resolvers/alert_management/http_integrations_resolver_spec.rb b/spec/graphql/resolvers/alert_management/http_integrations_resolver_spec.rb
index 0f40565c5d3..80234aaaacf 100644
--- a/spec/graphql/resolvers/alert_management/http_integrations_resolver_spec.rb
+++ b/spec/graphql/resolvers/alert_management/http_integrations_resolver_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Resolvers::AlertManagement::HttpIntegrationsResolver do
+RSpec.describe Resolvers::AlertManagement::HttpIntegrationsResolver, feature_category: :incident_management do
include GraphqlHelpers
let_it_be(:guest) { create(:user) }
@@ -13,6 +13,7 @@ RSpec.describe Resolvers::AlertManagement::HttpIntegrationsResolver do
let_it_be(:active_http_integration) { create(:alert_management_http_integration, project: project) }
let_it_be(:inactive_http_integration) { create(:alert_management_http_integration, :inactive, project: project) }
let_it_be(:other_proj_integration) { create(:alert_management_http_integration) }
+ let_it_be(:migrated_integration) { create(:alert_management_prometheus_integration, :legacy, project: project) }
let(:params) { {} }
diff --git a/spec/graphql/resolvers/alert_management/integrations_resolver_spec.rb b/spec/graphql/resolvers/alert_management/integrations_resolver_spec.rb
index 11114d41522..ed2e7d35ee3 100644
--- a/spec/graphql/resolvers/alert_management/integrations_resolver_spec.rb
+++ b/spec/graphql/resolvers/alert_management/integrations_resolver_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Resolvers::AlertManagement::IntegrationsResolver do
+RSpec.describe Resolvers::AlertManagement::IntegrationsResolver, feature_category: :incident_management do
include GraphqlHelpers
let_it_be(:current_user) { create(:user) }
@@ -13,6 +13,7 @@ RSpec.describe Resolvers::AlertManagement::IntegrationsResolver do
let_it_be(:inactive_http_integration) { create(:alert_management_http_integration, :inactive, project: project) }
let_it_be(:other_proj_integration) { create(:alert_management_http_integration, project: project2) }
let_it_be(:other_proj_prometheus_integration) { create(:prometheus_integration, project: project2) }
+ let_it_be(:migrated_integration) { create(:alert_management_prometheus_integration, :legacy, project: project) }
let(:params) { {} }
diff --git a/spec/graphql/resolvers/board_lists_resolver_spec.rb b/spec/graphql/resolvers/board_lists_resolver_spec.rb
index 0f6e51ebbd0..1de59c5f507 100644
--- a/spec/graphql/resolvers/board_lists_resolver_spec.rb
+++ b/spec/graphql/resolvers/board_lists_resolver_spec.rb
@@ -21,6 +21,7 @@ RSpec.describe Resolvers::BoardListsResolver do
end
it 'does not create the backlog list' do
+ board.lists.backlog.delete_all
lists = resolve_board_lists
expect(lists.count).to eq 1
@@ -35,7 +36,6 @@ RSpec.describe Resolvers::BoardListsResolver do
context 'when authorized' do
let!(:label_list) { create(:list, board: board, label: label) }
- let!(:backlog_list) { create(:backlog_list, board: board) }
it 'returns a list of board lists' do
lists = resolve_board_lists
diff --git a/spec/graphql/resolvers/ci/config_resolver_spec.rb b/spec/graphql/resolvers/ci/config_resolver_spec.rb
index 692bdf58784..16a2286cb7e 100644
--- a/spec/graphql/resolvers/ci/config_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/config_resolver_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Resolvers::Ci::ConfigResolver do
+RSpec.describe Resolvers::Ci::ConfigResolver, feature_category: :continuous_integration do
include GraphqlHelpers
describe '#resolve' do
diff --git a/spec/graphql/resolvers/ci/inherited_variables_resolver_spec.rb b/spec/graphql/resolvers/ci/inherited_variables_resolver_spec.rb
index 6837d4b0459..e1a76ce0f0f 100644
--- a/spec/graphql/resolvers/ci/inherited_variables_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/inherited_variables_resolver_spec.rb
@@ -11,15 +11,16 @@ RSpec.describe Resolvers::Ci::InheritedVariablesResolver, feature_category: :sec
let_it_be(:subgroup) { create(:group, parent: group) }
let_it_be(:project) { create(:project, group: subgroup) }
let_it_be(:project_without_group) { create(:project) }
+ let_it_be(:variable1) { create(:ci_group_variable, group: group, key: 'GROUP_VAR_A', created_at: 1.day.ago) }
+ let_it_be(:variable2) { create(:ci_group_variable, group: subgroup, key: 'SUBGROUP_VAR_B') }
let_it_be(:inherited_ci_variables) do
- [
- create(:ci_group_variable, group: group, key: 'GROUP_VAR_A'),
- create(:ci_group_variable, group: subgroup, key: 'SUBGROUP_VAR_B')
- ]
+ [variable1, variable2]
end
- subject(:resolve_variables) { resolve(described_class, obj: obj, ctx: { current_user: user }, args: {}) }
+ let(:args) { {} }
+
+ subject(:resolve_variables) { resolve(described_class, obj: obj, args: args, ctx: { current_user: user }) }
context 'when project does not have a group' do
let_it_be(:obj) { project_without_group }
@@ -36,5 +37,47 @@ RSpec.describe Resolvers::Ci::InheritedVariablesResolver, feature_category: :sec
expect(resolve_variables.items.to_a).to match_array(inherited_ci_variables)
end
end
+
+ describe 'sorting behaviour' do
+ let_it_be(:obj) { project }
+
+ context 'with sort by default (created_at descending)' do
+ it 'returns variables ordered by created_at in descending order' do
+ expect(resolve_variables.items.to_a).to eq([variable2, variable1])
+ end
+ end
+
+ context 'with sort by created_at descending' do
+ let(:args) { { sort: 'CREATED_DESC' } }
+
+ it 'returns variables ordered by created_at in descending order' do
+ expect(resolve_variables.items.to_a).to eq([variable2, variable1])
+ end
+ end
+
+ context 'with sort by created_at ascending' do
+ let(:args) { { sort: 'CREATED_ASC' } }
+
+ it 'returns variables ordered by created_at in ascending order' do
+ expect(resolve_variables.items.to_a).to eq([variable1, variable2])
+ end
+ end
+
+ context 'with sort by key descending' do
+ let(:args) { { sort: 'KEY_DESC' } }
+
+ it 'returns variables ordered by key in descending order' do
+ expect(resolve_variables.items.to_a).to eq([variable2, variable1])
+ end
+ end
+
+ context 'with sort by key ascending' do
+ let(:args) { { sort: 'KEY_ASC' } }
+
+ it 'returns variables ordered by key in ascending order' do
+ expect(resolve_variables.items.to_a).to eq([variable1, variable2])
+ end
+ end
+ end
end
end
diff --git a/spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb b/spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb
index 92f4d3dd8e8..d2bcc7cd597 100644
--- a/spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Resolvers::Ci::JobTokenScopeResolver do
+RSpec.describe Resolvers::Ci::JobTokenScopeResolver, feature_category: :continuous_integration do
include GraphqlHelpers
let_it_be(:current_user) { create(:user) }
diff --git a/spec/graphql/resolvers/ci/project_pipeline_counts_resolver_spec.rb b/spec/graphql/resolvers/ci/project_pipeline_counts_resolver_spec.rb
index 07b4a5509b2..e04bed0f077 100644
--- a/spec/graphql/resolvers/ci/project_pipeline_counts_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/project_pipeline_counts_resolver_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Resolvers::Ci::ProjectPipelineCountsResolver do
+RSpec.describe Resolvers::Ci::ProjectPipelineCountsResolver, feature_category: :continuous_integration do
include GraphqlHelpers
let(:current_user) { create(:user) }
diff --git a/spec/graphql/resolvers/ci/runner_job_count_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_job_count_resolver_spec.rb
new file mode 100644
index 00000000000..6336ea883f7
--- /dev/null
+++ b/spec/graphql/resolvers/ci/runner_job_count_resolver_spec.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Resolvers::Ci::RunnerJobCountResolver, feature_category: :runner_fleet do
+ include GraphqlHelpers
+
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:pipeline) { create(:ci_pipeline, project: project) }
+ let_it_be(:irrelevant_pipeline) { create(:ci_pipeline, project: project) }
+
+ let_it_be(:runner) { create(:ci_runner, :project, projects: [project]) }
+
+ let_it_be(:build_one) { create(:ci_build, :success, name: 'Build One', runner: runner, pipeline: pipeline) }
+ let_it_be(:build_two) { create(:ci_build, :success, name: 'Build Two', runner: runner, pipeline: pipeline) }
+ let_it_be(:build_three) { create(:ci_build, :failed, name: 'Build Three', runner: runner, pipeline: pipeline) }
+ let_it_be(:irrelevant_build) { create(:ci_build, name: 'Irrelevant Build', pipeline: irrelevant_pipeline) }
+
+ describe '#resolve' do
+ subject(:job_count) { resolve_job_count(args) }
+
+ let(:args) { {} }
+
+ context 'with authorized user', :enable_admin_mode do
+ let(:current_user) { create(:user, :admin) }
+
+ context 'with statuses argument filtering on successful builds' do
+ let(:args) { { statuses: [Types::Ci::JobStatusEnum.coerce_isolated_input('SUCCESS')] } }
+
+ it { is_expected.to eq 2 }
+ end
+
+ context 'with statuses argument filtering on failed builds' do
+ let(:args) { { statuses: [Types::Ci::JobStatusEnum.coerce_isolated_input('FAILED')] } }
+
+ it { is_expected.to eq 1 }
+ end
+
+ context 'without statuses argument' do
+ it { is_expected.to eq 3 }
+ end
+ end
+
+ context 'with unauthorized user' do
+ let(:current_user) { nil }
+
+ it { is_expected.to be_nil }
+ end
+ end
+
+ private
+
+ def resolve_job_count(args = {}, context = { current_user: current_user })
+ resolve(described_class, obj: runner, args: args, ctx: context)&.value
+ end
+end
diff --git a/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb
index 963a642fa4e..322bead0d3c 100644
--- a/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb
@@ -9,17 +9,18 @@ RSpec.describe Resolvers::Ci::RunnerJobsResolver, feature_category: :runner_flee
let_it_be(:pipeline) { create(:ci_pipeline, project: project) }
let_it_be(:irrelevant_pipeline) { create(:ci_pipeline, project: project) }
- let!(:build_one) { create(:ci_build, :success, name: 'Build One', runner: runner, pipeline: pipeline) }
- let!(:build_two) { create(:ci_build, :success, name: 'Build Two', runner: runner, pipeline: pipeline) }
- let!(:build_three) { create(:ci_build, :failed, name: 'Build Three', runner: runner, pipeline: pipeline) }
- let!(:irrelevant_build) { create(:ci_build, name: 'Irrelevant Build', pipeline: irrelevant_pipeline) }
+ let_it_be(:runner) { create(:ci_runner, :project, projects: [project]) }
- let(:args) { {} }
- let(:runner) { create(:ci_runner, :project, projects: [project]) }
-
- subject { resolve_jobs(args) }
+ let_it_be(:build_one) { create(:ci_build, :success, name: 'Build One', runner: runner, pipeline: pipeline) }
+ let_it_be(:build_two) { create(:ci_build, :success, name: 'Build Two', runner: runner, pipeline: pipeline) }
+ let_it_be(:build_three) { create(:ci_build, :failed, name: 'Build Three', runner: runner, pipeline: pipeline) }
+ let_it_be(:irrelevant_build) { create(:ci_build, name: 'Irrelevant Build', pipeline: irrelevant_pipeline) }
describe '#resolve' do
+ subject(:jobs) { resolve_jobs(args) }
+
+ let(:args) { {} }
+
context 'with authorized user', :enable_admin_mode do
let(:current_user) { create(:user, :admin) }
diff --git a/spec/graphql/resolvers/ci/runners_resolver_spec.rb b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
index e4620b96cae..02fc7d28255 100644
--- a/spec/graphql/resolvers/ci/runners_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver, feature_category: :runner_fleet d
let(:obj) { nil }
let(:args) { {} }
- subject do
+ subject(:resolve_scope) do
resolve(described_class, obj: obj, ctx: { current_user: user }, args: args,
arg_style: :internal)
end
diff --git a/spec/graphql/resolvers/design_management/version_resolver_spec.rb b/spec/graphql/resolvers/design_management/version_resolver_spec.rb
index ab1d7d4d9c5..b72b02bf89b 100644
--- a/spec/graphql/resolvers/design_management/version_resolver_spec.rb
+++ b/spec/graphql/resolvers/design_management/version_resolver_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Resolvers::DesignManagement::VersionResolver do
+RSpec.describe Resolvers::DesignManagement::VersionResolver, feature_category: :shared do
include GraphqlHelpers
include DesignManagementTestHelpers
diff --git a/spec/graphql/resolvers/echo_resolver_spec.rb b/spec/graphql/resolvers/echo_resolver_spec.rb
index 59a121ac7de..02ec7327f74 100644
--- a/spec/graphql/resolvers/echo_resolver_spec.rb
+++ b/spec/graphql/resolvers/echo_resolver_spec.rb
@@ -14,7 +14,7 @@ RSpec.describe Resolvers::EchoResolver do
describe '#resolve' do
it 'echoes text and username' do
- expect(resolve_echo(text)).to eq %Q("#{current_user.username}" says: #{text})
+ expect(resolve_echo(text)).to eq %("#{current_user.username}" says: #{text})
end
it 'echoes text and nil as username' do
diff --git a/spec/graphql/resolvers/issue_status_counts_resolver_spec.rb b/spec/graphql/resolvers/issue_status_counts_resolver_spec.rb
index 86a4154f23b..012c40e358f 100644
--- a/spec/graphql/resolvers/issue_status_counts_resolver_spec.rb
+++ b/spec/graphql/resolvers/issue_status_counts_resolver_spec.rb
@@ -71,7 +71,7 @@ RSpec.describe Resolvers::IssueStatusCountsResolver do
context 'when both assignee_username and assignee_usernames are provided' do
it 'returns a mutually exclusive filter error' do
- expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ArgumentError, 'only one of [assigneeUsernames, assigneeUsername] arguments is allowed at the same time.') do
+ expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ArgumentError, 'only one of [assigneeUsernames, assigneeUsername, assigneeWildcardId] arguments is allowed at the same time.') do
resolve_issue_status_counts(assignee_usernames: [current_user.username], assignee_username: current_user.username)
end
end
diff --git a/spec/graphql/resolvers/metrics/dashboard_resolver_spec.rb b/spec/graphql/resolvers/metrics/dashboard_resolver_spec.rb
deleted file mode 100644
index 354fd350aa7..00000000000
--- a/spec/graphql/resolvers/metrics/dashboard_resolver_spec.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Resolvers::Metrics::DashboardResolver, feature_category: :metrics do
- include GraphqlHelpers
-
- let_it_be(:current_user) { create(:user) }
-
- describe '#resolve' do
- subject(:resolve_dashboard) { resolve(described_class, obj: parent_object, args: args, ctx: { current_user: current_user }) }
-
- let(:args) do
- {
- path: 'config/prometheus/common_metrics.yml'
- }
- end
-
- context 'for environment' do
- let(:project) { create(:project) }
- let(:parent_object) { create(:environment, project: project) }
-
- before do
- stub_feature_flags(remove_monitor_metrics: false)
- project.add_developer(current_user)
- end
-
- it 'use ActiveModel class to find matching dashboard', :aggregate_failures do
- expected_arguments = { project: project, user: current_user, path: args[:path], options: { environment: parent_object } }
-
- expect(PerformanceMonitoring::PrometheusDashboard).to receive(:find_for).with(expected_arguments).and_return(PerformanceMonitoring::PrometheusDashboard.new)
- expect(resolve_dashboard).to be_instance_of PerformanceMonitoring::PrometheusDashboard
- end
-
- context 'without parent object' do
- let(:parent_object) { nil }
-
- it 'returns nil', :aggregate_failures do
- expect(PerformanceMonitoring::PrometheusDashboard).not_to receive(:find_for)
- expect(resolve_dashboard).to be_nil
- end
- end
-
- context 'when metrics dashboard feature is unavailable' do
- before do
- stub_feature_flags(remove_monitor_metrics: true)
- end
-
- it 'returns nil', :aggregate_failures do
- expect(PerformanceMonitoring::PrometheusDashboard).not_to receive(:find_for)
- expect(resolve_dashboard).to be_nil
- end
- end
- end
- end
-end
diff --git a/spec/graphql/resolvers/project_issues_resolver_spec.rb b/spec/graphql/resolvers/project_issues_resolver_spec.rb
index a510baab5a9..faafbc465e3 100644
--- a/spec/graphql/resolvers/project_issues_resolver_spec.rb
+++ b/spec/graphql/resolvers/project_issues_resolver_spec.rb
@@ -195,7 +195,7 @@ RSpec.describe Resolvers::ProjectIssuesResolver do
context 'when both assignee_username and assignee_usernames are provided' do
it 'generates a mutually exclusive filter error' do
- expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ArgumentError, 'only one of [assigneeUsernames, assigneeUsername] arguments is allowed at the same time.') do
+ expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ArgumentError, 'only one of [assigneeUsernames, assigneeUsername, assigneeWildcardId] arguments is allowed at the same time.') do
resolve_issues(assignee_usernames: [assignee.username], assignee_username: assignee.username)
end
end
diff --git a/spec/graphql/resolvers/users/participants_resolver_spec.rb b/spec/graphql/resolvers/users/participants_resolver_spec.rb
index 63a14daabba..22111626c5b 100644
--- a/spec/graphql/resolvers/users/participants_resolver_spec.rb
+++ b/spec/graphql/resolvers/users/participants_resolver_spec.rb
@@ -137,7 +137,8 @@ RSpec.describe Resolvers::Users::ParticipantsResolver do
# 1 extra query per source (3 emojis + 2 notes) to fetch participables collection
# 2 extra queries to load work item widgets collection
- expect { query.call }.not_to exceed_query_limit(control_count).with_threshold(7)
+ # 1 extra query to load the project creator to check if they are banned
+ expect { query.call }.not_to exceed_query_limit(control_count).with_threshold(8)
end
it 'does not execute N+1 for system note metadata relation' do
diff --git a/spec/graphql/types/alert_management/alert_type_spec.rb b/spec/graphql/types/alert_management/alert_type_spec.rb
index 4428fc0683a..92e8104fc4d 100644
--- a/spec/graphql/types/alert_management/alert_type_spec.rb
+++ b/spec/graphql/types/alert_management/alert_type_spec.rb
@@ -31,7 +31,6 @@ RSpec.describe GitlabSchema.types['AlertManagementAlert'], feature_category: :in
assignees
notes
discussions
- metrics_dashboard_url
runbook
todos
details_url
diff --git a/spec/graphql/types/ci/detailed_status_type_spec.rb b/spec/graphql/types/ci/detailed_status_type_spec.rb
index 81ab1b52552..69fb2bc43c0 100644
--- a/spec/graphql/types/ci/detailed_status_type_spec.rb
+++ b/spec/graphql/types/ci/detailed_status_type_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe Types::Ci::DetailedStatusType do
include GraphqlHelpers
- let_it_be(:stage) { create(:ci_stage, status: :skipped) }
+ let_it_be(:stage) { create(:ci_stage, status: :manual) }
specify { expect(described_class.graphql_name).to eq('DetailedStatus') }
diff --git a/spec/graphql/types/ci/group_variable_type_spec.rb b/spec/graphql/types/ci/group_variable_type_spec.rb
index 106935642f2..ef6d8279523 100644
--- a/spec/graphql/types/ci/group_variable_type_spec.rb
+++ b/spec/graphql/types/ci/group_variable_type_spec.rb
@@ -5,5 +5,7 @@ require 'spec_helper'
RSpec.describe GitlabSchema.types['CiGroupVariable'] do
specify { expect(described_class.interfaces).to contain_exactly(Types::Ci::VariableInterface) }
- specify { expect(described_class).to have_graphql_fields(:environment_scope, :masked, :protected).at_least }
+ specify do
+ expect(described_class).to have_graphql_fields(:environment_scope, :masked, :protected, :description).at_least
+ end
end
diff --git a/spec/graphql/types/ci/project_variable_type_spec.rb b/spec/graphql/types/ci/project_variable_type_spec.rb
index e6e045b2bca..cec0753fcba 100644
--- a/spec/graphql/types/ci/project_variable_type_spec.rb
+++ b/spec/graphql/types/ci/project_variable_type_spec.rb
@@ -5,5 +5,7 @@ require 'spec_helper'
RSpec.describe GitlabSchema.types['CiProjectVariable'] do
specify { expect(described_class.interfaces).to contain_exactly(Types::Ci::VariableInterface) }
- specify { expect(described_class).to have_graphql_fields(:environment_scope, :masked, :protected).at_least }
+ specify do
+ expect(described_class).to have_graphql_fields(:environment_scope, :masked, :protected, :description).at_least
+ end
end
diff --git a/spec/graphql/types/commit_signatures/verification_status_enum_spec.rb b/spec/graphql/types/commit_signatures/verification_status_enum_spec.rb
index a0d99f5f0c1..7fc600745df 100644
--- a/spec/graphql/types/commit_signatures/verification_status_enum_spec.rb
+++ b/spec/graphql/types/commit_signatures/verification_status_enum_spec.rb
@@ -10,7 +10,7 @@ RSpec.describe GitlabSchema.types['VerificationStatus'] do
.to match_array(%w[
UNVERIFIED UNVERIFIED_KEY VERIFIED
SAME_USER_DIFFERENT_EMAIL OTHER_USER UNKNOWN_KEY
- MULTIPLE_SIGNATURES REVOKED_KEY
+ MULTIPLE_SIGNATURES REVOKED_KEY VERIFIED_SYSTEM
])
end
end
diff --git a/spec/graphql/types/detployment_tag_type_spec.rb b/spec/graphql/types/deployment_tag_type_spec.rb
index 9a7a8db0970..b6741c208fe 100644
--- a/spec/graphql/types/detployment_tag_type_spec.rb
+++ b/spec/graphql/types/deployment_tag_type_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe GitlabSchema.types['DeploymentTag'] do
+RSpec.describe GitlabSchema.types['DeploymentTag'], feature_category: :continuous_delivery do
specify { expect(described_class.graphql_name).to eq('DeploymentTag') }
it 'has the expected fields' do
diff --git a/spec/graphql/types/environment_type_spec.rb b/spec/graphql/types/environment_type_spec.rb
index 721c20efc81..1d1bc4b2cb4 100644
--- a/spec/graphql/types/environment_type_spec.rb
+++ b/spec/graphql/types/environment_type_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe GitlabSchema.types['Environment'] do
it 'includes the expected fields' do
expected_fields = %w[
- name id state metrics_dashboard latest_opened_most_severe_alert path external_url deployments
+ name id state latest_opened_most_severe_alert path external_url deployments
slug createdAt updatedAt autoStopAt autoDeleteAt tier environmentType lastDeployment deployFreezes
clusterAgent
]
diff --git a/spec/graphql/types/global_id_type_spec.rb b/spec/graphql/types/global_id_type_spec.rb
index fa0b34113bc..8ce0bc2b70a 100644
--- a/spec/graphql/types/global_id_type_spec.rb
+++ b/spec/graphql/types/global_id_type_spec.rb
@@ -105,12 +105,12 @@ RSpec.describe Types::GlobalIDType do
around do |example|
# Unset all previously memoized GlobalIDTypes to allow us to define one
# that will use the constants stubbed in the `before` block.
- previous_id_types = Types::GlobalIDType.instance_variable_get(:@id_types)
- Types::GlobalIDType.instance_variable_set(:@id_types, {})
+ previous_id_types = described_class.instance_variable_get(:@id_types)
+ described_class.instance_variable_set(:@id_types, {})
example.run
ensure
- Types::GlobalIDType.instance_variable_set(:@id_types, previous_id_types)
+ described_class.instance_variable_set(:@id_types, previous_id_types)
end
before do
diff --git a/spec/graphql/types/ide_type_spec.rb b/spec/graphql/types/ide_type_spec.rb
new file mode 100644
index 00000000000..b0e43332fa8
--- /dev/null
+++ b/spec/graphql/types/ide_type_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['Ide'], feature_category: :web_ide do
+ specify { expect(described_class.graphql_name).to eq('Ide') }
+
+ it 'has the expected fields' do
+ expected_fields = %w[
+ codeSuggestionsEnabled
+ ]
+
+ expect(described_class).to have_graphql_fields(*expected_fields)
+ end
+end
diff --git a/spec/graphql/types/issue_type_spec.rb b/spec/graphql/types/issue_type_spec.rb
index a9fe85ac62f..7c4f2a06147 100644
--- a/spec/graphql/types/issue_type_spec.rb
+++ b/spec/graphql/types/issue_type_spec.rb
@@ -266,7 +266,6 @@ RSpec.describe GitlabSchema.types['Issue'] do
context 'for an incident' do
before do
issue.update!(
- issue_type: WorkItems::Type.base_types[:incident],
work_item_type: WorkItems::Type.default_by_type(:incident)
)
end
diff --git a/spec/graphql/types/metrics/dashboard_type_spec.rb b/spec/graphql/types/metrics/dashboard_type_spec.rb
deleted file mode 100644
index 114db87d5f1..00000000000
--- a/spec/graphql/types/metrics/dashboard_type_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe GitlabSchema.types['MetricsDashboard'] do
- specify { expect(described_class.graphql_name).to eq('MetricsDashboard') }
-
- it 'has the expected fields' do
- expected_fields = %w[
- path annotations schema_validation_warnings
- ]
-
- expect(described_class).to have_graphql_fields(*expected_fields)
- end
-
- describe 'annotations field' do
- subject { described_class.fields['annotations'] }
-
- it { is_expected.to have_graphql_type(Types::Metrics::Dashboards::AnnotationType.connection_type) }
- it { is_expected.to have_graphql_resolver(Resolvers::Metrics::Dashboards::AnnotationResolver) }
- end
-end
diff --git a/spec/graphql/types/project_statistics_type_spec.rb b/spec/graphql/types/project_statistics_type_spec.rb
index a958a5150aa..558ff41f6f4 100644
--- a/spec/graphql/types/project_statistics_type_spec.rb
+++ b/spec/graphql/types/project_statistics_type_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
RSpec.describe GitlabSchema.types['ProjectStatistics'] do
- it 'has all the required fields' do
- expect(described_class).to have_graphql_fields(:storage_size, :repository_size, :lfs_objects_size,
+ it 'has the expected fields' do
+ expect(described_class).to include_graphql_fields(:storage_size, :repository_size, :lfs_objects_size,
:build_artifacts_size, :packages_size, :commit_count,
:wiki_size, :snippets_size, :pipeline_artifacts_size,
:uploads_size, :container_registry_size)
diff --git a/spec/graphql/types/project_type_spec.rb b/spec/graphql/types/project_type_spec.rb
index bcfdb05ca90..262164a0821 100644
--- a/spec/graphql/types/project_type_spec.rb
+++ b/spec/graphql/types/project_type_spec.rb
@@ -909,6 +909,14 @@ RSpec.describe GitlabSchema.types['Project'] do
expect(forks).to contain_exactly(a_hash_including('fullPath' => fork_developer.full_path),
a_hash_including('fullPath' => fork_group_developer.full_path))
end
+
+ context 'when current user is not set' do
+ let(:user) { nil }
+
+ it 'does not return any forks' do
+ expect(forks.count).to eq(0)
+ end
+ end
end
end
end
diff --git a/spec/graphql/types/root_storage_statistics_type_spec.rb b/spec/graphql/types/root_storage_statistics_type_spec.rb
index 56f58825db0..00f4092baf4 100644
--- a/spec/graphql/types/root_storage_statistics_type_spec.rb
+++ b/spec/graphql/types/root_storage_statistics_type_spec.rb
@@ -5,11 +5,11 @@ require 'spec_helper'
RSpec.describe GitlabSchema.types['RootStorageStatistics'] do
specify { expect(described_class.graphql_name).to eq('RootStorageStatistics') }
- it 'has all the required fields' do
- expect(described_class).to have_graphql_fields(:storage_size, :repository_size, :lfs_objects_size,
+ it 'has the expected fields' do
+ expect(described_class).to include_graphql_fields(:storage_size, :repository_size, :lfs_objects_size,
:build_artifacts_size, :packages_size, :wiki_size, :snippets_size,
:pipeline_artifacts_size, :uploads_size, :dependency_proxy_size,
- :container_registry_size, :registry_size_estimated)
+ :container_registry_size, :container_registry_size_is_estimated, :registry_size_estimated)
end
specify { expect(described_class).to require_graphql_authorizations(:read_statistics) }
diff --git a/spec/graphql/types/user_type_spec.rb b/spec/graphql/types/user_type_spec.rb
index 777972df88b..af0f8a86b6c 100644
--- a/spec/graphql/types/user_type_spec.rb
+++ b/spec/graphql/types/user_type_spec.rb
@@ -55,6 +55,8 @@ RSpec.describe GitlabSchema.types['User'], feature_category: :user_profile do
organization
jobTitle
createdAt
+ pronouns
+ ide
]
expect(described_class).to include_graphql_fields(*expected_fields)
@@ -77,13 +79,13 @@ RSpec.describe GitlabSchema.types['User'], feature_category: :user_profile do
let(:username) { requested_user.username }
let(:query) do
- %(
+ <<~GQL
query {
user(username: "#{username}") {
name
}
}
- )
+ GQL
end
subject(:user_name) { GitlabSchema.execute(query, context: { current_user: current_user }).as_json.dig('data', 'user', 'name') }
@@ -254,4 +256,40 @@ RSpec.describe GitlabSchema.types['User'], feature_category: :user_profile do
is_expected.to have_graphql_type(Types::Users::NamespaceCommitEmailType.connection_type)
end
end
+
+ describe 'ide field' do
+ subject { described_class.fields['ide'] }
+
+ it 'returns ide' do
+ is_expected.to have_graphql_type(Types::IdeType)
+ end
+
+ context 'code suggestions enabled' do
+ let(:current_user) { create(:user) }
+ let(:query) do
+ <<~GQL
+ query {
+ currentUser {
+ ide {
+ codeSuggestionsEnabled
+ }
+ }
+ }
+ GQL
+ end
+
+ subject(:code_suggestions_enabled) do
+ GitlabSchema.execute(query, context: { current_user: current_user })
+ .as_json
+ .dig('data', 'currentUser', 'ide', 'codeSuggestionsEnabled')
+ end
+
+ it 'returns code suggestions enabled' do
+ allow(current_user).to receive(:can?).with(:access_code_suggestions).and_return(true)
+
+ expect(current_user).to receive(:can?).with(:access_code_suggestions).and_return(true)
+ expect(code_suggestions_enabled).to be true
+ end
+ end
+ end
end