diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-08 06:09:54 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-08 06:09:54 +0000 |
commit | f6cdec670b9b757fc2225a2c6627ab79765e5b8a (patch) | |
tree | 7a1fde030f117b69332d01b22deefd1c81fff458 /spec/graphql | |
parent | e2ee1eec50aa8df8543d7ecc585ec0ba5ee544ac (diff) | |
download | gitlab-ce-f6cdec670b9b757fc2225a2c6627ab79765e5b8a.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/graphql')
-rw-r--r-- | spec/graphql/resolvers/projects/services_resolver_spec.rb | 72 | ||||
-rw-r--r-- | spec/graphql/types/project_type_spec.rb | 14 | ||||
-rw-r--r-- | spec/graphql/types/projects/base_service_type_spec.rb | 13 | ||||
-rw-r--r-- | spec/graphql/types/projects/jira_service_type_spec.rb | 13 | ||||
-rw-r--r-- | spec/graphql/types/projects/service_type_spec.rb | 16 | ||||
-rw-r--r-- | spec/graphql/types/projects/services_enum_spec.rb | 15 |
6 files changed, 142 insertions, 1 deletions
diff --git a/spec/graphql/resolvers/projects/services_resolver_spec.rb b/spec/graphql/resolvers/projects/services_resolver_spec.rb new file mode 100644 index 00000000000..00045442ea0 --- /dev/null +++ b/spec/graphql/resolvers/projects/services_resolver_spec.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Resolvers::Projects::ServicesResolver do + include GraphqlHelpers + + describe '#resolve' do + let_it_be(:user) { create(:user) } + + context 'when project does not have services' do + let_it_be(:project) { create(:project, :private) } + + context 'when user cannot access services' do + context 'when anonymous user' do + it_behaves_like 'cannot access project services' + end + + context 'when user developer' do + before do + project.add_developer(user) + end + + it_behaves_like 'cannot access project services' + end + end + + context 'when user can read project services' do + before do + project.add_maintainer(user) + end + + it_behaves_like 'no project services' + end + end + + context 'when project has services' do + let_it_be(:project) { create(:project, :private) } + let_it_be(:jira_service) { create(:jira_service, project: project) } + + context 'when user cannot access services' do + context 'when anonymous user' do + it_behaves_like 'cannot access project services' + end + + context 'when user developer' do + before do + project.add_developer(user) + end + + it_behaves_like 'cannot access project services' + end + end + + context 'when user can read project services' do + before do + project.add_maintainer(user) + end + + it 'returns project services' do + services = resolve_services + + expect(services.size).to eq 1 + end + end + end + end + + def resolve_services(args = {}, context = { current_user: user }) + resolve(described_class, obj: project, args: args, ctx: context) + end +end diff --git a/spec/graphql/types/project_type_spec.rb b/spec/graphql/types/project_type_spec.rb index 0c8be50ed90..6ea852190c9 100644 --- a/spec/graphql/types/project_type_spec.rb +++ b/spec/graphql/types/project_type_spec.rb @@ -24,7 +24,7 @@ describe GitlabSchema.types['Project'] do namespace group statistics repository merge_requests merge_request issues issue pipelines removeSourceBranchAfterMerge sentryDetailedError snippets grafanaIntegration autocloseReferencedIssues suggestion_commit_message environments - boards jira_import_status jira_imports + boards jira_import_status jira_imports services ] expect(described_class).to include_graphql_fields(*expected_fields) @@ -84,4 +84,16 @@ describe GitlabSchema.types['Project'] do it { is_expected.to have_graphql_type(Types::BoardType.connection_type) } end + + describe 'jira_imports field' do + subject { described_class.fields['jiraImports'] } + + it { is_expected.to have_graphql_type(Types::JiraImportType.connection_type) } + end + + describe 'services field' do + subject { described_class.fields['services'] } + + it { is_expected.to have_graphql_type(Types::Projects::ServiceType.connection_type) } + end end diff --git a/spec/graphql/types/projects/base_service_type_spec.rb b/spec/graphql/types/projects/base_service_type_spec.rb new file mode 100644 index 00000000000..bda6022bf79 --- /dev/null +++ b/spec/graphql/types/projects/base_service_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe GitlabSchema.types['BaseService'] do + it { expect(described_class.graphql_name).to eq('BaseService') } + + it 'has basic expected fields' do + expect(described_class).to have_graphql_fields(:type, :active) + end + + it { expect(described_class).to require_graphql_authorizations(:admin_project) } +end diff --git a/spec/graphql/types/projects/jira_service_type_spec.rb b/spec/graphql/types/projects/jira_service_type_spec.rb new file mode 100644 index 00000000000..7f8fa6538e9 --- /dev/null +++ b/spec/graphql/types/projects/jira_service_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe GitlabSchema.types['JiraService'] do + it { expect(described_class.graphql_name).to eq('JiraService') } + + it 'has basic expected fields' do + expect(described_class).to have_graphql_fields(:type, :active) + end + + it { expect(described_class).to require_graphql_authorizations(:admin_project) } +end diff --git a/spec/graphql/types/projects/service_type_spec.rb b/spec/graphql/types/projects/service_type_spec.rb new file mode 100644 index 00000000000..ad30a4008bc --- /dev/null +++ b/spec/graphql/types/projects/service_type_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Types::Projects::ServiceType do + it { expect(described_class).to have_graphql_fields(:type, :active) } + + describe ".resolve_type" do + it 'resolves the corresponding type for objects' do + expect(described_class.resolve_type(build(:jira_service), {})).to eq(Types::Projects::Services::JiraServiceType) + expect(described_class.resolve_type(build(:service), {})).to eq(Types::Projects::Services::BaseServiceType) + expect(described_class.resolve_type(build(:alerts_service), {})).to eq(Types::Projects::Services::BaseServiceType) + expect(described_class.resolve_type(build(:custom_issue_tracker_service), {})).to eq(Types::Projects::Services::BaseServiceType) + end + end +end diff --git a/spec/graphql/types/projects/services_enum_spec.rb b/spec/graphql/types/projects/services_enum_spec.rb new file mode 100644 index 00000000000..aac4aae4f69 --- /dev/null +++ b/spec/graphql/types/projects/services_enum_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe GitlabSchema.types['ServiceType'] do + it { expect(described_class.graphql_name).to eq('ServiceType') } + + it 'exposes all the existing project services' do + expect(described_class.values.keys).to match_array(available_services_enum) + end +end + +def available_services_enum + ::Service.services_types.map(&:underscore).map(&:upcase) +end |