diff options
Diffstat (limited to 'spec/requests/api/graphql/project')
13 files changed, 143 insertions, 38 deletions
diff --git a/spec/requests/api/graphql/project/alert_management/alert/todos_spec.rb b/spec/requests/api/graphql/project/alert_management/alert/todos_spec.rb new file mode 100644 index 00000000000..3a9077061ad --- /dev/null +++ b/spec/requests/api/graphql/project/alert_management/alert/todos_spec.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'getting Alert Management Alert Assignees' do + include GraphqlHelpers + + let_it_be(:project) { create(:project) } + let_it_be(:current_user) { create(:user) } + let_it_be(:alert) { create(:alert_management_alert, project: project) } + let_it_be(:other_alert) { create(:alert_management_alert, project: project) } + let_it_be(:todo) { create(:todo, :pending, target: alert, user: current_user, project: project) } + let_it_be(:other_todo) { create(:todo, :pending, target: other_alert, user: current_user, project: project) } + + let(:fields) do + <<~QUERY + nodes { + iid + todos { + nodes { + id + } + } + } + QUERY + end + + let(:graphql_query) do + graphql_query_for( + 'project', + { 'fullPath' => project.full_path }, + query_graphql_field('alertManagementAlerts', {}, fields) + ) + end + + let(:gql_alerts) { graphql_data.dig('project', 'alertManagementAlerts', 'nodes') } + let(:gql_todos) { gql_alerts.map { |gql_alert| [gql_alert['iid'], gql_alert['todos']['nodes']] }.to_h } + let(:gql_alert_todo) { gql_todos[alert.iid.to_s].first } + let(:gql_other_alert_todo) { gql_todos[other_alert.iid.to_s].first } + + before do + project.add_developer(current_user) + end + + it 'includes the correct metrics dashboard url' do + post_graphql(graphql_query, current_user: current_user) + + expect(gql_alert_todo['id']).to eq(todo.to_global_id.to_s) + expect(gql_other_alert_todo['id']).to eq(other_todo.to_global_id.to_s) + end +end diff --git a/spec/requests/api/graphql/project/alert_management/alert_status_counts_spec.rb b/spec/requests/api/graphql/project/alert_management/alert_status_counts_spec.rb index b62215f43fb..9fbf5aaa41f 100644 --- a/spec/requests/api/graphql/project/alert_management/alert_status_counts_spec.rb +++ b/spec/requests/api/graphql/project/alert_management/alert_status_counts_spec.rb @@ -6,8 +6,8 @@ RSpec.describe 'getting Alert Management Alert counts by status' do let_it_be(:project) { create(:project, :repository) } let_it_be(:current_user) { create(:user) } - let_it_be(:alert_1) { create(:alert_management_alert, :resolved, project: project) } - let_it_be(:alert_2) { create(:alert_management_alert, project: project) } + let_it_be(:alert_resolved) { create(:alert_management_alert, :resolved, project: project) } + let_it_be(:alert_triggered) { create(:alert_management_alert, project: project) } let_it_be(:other_project_alert) { create(:alert_management_alert) } let(:params) { {} } @@ -58,7 +58,7 @@ RSpec.describe 'getting Alert Management Alert counts by status' do end context 'with search criteria' do - let(:params) { { search: alert_1.title } } + let(:params) { { search: alert_resolved.title } } it_behaves_like 'a working graphql query' it 'returns the correct counts for each status' do diff --git a/spec/requests/api/graphql/project/alert_management/alerts_spec.rb b/spec/requests/api/graphql/project/alert_management/alerts_spec.rb index f050c6873f3..d3a2e6a1deb 100644 --- a/spec/requests/api/graphql/project/alert_management/alerts_spec.rb +++ b/spec/requests/api/graphql/project/alert_management/alerts_spec.rb @@ -4,12 +4,12 @@ require 'spec_helper' RSpec.describe 'getting Alert Management Alerts' do include GraphqlHelpers - let_it_be(:payload) { { 'custom' => { 'alert' => 'payload' } } } + let_it_be(:payload) { { 'custom' => { 'alert' => 'payload' }, 'runbook' => 'runbook' } } let_it_be(:project) { create(:project, :repository) } let_it_be(:current_user) { create(:user) } - let_it_be(:resolved_alert) { create(:alert_management_alert, :all_fields, :resolved, project: project, issue: nil, severity: :low) } - let_it_be(:triggered_alert) { create(:alert_management_alert, :all_fields, project: project, severity: :critical, payload: payload) } - let_it_be(:other_project_alert) { create(:alert_management_alert, :all_fields) } + let_it_be(:resolved_alert) { create(:alert_management_alert, :all_fields, :resolved, project: project, issue: nil, severity: :low).present } + let_it_be(:triggered_alert) { create(:alert_management_alert, :all_fields, project: project, severity: :critical, payload: payload).present } + let_it_be(:other_project_alert) { create(:alert_management_alert, :all_fields).present } let(:params) { {} } @@ -71,10 +71,13 @@ RSpec.describe 'getting Alert Management Alerts' do 'eventCount' => triggered_alert.events, 'startedAt' => triggered_alert.started_at.strftime('%Y-%m-%dT%H:%M:%SZ'), 'endedAt' => nil, - 'details' => { 'custom.alert' => 'payload' }, + 'details' => { 'custom.alert' => 'payload', 'runbook' => 'runbook' }, 'createdAt' => triggered_alert.created_at.strftime('%Y-%m-%dT%H:%M:%SZ'), 'updatedAt' => triggered_alert.updated_at.strftime('%Y-%m-%dT%H:%M:%SZ'), - 'metricsDashboardUrl' => nil + 'metricsDashboardUrl' => nil, + 'detailsUrl' => triggered_alert.details_url, + 'prometheusAlert' => nil, + 'runbook' => 'runbook' ) expect(second_alert).to include( diff --git a/spec/requests/api/graphql/project/container_expiration_policy_spec.rb b/spec/requests/api/graphql/project/container_expiration_policy_spec.rb index b064e4d43e9..dc16847a669 100644 --- a/spec/requests/api/graphql/project/container_expiration_policy_spec.rb +++ b/spec/requests/api/graphql/project/container_expiration_policy_spec.rb @@ -13,6 +13,7 @@ RSpec.describe 'getting a repository in a project' do #{all_graphql_fields_for('container_expiration_policy'.classify)} QUERY end + let(:query) do graphql_query_for( 'project', diff --git a/spec/requests/api/graphql/project/issue/designs/designs_spec.rb b/spec/requests/api/graphql/project/issue/designs/designs_spec.rb index e47c025f8b2..decab900a43 100644 --- a/spec/requests/api/graphql/project/issue/designs/designs_spec.rb +++ b/spec/requests/api/graphql/project/issue/designs/designs_spec.rb @@ -24,12 +24,14 @@ RSpec.describe 'Getting designs related to an issue' do } NODE end + let(:issue) { design.issue } let(:project) { issue.project } let(:query) { make_query } let(:design_collection) do graphql_data_at(:project, :issue, :design_collection) end + let(:design_response) do design_collection.dig('designs', 'edges').first['node'] end @@ -185,6 +187,7 @@ RSpec.describe 'Getting designs related to an issue' do } NODE end + let(:design_response) do design_collection['designs']['edges'] end diff --git a/spec/requests/api/graphql/project/issues_spec.rb b/spec/requests/api/graphql/project/issues_spec.rb index cdfff2f50d4..06e613a09bc 100644 --- a/spec/requests/api/graphql/project/issues_spec.rb +++ b/spec/requests/api/graphql/project/issues_spec.rb @@ -12,6 +12,7 @@ RSpec.describe 'getting an issue list for a project' do [create(:issue, project: project, discussion_locked: true), create(:issue, project: project)] end + let(:fields) do <<~QUERY edges { diff --git a/spec/requests/api/graphql/project/jira_import_spec.rb b/spec/requests/api/graphql/project/jira_import_spec.rb index 814965262b6..1cc30b95162 100644 --- a/spec/requests/api/graphql/project/jira_import_spec.rb +++ b/spec/requests/api/graphql/project/jira_import_spec.rb @@ -53,6 +53,7 @@ RSpec.describe 'query Jira import data' do } ) end + let(:jira_imports) { graphql_data.dig('project', 'jiraImports', 'nodes')} let(:jira_import_status) { graphql_data.dig('project', 'jiraImportStatus')} @@ -106,7 +107,7 @@ RSpec.describe 'query Jira import data' do let(:query) do %( query { - project(fullPath:"#{project.full_path}") { + project(fullPath: "#{project.full_path}") { jiraImports(first: 1) { nodes { jiraProjectKey @@ -132,7 +133,7 @@ RSpec.describe 'query Jira import data' do let(:query) do %( query { - project(fullPath:"#{project.full_path}") { + project(fullPath: "#{project.full_path}") { jiraImports(last: 1) { nodes { jiraProjectKey diff --git a/spec/requests/api/graphql/project/jira_projects_spec.rb b/spec/requests/api/graphql/project/jira_projects_spec.rb index d5f59711ab1..410d5b21505 100644 --- a/spec/requests/api/graphql/project/jira_projects_spec.rb +++ b/spec/requests/api/graphql/project/jira_projects_spec.rb @@ -8,7 +8,7 @@ RSpec.describe 'query Jira projects' do let_it_be(:current_user) { create(:user) } let_it_be(:project) { create(:project) } - include_context 'jira projects request context' + include_context 'Jira projects request context' let(:services) { graphql_data_at(:project, :services, :edges) } let(:jira_projects) { services.first.dig('node', 'projects', 'nodes') } diff --git a/spec/requests/api/graphql/project/merge_requests_spec.rb b/spec/requests/api/graphql/project/merge_requests_spec.rb index e2255fdb048..bb63a5994b0 100644 --- a/spec/requests/api/graphql/project/merge_requests_spec.rb +++ b/spec/requests/api/graphql/project/merge_requests_spec.rb @@ -171,4 +171,43 @@ RSpec.describe 'getting merge request listings nested in a project' do it_behaves_like 'searching with parameters' end + + describe 'fields' do + let(:requested_fields) { nil } + let(:extra_iid_for_second_query) { merge_request_c.iid.to_s } + let(:search_params) { { iids: [merge_request_a.iid.to_s, merge_request_b.iid.to_s] } } + + def execute_query + query = query_merge_requests(requested_fields) + post_graphql(query, current_user: current_user) + end + + context 'when requesting `commit_count`' do + let(:requested_fields) { [:commit_count] } + + it 'exposes `commit_count`' do + merge_request_a.metrics.update!(commits_count: 5) + + execute_query + + expect(results).to include(a_hash_including('commitCount' => 5)) + end + + include_examples 'N+1 query check' + end + + context 'when requesting `merged_at`' do + let(:requested_fields) { [:merged_at] } + + before do + # make the MRs "merged" + [merge_request_a, merge_request_b, merge_request_c].each do |mr| + mr.update_column(:state_id, MergeRequest.available_states[:merged]) + mr.metrics.update_column(:merged_at, Time.now) + end + end + + include_examples 'N+1 query check' + end + end end diff --git a/spec/requests/api/graphql/project/packages_spec.rb b/spec/requests/api/graphql/project/packages_spec.rb index 88f97f9256b..5df98ed1e6b 100644 --- a/spec/requests/api/graphql/project/packages_spec.rb +++ b/spec/requests/api/graphql/project/packages_spec.rb @@ -28,42 +28,40 @@ RSpec.describe 'getting a package list for a project' do ) end - context 'without the need for a license' do - context 'when user has access to the project' do - before do - project.add_reporter(current_user) - post_graphql(query, current_user: current_user) - end + context 'when user has access to the project' do + before do + project.add_reporter(current_user) + post_graphql(query, current_user: current_user) + end - it_behaves_like 'a working graphql query' + it_behaves_like 'a working graphql query' - it 'returns packages successfully' do - expect(packages_data[0]['node']['name']).to eq package.name - end + it 'returns packages successfully' do + expect(packages_data[0]['node']['name']).to eq package.name end + end - context 'when the user does not have access to the project/packages' do - before do - post_graphql(query, current_user: current_user) - end + context 'when the user does not have access to the project/packages' do + before do + post_graphql(query, current_user: current_user) + end - it_behaves_like 'a working graphql query' + it_behaves_like 'a working graphql query' - it 'returns nil' do - expect(graphql_data['project']).to be_nil - end + it 'returns nil' do + expect(graphql_data['project']).to be_nil end + end - context 'when the user is not autenthicated' do - before do - post_graphql(query) - end + context 'when the user is not autenthicated' do + before do + post_graphql(query) + end - it_behaves_like 'a working graphql query' + it_behaves_like 'a working graphql query' - it 'returns nil' do - expect(graphql_data['project']).to be_nil - end + it 'returns nil' do + expect(graphql_data['project']).to be_nil end end end diff --git a/spec/requests/api/graphql/project/pipeline_spec.rb b/spec/requests/api/graphql/project/pipeline_spec.rb index 57b9de25c3d..fef0e7e160c 100644 --- a/spec/requests/api/graphql/project/pipeline_spec.rb +++ b/spec/requests/api/graphql/project/pipeline_spec.rb @@ -29,4 +29,10 @@ RSpec.describe 'getting pipeline information nested in a project' do expect(pipeline_graphql_data).not_to be_nil end + + it 'contains configSource' do + post_graphql(query, current_user: current_user) + + expect(pipeline_graphql_data.dig('configSource')).to eq('UNKNOWN_SOURCE') + end end diff --git a/spec/requests/api/graphql/project/repository_spec.rb b/spec/requests/api/graphql/project/repository_spec.rb index bd719a69647..a4984688557 100644 --- a/spec/requests/api/graphql/project/repository_spec.rb +++ b/spec/requests/api/graphql/project/repository_spec.rb @@ -11,6 +11,7 @@ RSpec.describe 'getting a repository in a project' do #{all_graphql_fields_for('repository'.classify)} QUERY end + let(:query) do graphql_query_for( 'project', diff --git a/spec/requests/api/graphql/project/tree/tree_spec.rb b/spec/requests/api/graphql/project/tree/tree_spec.rb index bce63d57c38..f4cd316da96 100644 --- a/spec/requests/api/graphql/project/tree/tree_spec.rb +++ b/spec/requests/api/graphql/project/tree/tree_spec.rb @@ -15,6 +15,7 @@ RSpec.describe 'getting a tree in a project' do } QUERY end + let(:query) do graphql_query_for( 'project', |