diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-03 15:10:26 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-03 15:10:26 +0300 |
commit | 94822e35f8bfbca6f7b161e22f61b086efb51b2a (patch) | |
tree | 54cd209bc30fe9e7ff84c18a7ecbb1f5c7d0b52d /spec/requests | |
parent | f3189d2a01f0b44915b5d7a2301af1445f759c9f (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/requests')
4 files changed, 161 insertions, 0 deletions
diff --git a/spec/requests/api/graphql/ci/pipelines_spec.rb b/spec/requests/api/graphql/ci/pipelines_spec.rb index 6587061094d..1f47f678898 100644 --- a/spec/requests/api/graphql/ci/pipelines_spec.rb +++ b/spec/requests/api/graphql/ci/pipelines_spec.rb @@ -186,6 +186,69 @@ RSpec.describe 'Query.project(fullPath).pipelines' do end end + describe '.job_artifacts' do + let_it_be(:pipeline) { create(:ci_pipeline, project: project) } + let_it_be(:pipeline_job_1) { create(:ci_build, pipeline: pipeline, name: 'Job 1') } + let_it_be(:pipeline_job_artifact_1) { create(:ci_job_artifact, job: pipeline_job_1) } + let_it_be(:pipeline_job_2) { create(:ci_build, pipeline: pipeline, name: 'Job 2') } + let_it_be(:pipeline_job_artifact_2) { create(:ci_job_artifact, job: pipeline_job_2) } + + let(:path) { %i[project pipelines nodes jobArtifacts] } + + let(:query) do + %( + query { + project(fullPath: "#{project.full_path}") { + pipelines { + nodes { + jobArtifacts { + name + downloadPath + fileType + } + } + } + } + } + ) + end + + before do + post_graphql(query, current_user: user) + end + + it_behaves_like 'a working graphql query' + + it 'returns the job_artifacts of a pipeline' do + job_artifacts_graphql_data = graphql_data_at(*path).flatten + + expect( + job_artifacts_graphql_data.map { |pip| pip['name'] } + ).to contain_exactly(pipeline_job_artifact_1.filename, pipeline_job_artifact_2.filename) + end + + it 'avoids N+1 queries' do + first_user = create(:user) + second_user = create(:user) + + control_count = ActiveRecord::QueryRecorder.new do + post_graphql(query, current_user: first_user) + end + + pipeline_2 = create(:ci_pipeline, project: project) + pipeline_2_job_1 = create(:ci_build, pipeline: pipeline_2, name: 'Pipeline 2 Job 1') + create(:ci_job_artifact, job: pipeline_2_job_1) + pipeline_2_job_2 = create(:ci_build, pipeline: pipeline_2, name: 'Pipeline 2 Job 2') + create(:ci_job_artifact, job: pipeline_2_job_2) + + expect do + post_graphql(query, current_user: second_user) + end.not_to exceed_query_limit(control_count) + + expect(response).to have_gitlab_http_status(:ok) + end + end + describe '.jobs(securityReportTypes)' do let_it_be(:query) do %( diff --git a/spec/requests/api/graphql/namespace_query_spec.rb b/spec/requests/api/graphql/namespace_query_spec.rb new file mode 100644 index 00000000000..f7ee2bcb55d --- /dev/null +++ b/spec/requests/api/graphql/namespace_query_spec.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Query' do + include GraphqlHelpers + + let_it_be(:user) { create(:user) } + let_it_be(:other_user) { create(:user) } + + let_it_be(:group_namespace) { create(:group) } + let_it_be(:user_namespace) { create(:user_namespace, owner: user) } + let_it_be(:project_namespace) { create(:project_namespace, parent: group_namespace) } + + describe '.namespace' do + subject { post_graphql(query, current_user: current_user) } + + let(:current_user) { user } + + let(:query) { graphql_query_for(:namespace, { 'fullPath' => target_namespace.full_path }, all_graphql_fields_for('Namespace')) } + let(:query_result) { graphql_data['namespace'] } + + shared_examples 'retrieving a namespace' do + context 'authorised query' do + before do + subject + end + + it_behaves_like 'a working graphql query' + + it 'fetches the expected data' do + expect(query_result).to include( + 'fullPath' => target_namespace.full_path, + 'name' => target_namespace.name + ) + end + end + + context 'unauthorised query' do + before do + subject + end + + context 'anonymous user' do + let(:current_user) { nil } + + it 'does not retrieve the record' do + expect(query_result).to be_nil + end + end + + context 'the current user does not have permission' do + let(:current_user) { other_user } + + it 'does not retrieve the record' do + expect(query_result).to be_nil + end + end + end + end + + it_behaves_like 'retrieving a namespace' do + let(:target_namespace) { group_namespace } + + before do + group_namespace.add_developer(user) + end + end + + it_behaves_like 'retrieving a namespace' do + let(:target_namespace) { user_namespace } + end + + context 'does not retrieve project namespace' do + let(:target_namespace) { project_namespace } + + before do + subject + end + + it 'does not retrieve the record' do + expect(query_result).to be_nil + end + end + end +end diff --git a/spec/requests/api/group_debian_distributions_spec.rb b/spec/requests/api/group_debian_distributions_spec.rb index ec1912b72bf..f376c931d9a 100644 --- a/spec/requests/api/group_debian_distributions_spec.rb +++ b/spec/requests/api/group_debian_distributions_spec.rb @@ -26,6 +26,12 @@ RSpec.describe API::GroupDebianDistributions do it_behaves_like 'Debian repository read endpoint', 'GET request', :success, /^{.*"codename":"existing-codename",.*"components":\["existing-component"\],.*"architectures":\["all","existing-arch"\]/, authenticate_non_public: false end + describe 'GET groups/:id/-/debian_distributions/:codename/key.asc' do + let(:url) { "/groups/#{container.id}/-/debian_distributions/#{distribution.codename}/key.asc" } + + it_behaves_like 'Debian repository read endpoint', 'GET request', :success, /^-----BEGIN PGP PUBLIC KEY BLOCK-----/, authenticate_non_public: false + end + describe 'PUT groups/:id/-/debian_distributions/:codename' do let(:method) { :put } let(:url) { "/groups/#{container.id}/-/debian_distributions/#{distribution.codename}" } diff --git a/spec/requests/api/project_debian_distributions_spec.rb b/spec/requests/api/project_debian_distributions_spec.rb index de7362758f7..331d751b8e0 100644 --- a/spec/requests/api/project_debian_distributions_spec.rb +++ b/spec/requests/api/project_debian_distributions_spec.rb @@ -32,6 +32,12 @@ RSpec.describe API::ProjectDebianDistributions do it_behaves_like 'Debian repository read endpoint', 'GET request', :success, /^{.*"codename":"existing-codename\",.*"components":\["existing-component"\],.*"architectures":\["all","existing-arch"\]/, authenticate_non_public: false end + describe 'GET projects/:id/debian_distributions/:codename/key.asc' do + let(:url) { "/projects/#{container.id}/debian_distributions/#{distribution.codename}/key.asc" } + + it_behaves_like 'Debian repository read endpoint', 'GET request', :success, /^-----BEGIN PGP PUBLIC KEY BLOCK-----/, authenticate_non_public: false + end + describe 'PUT projects/:id/debian_distributions/:codename' do let(:method) { :put } let(:url) { "/projects/#{container.id}/debian_distributions/#{distribution.codename}" } |