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/types')
-rw-r--r--spec/graphql/types/access_level_enum_spec.rb2
-rw-r--r--spec/graphql/types/achievements/achievement_type_spec.rb39
-rw-r--r--spec/graphql/types/alert_management/alert_type_spec.rb1
-rw-r--r--spec/graphql/types/ci/runner_countable_connection_type_spec.rb11
-rw-r--r--spec/graphql/types/description_version_type_spec.rb10
-rw-r--r--spec/graphql/types/design_management/design_type_spec.rb2
-rw-r--r--spec/graphql/types/issue_type_spec.rb51
-rw-r--r--spec/graphql/types/member_access_level_enum_spec.rb11
-rw-r--r--spec/graphql/types/namespace_type_spec.rb2
-rw-r--r--spec/graphql/types/notes/note_type_spec.rb5
-rw-r--r--spec/graphql/types/notes/noteable_interface_spec.rb1
-rw-r--r--spec/graphql/types/notes/system_note_metadata_type_spec.rb11
-rw-r--r--spec/graphql/types/query_type_spec.rb59
-rw-r--r--spec/graphql/types/repository/blob_type_spec.rb13
-rw-r--r--spec/graphql/types/snippet_type_spec.rb2
-rw-r--r--spec/graphql/types/time_tracking/timelog_connection_type_spec.rb44
-rw-r--r--spec/graphql/types/time_tracking/timelog_sort_enum_spec.rb20
-rw-r--r--spec/graphql/types/timelog_type_spec.rb2
-rw-r--r--spec/graphql/types/user_type_spec.rb21
-rw-r--r--spec/graphql/types/users/email_type_spec.rb18
-rw-r--r--spec/graphql/types/users/namespace_commit_email_type_spec.rb18
21 files changed, 303 insertions, 40 deletions
diff --git a/spec/graphql/types/access_level_enum_spec.rb b/spec/graphql/types/access_level_enum_spec.rb
index 1b379c56ff9..6a8d2e26e65 100644
--- a/spec/graphql/types/access_level_enum_spec.rb
+++ b/spec/graphql/types/access_level_enum_spec.rb
@@ -6,6 +6,6 @@ RSpec.describe GitlabSchema.types['AccessLevelEnum'] do
specify { expect(described_class.graphql_name).to eq('AccessLevelEnum') }
it 'exposes all the existing access levels' do
- expect(described_class.values.keys).to match_array(%w[NO_ACCESS MINIMAL_ACCESS GUEST REPORTER DEVELOPER MAINTAINER OWNER])
+ expect(described_class.values.keys).to include(*%w[NO_ACCESS MINIMAL_ACCESS GUEST REPORTER DEVELOPER MAINTAINER OWNER])
end
end
diff --git a/spec/graphql/types/achievements/achievement_type_spec.rb b/spec/graphql/types/achievements/achievement_type_spec.rb
new file mode 100644
index 00000000000..5c98753ac66
--- /dev/null
+++ b/spec/graphql/types/achievements/achievement_type_spec.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['Achievement'], feature_category: :users do
+ include GraphqlHelpers
+
+ let(:fields) do
+ %w[
+ id
+ namespace
+ name
+ avatar_url
+ description
+ revokeable
+ created_at
+ updated_at
+ ]
+ end
+
+ it { expect(described_class.graphql_name).to eq('Achievement') }
+ it { expect(described_class).to have_graphql_fields(fields) }
+ it { expect(described_class).to require_graphql_authorizations(:read_achievement) }
+
+ describe '#avatar_url' do
+ let(:object) { instance_double(Achievements::Achievement) }
+ let(:current_user) { instance_double(User) }
+
+ before do
+ allow(described_class).to receive(:authorized?).and_return(true)
+ end
+
+ it 'calls Achievement#avatar_url(only_path: false)' do
+ allow(object).to receive(:avatar_url).with(only_path: false)
+ resolve_field(:avatar_url, object, current_user: current_user)
+ expect(object).to have_received(:avatar_url).with(only_path: false).once
+ end
+ end
+end
diff --git a/spec/graphql/types/alert_management/alert_type_spec.rb b/spec/graphql/types/alert_management/alert_type_spec.rb
index c1df24ccb5c..4428fc0683a 100644
--- a/spec/graphql/types/alert_management/alert_type_spec.rb
+++ b/spec/graphql/types/alert_management/alert_type_spec.rb
@@ -38,6 +38,7 @@ RSpec.describe GitlabSchema.types['AlertManagementAlert'], feature_category: :in
prometheus_alert
environment
web_url
+ commenters
]
expect(described_class).to have_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/ci/runner_countable_connection_type_spec.rb b/spec/graphql/types/ci/runner_countable_connection_type_spec.rb
new file mode 100644
index 00000000000..49254ed0f93
--- /dev/null
+++ b/spec/graphql/types/ci/runner_countable_connection_type_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Types::Ci::RunnerCountableConnectionType, feature_category: :runner_fleet do
+ it 'contains attributes related to a runner connection' do
+ expected_fields = %w[count]
+
+ expect(described_class).to include_graphql_fields(*expected_fields)
+ end
+end
diff --git a/spec/graphql/types/description_version_type_spec.rb b/spec/graphql/types/description_version_type_spec.rb
new file mode 100644
index 00000000000..36bb1af7f7b
--- /dev/null
+++ b/spec/graphql/types/description_version_type_spec.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['DescriptionVersion'], feature_category: :team_planning do
+ it { expect(described_class).to have_graphql_field(:id) }
+ it { expect(described_class).to have_graphql_field(:description) }
+
+ specify { expect(described_class).to require_graphql_authorizations(:read_issuable) }
+end
diff --git a/spec/graphql/types/design_management/design_type_spec.rb b/spec/graphql/types/design_management/design_type_spec.rb
index 9c460e9058a..24b007a6b33 100644
--- a/spec/graphql/types/design_management/design_type_spec.rb
+++ b/spec/graphql/types/design_management/design_type_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe GitlabSchema.types['Design'] do
specify { expect(described_class.interfaces).to include(Types::TodoableInterface) }
it_behaves_like 'a GraphQL type with design fields' do
- let(:extra_design_fields) { %i[notes current_user_todos discussions versions web_url] }
+ let(:extra_design_fields) { %i[notes current_user_todos discussions versions web_url commenters] }
let_it_be(:design) { create(:design, :with_versions) }
let(:object_id) { GitlabSchema.id_from_object(design) }
let_it_be(:object_id_b) { GitlabSchema.id_from_object(create(:design, :with_versions)) }
diff --git a/spec/graphql/types/issue_type_spec.rb b/spec/graphql/types/issue_type_spec.rb
index dc444f90627..498625dc642 100644
--- a/spec/graphql/types/issue_type_spec.rb
+++ b/spec/graphql/types/issue_type_spec.rb
@@ -3,6 +3,9 @@
require 'spec_helper'
RSpec.describe GitlabSchema.types['Issue'] do
+ let_it_be_with_reload(:project) { create(:project, :public) }
+ let_it_be(:user) { create(:user) }
+
specify { expect(described_class).to expose_permissions_using(Types::PermissionTypes::Issue) }
specify { expect(described_class.graphql_name).to eq('Issue') }
@@ -26,8 +29,6 @@ RSpec.describe GitlabSchema.types['Issue'] do
end
describe 'pagination and count' do
- let_it_be(:user) { create(:user) }
- let_it_be(:project) { create(:project, :public) }
let_it_be(:now) { Time.now.change(usec: 0) }
let_it_be(:issues) { create_list(:issue, 10, project: project, created_at: now) }
@@ -130,8 +131,6 @@ RSpec.describe GitlabSchema.types['Issue'] do
end
describe "issue notes" do
- let(:user) { create(:user) }
- let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project) }
let(:confidential_issue) { create(:issue, :confidential, project: project) }
let(:private_note_body) { "mentioned in issue #{confidential_issue.to_reference(project)}" }
@@ -211,8 +210,6 @@ RSpec.describe GitlabSchema.types['Issue'] do
describe 'hidden', :enable_admin_mode do
let_it_be(:admin) { create(:user, :admin) }
let_it_be(:banned_user) { create(:user, :banned) }
- let_it_be(:user) { create(:user) }
- let_it_be(:project) { create(:project, :public) }
let_it_be(:hidden_issue) { create(:issue, project: project, author: banned_user) }
let_it_be(:visible_issue) { create(:issue, project: project, author: user) }
@@ -259,8 +256,6 @@ RSpec.describe GitlabSchema.types['Issue'] do
end
describe 'escalation_status' do
- let_it_be(:user) { create(:user) }
- let_it_be(:project) { create(:project, :public) }
let_it_be(:issue, reload: true) { create(:issue, project: project) }
let(:execute) { GitlabSchema.execute(query, context: { current_user: user }).as_json }
@@ -294,4 +289,44 @@ RSpec.describe GitlabSchema.types['Issue'] do
end
end
end
+
+ describe 'type' do
+ let_it_be(:issue) { create(:issue, project: project) }
+
+ let(:query) do
+ %(
+ query {
+ issue(id: "#{issue.to_gid}") {
+ type
+ }
+ }
+ )
+ end
+
+ subject(:execute) { GitlabSchema.execute(query, context: { current_user: user }).as_json }
+
+ context 'when the issue_type_uses_work_item_types_table feature flag is enabled' do
+ it 'gets the type field from the work_item_types table' do
+ expect_next_instance_of(::IssuePresenter) do |presented_issue|
+ expect(presented_issue).to receive_message_chain(:work_item_type, :base_type)
+ end
+
+ execute
+ end
+ end
+
+ context 'when the issue_type_uses_work_item_types_table feature flag is disabled' do
+ before do
+ stub_feature_flags(issue_type_uses_work_item_types_table: false)
+ end
+
+ it 'does not get the type field from the work_item_types table' do
+ expect_next_instance_of(::IssuePresenter) do |presented_issue|
+ expect(presented_issue).not_to receive(:work_item_type)
+ end
+
+ execute
+ end
+ end
+ end
end
diff --git a/spec/graphql/types/member_access_level_enum_spec.rb b/spec/graphql/types/member_access_level_enum_spec.rb
new file mode 100644
index 00000000000..54aef667695
--- /dev/null
+++ b/spec/graphql/types/member_access_level_enum_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Types::MemberAccessLevelEnum, feature_category: :subgroups do
+ specify { expect(described_class.graphql_name).to eq('MemberAccessLevel') }
+
+ it 'exposes all the existing access levels' do
+ expect(described_class.values.keys).to include(*%w[GUEST REPORTER DEVELOPER MAINTAINER OWNER])
+ end
+end
diff --git a/spec/graphql/types/namespace_type_spec.rb b/spec/graphql/types/namespace_type_spec.rb
index 168a6ba4eaa..d80235023ef 100644
--- a/spec/graphql/types/namespace_type_spec.rb
+++ b/spec/graphql/types/namespace_type_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe GitlabSchema.types['Namespace'] do
expected_fields = %w[
id name path full_name full_path description description_html visibility
lfs_enabled request_access_enabled projects root_storage_statistics shared_runners_setting
- timelog_categories
+ timelog_categories achievements
]
expect(described_class).to include_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/notes/note_type_spec.rb b/spec/graphql/types/notes/note_type_spec.rb
index cbf7f086dbe..a9e45b29eea 100644
--- a/spec/graphql/types/notes/note_type_spec.rb
+++ b/spec/graphql/types/notes/note_type_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe GitlabSchema.types['Note'] do
+RSpec.describe GitlabSchema.types['Note'], feature_category: :team_planning do
it 'exposes the expected fields' do
expected_fields = %i[
author
@@ -24,6 +24,9 @@ RSpec.describe GitlabSchema.types['Note'] do
updated_at
user_permissions
url
+ last_edited_at
+ last_edited_by
+ system_note_metadata
]
expect(described_class).to have_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/notes/noteable_interface_spec.rb b/spec/graphql/types/notes/noteable_interface_spec.rb
index be2c30aac72..e11dece60b8 100644
--- a/spec/graphql/types/notes/noteable_interface_spec.rb
+++ b/spec/graphql/types/notes/noteable_interface_spec.rb
@@ -7,6 +7,7 @@ RSpec.describe Types::Notes::NoteableInterface do
expected_fields = %i[
discussions
notes
+ commenters
]
expect(described_class).to have_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/notes/system_note_metadata_type_spec.rb b/spec/graphql/types/notes/system_note_metadata_type_spec.rb
new file mode 100644
index 00000000000..d243e926ff5
--- /dev/null
+++ b/spec/graphql/types/notes/system_note_metadata_type_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['SystemNoteMetadata'], feature_category: :team_planning do
+ it { expect(described_class).to have_graphql_field(:id) }
+ it { expect(described_class).to have_graphql_field(:action) }
+ it { expect(described_class).to have_graphql_field(:description_version) }
+
+ specify { expect(described_class).to require_graphql_authorizations(:read_note) }
+end
diff --git a/spec/graphql/types/query_type_spec.rb b/spec/graphql/types/query_type_spec.rb
index 514d24a209e..f06759e30c8 100644
--- a/spec/graphql/types/query_type_spec.rb
+++ b/spec/graphql/types/query_type_spec.rb
@@ -8,29 +8,40 @@ RSpec.describe GitlabSchema.types['Query'] do
end
it 'has the expected fields' do
- expected_fields = %i[
- project
- namespace
- group
- echo
- metadata
- current_user
- snippets
- design_management
- milestone
- user
- users
- issue
- merge_request
- usage_trends_measurements
- runner_platforms
- runner
- runners
- timelogs
- board_list
- topics
- gitpod_enabled
- ci_variables
+ expected_fields = [
+ :board_list,
+ :ci_application_settings,
+ :ci_config,
+ :ci_variables,
+ :container_repository,
+ :current_user,
+ :design_management,
+ :echo,
+ :gitpod_enabled,
+ :group,
+ :issue,
+ :issues,
+ :jobs,
+ :merge_request,
+ :metadata,
+ :milestone,
+ :namespace,
+ :package,
+ :project,
+ :projects,
+ :query_complexity,
+ :runner,
+ :runner_platforms,
+ :runner_setup,
+ :runners,
+ :snippets,
+ :timelogs,
+ :todo,
+ :topics,
+ :usage_trends_measurements,
+ :user,
+ :users,
+ :work_item
]
expect(described_class).to have_graphql_fields(*expected_fields).at_least
@@ -135,7 +146,7 @@ RSpec.describe GitlabSchema.types['Query'] do
subject { described_class.fields['timelogs'] }
it 'returns timelogs' do
- is_expected.to have_graphql_arguments(:startDate, :endDate, :startTime, :endTime, :username, :projectId, :groupId, :after, :before, :first, :last)
+ is_expected.to have_graphql_arguments(:startDate, :endDate, :startTime, :endTime, :username, :projectId, :groupId, :after, :before, :first, :last, :sort)
is_expected.to have_graphql_type(Types::TimelogType.connection_type)
is_expected.to have_graphql_resolver(Resolvers::TimelogResolver)
end
diff --git a/spec/graphql/types/repository/blob_type_spec.rb b/spec/graphql/types/repository/blob_type_spec.rb
index 787b5f4a311..9537fca7322 100644
--- a/spec/graphql/types/repository/blob_type_spec.rb
+++ b/spec/graphql/types/repository/blob_type_spec.rb
@@ -2,7 +2,9 @@
require 'spec_helper'
-RSpec.describe Types::Repository::BlobType do
+RSpec.describe Types::Repository::BlobType, feature_category: :source_code_management do
+ include GraphqlHelpers
+
specify { expect(described_class.graphql_name).to eq('RepositoryBlob') }
specify do
@@ -48,4 +50,13 @@ RSpec.describe Types::Repository::BlobType do
:language
).at_least
end
+
+ it 'handles blobs of huge size', :aggregate_failures do
+ huge_blob = Blob.new(double)
+ size = 10**10
+ allow(huge_blob).to receive_messages({ size: size, raw_size: size })
+
+ expect(resolve_field(:raw_size, huge_blob)).to eq(size)
+ expect(resolve_field(:size, huge_blob)).to eq(size)
+ end
end
diff --git a/spec/graphql/types/snippet_type_spec.rb b/spec/graphql/types/snippet_type_spec.rb
index f284d88180c..a46c51e0a27 100644
--- a/spec/graphql/types/snippet_type_spec.rb
+++ b/spec/graphql/types/snippet_type_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe GitlabSchema.types['Snippet'] do
:visibility_level, :created_at, :updated_at,
:web_url, :raw_url, :ssh_url_to_repo, :http_url_to_repo,
:notes, :discussions, :user_permissions,
- :description_html, :blobs]
+ :description_html, :blobs, :commenters]
expect(described_class).to have_graphql_fields(*expected_fields)
end
diff --git a/spec/graphql/types/time_tracking/timelog_connection_type_spec.rb b/spec/graphql/types/time_tracking/timelog_connection_type_spec.rb
new file mode 100644
index 00000000000..5cfe561b42c
--- /dev/null
+++ b/spec/graphql/types/time_tracking/timelog_connection_type_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['TimelogConnection'], feature_category: :team_planning do
+ it 'has the expected fields' do
+ expected_fields = %i[count page_info edges nodes total_spent_time]
+
+ expect(described_class).to have_graphql_fields(*expected_fields)
+ end
+
+ context 'for total_spent_time field' do
+ let_it_be(:current_user) { create(:user) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:project) { create(:project, :empty_repo, :public, group: group) }
+ let_it_be(:issue) { create(:issue, project: project) }
+
+ let_it_be(:timelog1) { create(:issue_timelog, issue: issue, time_spent: 1000) }
+ let_it_be(:timelog2) { create(:issue_timelog, issue: issue, time_spent: 1500) }
+ let_it_be(:timelog3) { create(:issue_timelog, issue: issue, time_spent: 2564) }
+
+ let(:query) do
+ %(
+ {
+ project(fullPath: "#{project.full_path}") {
+ timelogs {
+ totalSpentTime
+ }
+ }
+ }
+ )
+ end
+
+ let(:total_spent_time) { subject.dig('data', 'project', 'timelogs', 'totalSpentTime') }
+
+ subject { GitlabSchema.execute(query, context: { current_user: current_user }).as_json }
+
+ context 'when requested' do
+ it 'returns the total spent time' do
+ expect(total_spent_time).to eq(5064)
+ end
+ end
+ end
+end
diff --git a/spec/graphql/types/time_tracking/timelog_sort_enum_spec.rb b/spec/graphql/types/time_tracking/timelog_sort_enum_spec.rb
new file mode 100644
index 00000000000..ecc11256c85
--- /dev/null
+++ b/spec/graphql/types/time_tracking/timelog_sort_enum_spec.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['TimelogSort'], feature_category: :team_planning do
+ specify { expect(described_class.graphql_name).to eq('TimelogSort') }
+
+ it_behaves_like 'common sort values'
+
+ it 'exposes all the contact sort values' do
+ expect(described_class.values.keys).to include(
+ *%w[
+ SPENT_AT_ASC
+ SPENT_AT_DESC
+ TIME_SPENT_ASC
+ TIME_SPENT_DESC
+ ]
+ )
+ end
+end
diff --git a/spec/graphql/types/timelog_type_spec.rb b/spec/graphql/types/timelog_type_spec.rb
index 3a26ba89e04..59a0e373c5d 100644
--- a/spec/graphql/types/timelog_type_spec.rb
+++ b/spec/graphql/types/timelog_type_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe GitlabSchema.types['Timelog'] do
+RSpec.describe GitlabSchema.types['Timelog'], feature_category: :team_planning do
let_it_be(:fields) { %i[id spent_at time_spent user issue merge_request note summary userPermissions] }
it { expect(described_class.graphql_name).to eq('Timelog') }
diff --git a/spec/graphql/types/user_type_spec.rb b/spec/graphql/types/user_type_spec.rb
index dcf25ff0667..45cb960cf20 100644
--- a/spec/graphql/types/user_type_spec.rb
+++ b/spec/graphql/types/user_type_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe GitlabSchema.types['User'] do
+RSpec.describe GitlabSchema.types['User'], feature_category: :users do
specify { expect(described_class.graphql_name).to eq('User') }
specify do
@@ -20,7 +20,10 @@ RSpec.describe GitlabSchema.types['User'] do
name
username
email
+ emails
publicEmail
+ commitEmail
+ namespaceCommitEmails
avatarUrl
webUrl
webPath
@@ -226,4 +229,20 @@ RSpec.describe GitlabSchema.types['User'] do
is_expected.to have_graphql_type(Types::TimelogType.connection_type)
end
end
+
+ describe 'emails field' do
+ subject { described_class.fields['emails'] }
+
+ it 'returns user emails' do
+ is_expected.to have_graphql_type(Types::Users::EmailType.connection_type)
+ end
+ end
+
+ describe 'namespaceCommitEmails field' do
+ subject { described_class.fields['namespaceCommitEmails'] }
+
+ it 'returns user namespace_commit_emails' do
+ is_expected.to have_graphql_type(Types::Users::NamespaceCommitEmailType.connection_type)
+ end
+ end
end
diff --git a/spec/graphql/types/users/email_type_spec.rb b/spec/graphql/types/users/email_type_spec.rb
new file mode 100644
index 00000000000..fb484915428
--- /dev/null
+++ b/spec/graphql/types/users/email_type_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['Email'], feature_category: :users do
+ it 'has the correct fields' do
+ expected_fields = [
+ :id,
+ :email,
+ :confirmed_at,
+ :created_at,
+ :updated_at
+ ]
+
+ expect(described_class).to have_graphql_fields(*expected_fields)
+ end
+
+ specify { expect(described_class).to require_graphql_authorizations(:read_user_email_address) }
+end
diff --git a/spec/graphql/types/users/namespace_commit_email_type_spec.rb b/spec/graphql/types/users/namespace_commit_email_type_spec.rb
new file mode 100644
index 00000000000..ccab881676e
--- /dev/null
+++ b/spec/graphql/types/users/namespace_commit_email_type_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+RSpec.describe GitlabSchema.types['NamespaceCommitEmail'], feature_category: :users do
+ it 'has the correct fields' do
+ expected_fields = [
+ :id,
+ :email,
+ :namespace,
+ :created_at,
+ :updated_at
+ ]
+
+ expect(described_class).to have_graphql_fields(*expected_fields)
+ end
+
+ specify { expect(described_class).to require_graphql_authorizations(:read_user_email_address) }
+end