summaryrefslogtreecommitdiff
path: root/spec/graphql
diff options
context:
space:
mode:
Diffstat (limited to 'spec/graphql')
-rw-r--r--spec/graphql/mutations/design_management/delete_spec.rb31
-rw-r--r--spec/graphql/mutations/pages/mark_onboarding_complete_spec.rb57
-rw-r--r--spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb4
-rw-r--r--spec/graphql/resolvers/ci/runners_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/container_repositories_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/todos_resolver_spec.rb (renamed from spec/graphql/resolvers/todo_resolver_spec.rb)2
-rw-r--r--spec/graphql/resolvers/users/groups_resolver_spec.rb19
-rw-r--r--spec/graphql/types/ci/detailed_status_type_spec.rb2
-rw-r--r--spec/graphql/types/ci/job_token_scope_type_spec.rb4
-rw-r--r--spec/graphql/types/ci/job_type_spec.rb2
-rw-r--r--spec/graphql/types/ci/runner_upgrade_status_type_enum_spec.rb17
-rw-r--r--spec/graphql/types/ci/status_action_type_spec.rb2
-rw-r--r--spec/graphql/types/ci/variable_type_enum_spec.rb9
-rw-r--r--spec/graphql/types/ci/variable_type_spec.rb11
-rw-r--r--spec/graphql/types/group_type_spec.rb2
-rw-r--r--spec/graphql/types/issue_type_enum_spec.rb4
-rw-r--r--spec/graphql/types/project_type_spec.rb3
-rw-r--r--spec/graphql/types/query_type_spec.rb1
-rw-r--r--spec/graphql/types/release_type_spec.rb3
-rw-r--r--spec/graphql/types/work_items/widget_interface_spec.rb1
-rw-r--r--spec/graphql/types/work_items/widgets/assignees_type_spec.rb11
-rw-r--r--spec/graphql/types/work_items/widgets/description_input_type_spec.rb9
-rw-r--r--spec/graphql/types/work_items/widgets/hierarchy_update_input_type_spec.rb9
23 files changed, 177 insertions, 30 deletions
diff --git a/spec/graphql/mutations/design_management/delete_spec.rb b/spec/graphql/mutations/design_management/delete_spec.rb
index 93fff5e5103..79196d4965d 100644
--- a/spec/graphql/mutations/design_management/delete_spec.rb
+++ b/spec/graphql/mutations/design_management/delete_spec.rb
@@ -86,9 +86,11 @@ RSpec.describe Mutations::DesignManagement::Delete do
end
end
- it 'runs no more than 29 queries' do
+ it 'runs no more than 30 queries' do
+ allow(Gitlab::Tracking).to receive(:event) # rubocop:disable RSpec/ExpectGitlabTracking
+
filenames.each(&:present?) # ignore setup
- # Queries: as of 2021-07-22
+ # Queries: as of 2022-06-15
# -------------
# 01. routing query
# 02. find project by id
@@ -106,20 +108,21 @@ RSpec.describe Mutations::DesignManagement::Delete do
# 15. current designs by filename and issue
# 16, 17 project.authorizations for user (same query as 5)
# 18. find route by id and source_type
+ # 19. find plan for standard context
# ------------- our queries are below:
- # 19. start transaction 1
- # 20. start transaction 2
- # 21. find version by sha and issue
- # 22. exists version with sha and issue?
- # 23. leave transaction 2
- # 24. create version with sha and issue
- # 25. create design-version links
- # 26. validate version.actions.present?
- # 27. validate version.issue.present?
- # 28. validate version.sha is unique
- # 29. leave transaction 1
+ # 20. start transaction 1
+ # 21. start transaction 2
+ # 22. find version by sha and issue
+ # 23. exists version with sha and issue?
+ # 24. leave transaction 2
+ # 25. create version with sha and issue
+ # 26. create design-version links
+ # 27. validate version.actions.present?
+ # 28. validate version.issue.present?
+ # 29. validate version.sha is unique
+ # 30. leave transaction 1
#
- expect { run_mutation }.not_to exceed_query_limit(29)
+ expect { run_mutation }.not_to exceed_query_limit(30)
end
end
diff --git a/spec/graphql/mutations/pages/mark_onboarding_complete_spec.rb b/spec/graphql/mutations/pages/mark_onboarding_complete_spec.rb
new file mode 100644
index 00000000000..c4ceecb9d46
--- /dev/null
+++ b/spec/graphql/mutations/pages/mark_onboarding_complete_spec.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Mutations::Pages::MarkOnboardingComplete do
+ let_it_be(:project) { create(:project, :public, :repository) }
+ let_it_be(:developer) { create(:user) }
+ let_it_be(:owner) { create(:user) }
+
+ let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }, field: nil) }
+
+ let(:mutation_arguments) do
+ {
+ project_path: project.full_path
+ }
+ end
+
+ before_all do
+ project.add_owner(owner)
+ project.add_developer(developer)
+ end
+
+ describe '#resolve' do
+ subject(:resolve) do
+ mutation.resolve(**mutation_arguments)
+ end
+
+ context 'when the current user has access to update pages' do
+ let(:current_user) { owner }
+
+ it 'calls mark_pages_onboarding_complete on the project' do
+ allow_next_instance_of(::Project) do |project|
+ expect(project).to receive(:mark_pages_onboarding_complete)
+ end
+ end
+
+ it 'returns onboarding_complete state' do
+ expect(resolve).to include(onboarding_complete: true)
+ end
+
+ it 'returns no errors' do
+ expect(resolve).to include(errors: [])
+ end
+ end
+
+ context "when the current user doesn't have access to update pages" do
+ let(:current_user) { developer }
+
+ it 'raises an error' do
+ expect { subject }.to raise_error(
+ Gitlab::Graphql::Errors::ResourceNotAvailable,
+ Gitlab::Graphql::Authorize::AuthorizeResource::RESOURCE_ACCESS_ERROR
+ )
+ 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 59616815de0..ac7cef20df4 100644
--- a/spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe Resolvers::Ci::JobTokenScopeResolver do
describe '#resolve' do
context 'with access to scope' do
before do
- project.add_user(current_user, :maintainer)
+ project.add_member(current_user, :maintainer)
end
it 'returns nil when scope is not enabled' do
@@ -51,7 +51,7 @@ RSpec.describe Resolvers::Ci::JobTokenScopeResolver do
context 'without access to scope' do
before do
- project.add_user(current_user, :developer)
+ project.add_member(current_user, :developer)
end
it 'generates an error' do
diff --git a/spec/graphql/resolvers/ci/runners_resolver_spec.rb b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
index b1f5f7b3e43..8586d359336 100644
--- a/spec/graphql/resolvers/ci/runners_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
@@ -52,6 +52,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver do
{
active: true,
status: 'active',
+ upgrade_status: 'recommended',
type: :instance_type,
tag_list: ['active_runner'],
search: 'abc',
@@ -63,6 +64,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver do
{
active: true,
status_status: 'active',
+ upgrade_status: 'recommended',
type_type: :instance_type,
tag_name: ['active_runner'],
preload: { tag_name: nil },
diff --git a/spec/graphql/resolvers/container_repositories_resolver_spec.rb b/spec/graphql/resolvers/container_repositories_resolver_spec.rb
index d7aa761320f..ed922259903 100644
--- a/spec/graphql/resolvers/container_repositories_resolver_spec.rb
+++ b/spec/graphql/resolvers/container_repositories_resolver_spec.rb
@@ -62,7 +62,7 @@ RSpec.describe Resolvers::ContainerRepositoriesResolver do
context 'with authorized user' do
before do
- group.add_user(user, :maintainer)
+ group.add_member(user, :maintainer)
end
context 'when the object is a project' do
diff --git a/spec/graphql/resolvers/todo_resolver_spec.rb b/spec/graphql/resolvers/todos_resolver_spec.rb
index 0760935a2fe..40ca2de0385 100644
--- a/spec/graphql/resolvers/todo_resolver_spec.rb
+++ b/spec/graphql/resolvers/todos_resolver_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Resolvers::TodoResolver do
+RSpec.describe Resolvers::TodosResolver do
include GraphqlHelpers
include DesignManagementTestHelpers
diff --git a/spec/graphql/resolvers/users/groups_resolver_spec.rb b/spec/graphql/resolvers/users/groups_resolver_spec.rb
index bbe9b6371cf..1e0e001fbf7 100644
--- a/spec/graphql/resolvers/users/groups_resolver_spec.rb
+++ b/spec/graphql/resolvers/users/groups_resolver_spec.rb
@@ -12,6 +12,7 @@ RSpec.describe Resolvers::Users::GroupsResolver do
let_it_be(:private_maintainer_group) { create(:group, :private, name: 'b private maintainer', path: 'b-private-maintainer') }
let_it_be(:public_developer_group) { create(:group, project_creation_level: nil, name: 'c public developer', path: 'c-public-developer') }
let_it_be(:public_maintainer_group) { create(:group, name: 'a public maintainer', path: 'a-public-maintainer') }
+ let_it_be(:public_owner_group) { create(:group, name: 'a public owner', path: 'a-public-owner') }
subject(:resolved_items) { resolve_groups(args: group_arguments, current_user: current_user, obj: resolver_object) }
@@ -24,6 +25,7 @@ RSpec.describe Resolvers::Users::GroupsResolver do
private_maintainer_group.add_maintainer(user)
public_developer_group.add_developer(user)
public_maintainer_group.add_maintainer(user)
+ public_owner_group.add_owner(user)
end
context 'when resolver object is current user' do
@@ -34,6 +36,7 @@ RSpec.describe Resolvers::Users::GroupsResolver do
is_expected.to match(
[
public_maintainer_group,
+ public_owner_group,
private_maintainer_group,
public_developer_group
]
@@ -41,10 +44,25 @@ RSpec.describe Resolvers::Users::GroupsResolver do
end
end
+ context 'when permission is :transfer_projects' do
+ let(:group_arguments) { { permission_scope: :transfer_projects } }
+
+ specify do
+ is_expected.to match(
+ [
+ public_maintainer_group,
+ public_owner_group,
+ private_maintainer_group
+ ]
+ )
+ end
+ end
+
specify do
is_expected.to match(
[
public_maintainer_group,
+ public_owner_group,
private_maintainer_group,
public_developer_group,
guest_group
@@ -82,6 +100,7 @@ RSpec.describe Resolvers::Users::GroupsResolver do
is_expected.to match(
[
public_maintainer_group,
+ public_owner_group,
private_maintainer_group,
public_developer_group,
guest_group
diff --git a/spec/graphql/types/ci/detailed_status_type_spec.rb b/spec/graphql/types/ci/detailed_status_type_spec.rb
index 0c05227aec2..686461cb9a5 100644
--- a/spec/graphql/types/ci/detailed_status_type_spec.rb
+++ b/spec/graphql/types/ci/detailed_status_type_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe Types::Ci::DetailedStatusType do
:label, :text, :tooltip, :action)
end
- let_it_be(:stage) { create(:ci_stage_entity, status: :skipped) }
+ let_it_be(:stage) { create(:ci_stage, status: :skipped) }
describe 'id field' do
it 'correctly renders the field' do
diff --git a/spec/graphql/types/ci/job_token_scope_type_spec.rb b/spec/graphql/types/ci/job_token_scope_type_spec.rb
index 43225b2089b..c1a3c4dd54d 100644
--- a/spec/graphql/types/ci/job_token_scope_type_spec.rb
+++ b/spec/graphql/types/ci/job_token_scope_type_spec.rb
@@ -38,7 +38,7 @@ RSpec.describe GitlabSchema.types['CiJobTokenScopeType'] do
context 'with access to scope' do
before do
- project.add_user(current_user, :maintainer)
+ project.add_member(current_user, :maintainer)
end
context 'when multiple projects in the allow list' do
@@ -46,7 +46,7 @@ RSpec.describe GitlabSchema.types['CiJobTokenScopeType'] do
context 'when linked projects are readable' do
before do
- link.target_project.add_user(current_user, :developer)
+ link.target_project.add_member(current_user, :developer)
end
it 'returns readable projects in scope' do
diff --git a/spec/graphql/types/ci/job_type_spec.rb b/spec/graphql/types/ci/job_type_spec.rb
index 655c3636883..bc9e64282bc 100644
--- a/spec/graphql/types/ci/job_type_spec.rb
+++ b/spec/graphql/types/ci/job_type_spec.rb
@@ -23,6 +23,7 @@ RSpec.describe Types::Ci::JobType do
id
kind
manual_job
+ manual_variables
name
needs
pipeline
@@ -33,6 +34,7 @@ RSpec.describe Types::Ci::JobType do
refName
refPath
retryable
+ retried
scheduledAt
schedulingType
shortSha
diff --git a/spec/graphql/types/ci/runner_upgrade_status_type_enum_spec.rb b/spec/graphql/types/ci/runner_upgrade_status_type_enum_spec.rb
index 81a852471b9..03c784dcbe7 100644
--- a/spec/graphql/types/ci/runner_upgrade_status_type_enum_spec.rb
+++ b/spec/graphql/types/ci/runner_upgrade_status_type_enum_spec.rb
@@ -3,11 +3,22 @@
require 'spec_helper'
RSpec.describe Types::Ci::RunnerUpgradeStatusTypeEnum do
+ let(:model_only_enum_values) { %w[not_processed] }
+ let(:expected_graphql_source_values) do
+ Ci::RunnerVersion.statuses.keys - model_only_enum_values
+ end
+
specify { expect(described_class.graphql_name).to eq('CiRunnerUpgradeStatusType') }
- it 'exposes all upgrade status values' do
- expect(described_class.values.keys).to eq(
- ['UNKNOWN'] + ::Gitlab::Ci::RunnerUpgradeCheck::STATUSES.map { |sym, _| sym.to_s.upcase }
+ it 'exposes all upgrade status values except not_processed' do
+ expect(described_class.values.keys).to match_array(
+ expected_graphql_source_values
+ .map(&:upcase)
+ .map { |v| v == 'INVALID_VERSION' ? 'INVALID' : v }
)
end
+
+ it 'exposes all upgrade status values except enum-only values' do
+ expect(described_class.values.values.map(&:value).map(&:to_s)).to match_array(expected_graphql_source_values)
+ end
end
diff --git a/spec/graphql/types/ci/status_action_type_spec.rb b/spec/graphql/types/ci/status_action_type_spec.rb
index 4c467bf240e..3f4b52610ae 100644
--- a/spec/graphql/types/ci/status_action_type_spec.rb
+++ b/spec/graphql/types/ci/status_action_type_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe Types::Ci::StatusActionType do
describe 'id field' do
it 'correctly renders the field' do
- stage = build(:ci_stage_entity, status: :skipped)
+ stage = build(:ci_stage, status: :skipped)
status = stage.detailed_status(stage.pipeline.user)
expected_id = "#{stage.class.name}-#{status.id}"
diff --git a/spec/graphql/types/ci/variable_type_enum_spec.rb b/spec/graphql/types/ci/variable_type_enum_spec.rb
new file mode 100644
index 00000000000..5604caebfff
--- /dev/null
+++ b/spec/graphql/types/ci/variable_type_enum_spec.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['CiVariableType'] do
+ it 'matches the keys of Ci::Variable.variable_types' do
+ expect(described_class.values.keys).to contain_exactly('ENV_VAR', 'FILE')
+ end
+end
diff --git a/spec/graphql/types/ci/variable_type_spec.rb b/spec/graphql/types/ci/variable_type_spec.rb
new file mode 100644
index 00000000000..a81e6adbab6
--- /dev/null
+++ b/spec/graphql/types/ci/variable_type_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['CiVariable'] do
+ it 'contains attributes related to CI variables' do
+ expect(described_class).to have_graphql_fields(
+ :id, :key, :value, :variable_type, :protected, :masked, :raw, :environment_scope
+ )
+ end
+end
diff --git a/spec/graphql/types/group_type_spec.rb b/spec/graphql/types/group_type_spec.rb
index 82703948cea..69c7eaf111f 100644
--- a/spec/graphql/types/group_type_spec.rb
+++ b/spec/graphql/types/group_type_spec.rb
@@ -23,7 +23,7 @@ RSpec.describe GitlabSchema.types['Group'] do
dependency_proxy_blob_count dependency_proxy_total_size
dependency_proxy_image_prefix dependency_proxy_image_ttl_policy
shared_runners_setting timelogs organizations contacts work_item_types
- recent_issue_boards
+ recent_issue_boards ci_variables
]
expect(described_class).to include_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/issue_type_enum_spec.rb b/spec/graphql/types/issue_type_enum_spec.rb
index 131e92aa5ed..8f4b6f3bf74 100644
--- a/spec/graphql/types/issue_type_enum_spec.rb
+++ b/spec/graphql/types/issue_type_enum_spec.rb
@@ -5,9 +5,9 @@ require 'spec_helper'
RSpec.describe Types::IssueTypeEnum do
specify { expect(described_class.graphql_name).to eq('IssueType') }
- it 'exposes all the existing issue type values except for task' do
+ it 'exposes all the existing issue type values' do
expect(described_class.values.keys).to match_array(
- %w[ISSUE INCIDENT TEST_CASE REQUIREMENT]
+ %w[ISSUE INCIDENT TEST_CASE REQUIREMENT TASK]
)
end
end
diff --git a/spec/graphql/types/project_type_spec.rb b/spec/graphql/types/project_type_spec.rb
index 2e994bf7820..ed93d31da0f 100644
--- a/spec/graphql/types/project_type_spec.rb
+++ b/spec/graphql/types/project_type_spec.rb
@@ -36,7 +36,8 @@ RSpec.describe GitlabSchema.types['Project'] do
pipeline_analytics squash_read_only sast_ci_configuration
cluster_agent cluster_agents agent_configurations
ci_template timelogs merge_commit_template squash_commit_template work_item_types
- recent_issue_boards ci_config_path_or_default packages_cleanup_policy
+ recent_issue_boards ci_config_path_or_default packages_cleanup_policy ci_variables
+ recent_issue_boards ci_config_path_or_default ci_variables
]
expect(described_class).to include_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/query_type_spec.rb b/spec/graphql/types/query_type_spec.rb
index 8b8c44c10f6..514d24a209e 100644
--- a/spec/graphql/types/query_type_spec.rb
+++ b/spec/graphql/types/query_type_spec.rb
@@ -30,6 +30,7 @@ RSpec.describe GitlabSchema.types['Query'] do
board_list
topics
gitpod_enabled
+ ci_variables
]
expect(described_class).to have_graphql_fields(*expected_fields).at_least
diff --git a/spec/graphql/types/release_type_spec.rb b/spec/graphql/types/release_type_spec.rb
index 0c05a68c5a6..a1dc8850f94 100644
--- a/spec/graphql/types/release_type_spec.rb
+++ b/spec/graphql/types/release_type_spec.rb
@@ -11,7 +11,8 @@ RSpec.describe GitlabSchema.types['Release'] do
description description_html
name milestones evidences author commit
assets links
- created_at released_at
+ created_at released_at upcoming_release
+ historical_release
]
expect(described_class).to include_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/work_items/widget_interface_spec.rb b/spec/graphql/types/work_items/widget_interface_spec.rb
index ee40bcc10ca..caf986c961f 100644
--- a/spec/graphql/types/work_items/widget_interface_spec.rb
+++ b/spec/graphql/types/work_items/widget_interface_spec.rb
@@ -17,6 +17,7 @@ RSpec.describe Types::WorkItems::WidgetInterface do
where(:widget_class, :widget_type_name) do
WorkItems::Widgets::Description | Types::WorkItems::Widgets::DescriptionType
WorkItems::Widgets::Hierarchy | Types::WorkItems::Widgets::HierarchyType
+ WorkItems::Widgets::Assignees | Types::WorkItems::Widgets::AssigneesType
end
with_them do
diff --git a/spec/graphql/types/work_items/widgets/assignees_type_spec.rb b/spec/graphql/types/work_items/widgets/assignees_type_spec.rb
new file mode 100644
index 00000000000..816e66f1db1
--- /dev/null
+++ b/spec/graphql/types/work_items/widgets/assignees_type_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Types::WorkItems::Widgets::AssigneesType do
+ it 'exposes the expected fields' do
+ expected_fields = %i[assignees allows_multiple_assignees can_invite_members type]
+
+ expect(described_class).to have_graphql_fields(*expected_fields)
+ end
+end
diff --git a/spec/graphql/types/work_items/widgets/description_input_type_spec.rb b/spec/graphql/types/work_items/widgets/description_input_type_spec.rb
new file mode 100644
index 00000000000..81c64bc38ab
--- /dev/null
+++ b/spec/graphql/types/work_items/widgets/description_input_type_spec.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe ::Types::WorkItems::Widgets::DescriptionInputType do
+ it { expect(described_class.graphql_name).to eq('WorkItemWidgetDescriptionInput') }
+
+ it { expect(described_class.arguments.keys).to match_array(%w[description]) }
+end
diff --git a/spec/graphql/types/work_items/widgets/hierarchy_update_input_type_spec.rb b/spec/graphql/types/work_items/widgets/hierarchy_update_input_type_spec.rb
new file mode 100644
index 00000000000..6221580605e
--- /dev/null
+++ b/spec/graphql/types/work_items/widgets/hierarchy_update_input_type_spec.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe ::Types::WorkItems::Widgets::HierarchyUpdateInputType do
+ it { expect(described_class.graphql_name).to eq('WorkItemWidgetHierarchyUpdateInput') }
+
+ it { expect(described_class.arguments.keys).to match_array(%w[parentId childrenIds]) }
+end