Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
		
							parent
							
								
									d6c434108c
								
							
						
					
					
						commit
						b96b6c1abd
					
				|  | @ -10,7 +10,7 @@ export default { | |||
| </script> | ||||
| 
 | ||||
| <template> | ||||
|   <div> | ||||
|   <div class="gl-display-flex gl-align-items-center"> | ||||
|     <span | ||||
|       class="dropdown-label-box gl-flex-shrink-0 gl-top-0 gl-mr-3" | ||||
|       :style="{ 'background-color': label.color }" | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ class Projects::MattermostsController < Projects::ApplicationController | |||
| 
 | ||||
|     if result | ||||
|       flash[:notice] = 'This service is now configured' | ||||
|       redirect_to edit_project_service_path(@project, integration) | ||||
|       redirect_to edit_project_integration_path(@project, integration) | ||||
|     else | ||||
|       flash[:alert] = message || 'Failed to configure service' | ||||
|       redirect_to new_project_mattermost_path(@project) | ||||
|  |  | |||
|  | @ -66,7 +66,7 @@ module Projects | |||
|         ) | ||||
| 
 | ||||
|         if @metric.persisted? | ||||
|           redirect_to edit_project_service_path(project, ::Integrations::Prometheus), | ||||
|           redirect_to edit_project_integration_path(project, ::Integrations::Prometheus), | ||||
|                       notice: _('Metric was successfully added.') | ||||
|         else | ||||
|           render 'new' | ||||
|  | @ -77,7 +77,7 @@ module Projects | |||
|         @metric = update_metrics_service(prometheus_metric).execute | ||||
| 
 | ||||
|         if @metric.persisted? | ||||
|           redirect_to edit_project_service_path(project, ::Integrations::Prometheus), | ||||
|           redirect_to edit_project_integration_path(project, ::Integrations::Prometheus), | ||||
|                       notice: _('Metric was successfully updated.') | ||||
|         else | ||||
|           render 'edit' | ||||
|  | @ -93,7 +93,7 @@ module Projects | |||
| 
 | ||||
|         respond_to do |format| | ||||
|           format.html do | ||||
|             redirect_to edit_project_service_path(project, ::Integrations::Prometheus), status: :see_other | ||||
|             redirect_to edit_project_integration_path(project, ::Integrations::Prometheus), status: :see_other | ||||
|           end | ||||
|           format.json do | ||||
|             head :ok | ||||
|  |  | |||
|  | @ -7,13 +7,13 @@ class Projects::ServiceHookLogsController < Projects::HookLogsController | |||
| 
 | ||||
|   def retry | ||||
|     execute_hook | ||||
|     redirect_to edit_project_service_path(@project, @integration) | ||||
|     redirect_to edit_project_integration_path(@project, @integration) | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def integration | ||||
|     @integration ||= @project.find_or_initialize_integration(params[:service_id]) | ||||
|     @integration ||= @project.find_or_initialize_integration(params[:integration_id]) | ||||
|   end | ||||
| 
 | ||||
|   override :hook | ||||
|  |  | |||
|  | @ -66,7 +66,7 @@ class Projects::ServicesController < Projects::ApplicationController | |||
|   private | ||||
| 
 | ||||
|   def redirect_path | ||||
|     safe_redirect_path(params[:redirect_to]).presence || edit_project_service_path(project, integration) | ||||
|     safe_redirect_path(params[:redirect_to]).presence || edit_project_integration_path(project, integration) | ||||
|   end | ||||
| 
 | ||||
|   def service_test_response | ||||
|  | @ -119,7 +119,7 @@ class Projects::ServicesController < Projects::ApplicationController | |||
|   end | ||||
| 
 | ||||
|   def redirect_deprecated_prometheus_integration | ||||
|     redirect_to edit_project_service_path(project, integration) if integration.is_a?(::Integrations::Prometheus) && Feature.enabled?(:settings_operations_prometheus_service, project) | ||||
|     redirect_to edit_project_integration_path(project, integration) if integration.is_a?(::Integrations::Prometheus) && Feature.enabled?(:settings_operations_prometheus_service, project) | ||||
|   end | ||||
| 
 | ||||
|   def set_deprecation_notice_for_prometheus_integration | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ module CustomMetricsHelper | |||
|     { | ||||
|       'custom-metrics-path' => url_for([project, metric]), | ||||
|       'metric-persisted' => metric.persisted?.to_s, | ||||
|       'edit-project-service-path' => edit_project_service_path(project, ::Integrations::Prometheus), | ||||
|       'edit-project-service-path' => edit_project_integration_path(project, ::Integrations::Prometheus), | ||||
|       'validate-query-path' => validate_query_project_prometheus_metrics_path(project), | ||||
|       'title' => metric.title.to_s, | ||||
|       'query' => metric.query.to_s, | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ module EnvironmentsHelper | |||
|     return {} unless project | ||||
| 
 | ||||
|     { | ||||
|       'settings_path'               => edit_project_service_path(project, 'prometheus'), | ||||
|       'settings_path'               => edit_project_integration_path(project, 'prometheus'), | ||||
|       'clusters_path'               => project_clusters_path(project), | ||||
|       'dashboards_endpoint'         => project_performance_monitoring_dashboards_path(project, format: :json), | ||||
|       'default_branch'              => project.default_branch, | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ module IntegrationsHelper | |||
| 
 | ||||
|   def scoped_integration_path(integration, project: nil, group: nil) | ||||
|     if project.present? | ||||
|       project_service_path(project, integration) | ||||
|       project_integration_path(project, integration) | ||||
|     elsif group.present? | ||||
|       group_settings_integration_path(group, integration) | ||||
|     else | ||||
|  | @ -39,7 +39,7 @@ module IntegrationsHelper | |||
| 
 | ||||
|   def scoped_edit_integration_path(integration, project: nil, group: nil) | ||||
|     if project.present? | ||||
|       edit_project_service_path(project, integration) | ||||
|       edit_project_integration_path(project, integration) | ||||
|     elsif group.present? | ||||
|       edit_group_settings_integration_path(group, integration) | ||||
|     else | ||||
|  | @ -53,7 +53,7 @@ module IntegrationsHelper | |||
| 
 | ||||
|   def scoped_test_integration_path(integration, project: nil, group: nil) | ||||
|     if project.present? | ||||
|       test_project_service_path(project, integration) | ||||
|       test_project_integration_path(project, integration) | ||||
|     elsif group.present? | ||||
|       test_group_settings_integration_path(group, integration) | ||||
|     else | ||||
|  |  | |||
|  | @ -1051,9 +1051,11 @@ module Ci | |||
|     end | ||||
| 
 | ||||
|     def drop_with_exit_code!(failure_reason, exit_code) | ||||
|       transaction do | ||||
|         conditionally_allow_failure!(exit_code) | ||||
|         drop!(failure_reason) | ||||
|       ::Gitlab::Database::QueryAnalyzers::PreventCrossDatabaseModification.allow_cross_database_modification_within_transaction(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/348495') do | ||||
|         transaction do | ||||
|           conditionally_allow_failure!(exit_code) | ||||
|           drop!(failure_reason) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,10 +4,10 @@ class ServiceHookPresenter < Gitlab::View::Presenter::Delegated | |||
|   presents ::ServiceHook, as: :service_hook | ||||
| 
 | ||||
|   def logs_details_path(log) | ||||
|     project_service_hook_log_path(integration.project, integration, log) | ||||
|     project_integration_hook_log_path(integration.project, integration, log) | ||||
|   end | ||||
| 
 | ||||
|   def logs_retry_path(log) | ||||
|     retry_project_service_hook_log_path(integration.project, integration, log) | ||||
|     retry_project_integration_hook_log_path(integration.project, integration, log) | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ | |||
|   %td | ||||
|     %strong | ||||
|       - if can?(current_user, :admin_project, project) | ||||
|         = link_to integration.title, edit_project_service_path(project, integration) | ||||
|         = link_to integration.title, edit_project_integration_path(project, integration) | ||||
|       - else | ||||
|         = integration.title | ||||
|   %td | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| .js-jira-import-root{ data: { project_path: @project.full_path, | ||||
|   issues_path: project_issues_path(@project), | ||||
|   jira_integration_path: edit_project_service_path(@project, :jira), | ||||
|   jira_integration_path: edit_project_integration_path(@project, :jira), | ||||
|   is_jira_configured: @project.jira_integration&.configured?.to_s, | ||||
|   in_progress_illustration: image_path('illustrations/export-import.svg'), | ||||
|   project_id: @project.id, | ||||
|  |  | |||
|  | @ -15,4 +15,4 @@ | |||
|   and try again. | ||||
| %hr | ||||
| .clearfix | ||||
|   = link_to 'Go back', edit_project_service_path(@project, @integration), class: 'gl-button btn btn-lg float-right' | ||||
|   = link_to 'Go back', edit_project_integration_path(@project, @integration), class: 'gl-button btn btn-lg float-right' | ||||
|  |  | |||
|  | @ -42,5 +42,5 @@ | |||
|   %hr | ||||
|   .clearfix | ||||
|     .float-right | ||||
|       = link_to _('Cancel'), edit_project_service_path(@project, @integration), class: 'gl-button btn btn-lg' | ||||
|       = link_to _('Cancel'), edit_project_integration_path(@project, @integration), class: 'gl-button btn btn-lg' | ||||
|       = f.submit 'Install', class: 'gl-button btn btn-success btn-lg' | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| - add_to_breadcrumbs _("Settings"), edit_project_path(@project) | ||||
| - add_to_breadcrumbs _("Integrations"), project_settings_integrations_path(@project) | ||||
| - add_to_breadcrumbs "Prometheus", edit_project_service_path(@project, ::Integrations::Prometheus) | ||||
| - add_to_breadcrumbs "Prometheus", edit_project_integration_path(@project, ::Integrations::Prometheus) | ||||
| - breadcrumb_title s_('Metrics|Edit metric') | ||||
| - page_title @metric.title, s_('Metrics|Edit metric') | ||||
| = render 'form', project: @project, metric: @metric | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| - add_to_breadcrumbs _("Settings"), edit_project_path(@project) | ||||
| - add_to_breadcrumbs _("Integrations"), project_settings_integrations_path(@project) | ||||
| - add_to_breadcrumbs "Prometheus", edit_project_service_path(@project, ::Integrations::Prometheus) | ||||
| - add_to_breadcrumbs "Prometheus", edit_project_integration_path(@project, ::Integrations::Prometheus) | ||||
| - breadcrumb_title s_('Metrics|New metric') | ||||
| - page_title s_('Metrics|New metric') | ||||
| = render 'form', project: @project, metric: @metric | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
|   - if integration.operating? | ||||
|     = sprite_icon('check', css_class: 'gl-text-green-500') | ||||
| 
 | ||||
| = form_for(integration, as: :service, url: scoped_integration_path(integration, project: @project, group: @group), method: :put, html: { class: 'gl-show-field-errors integration-settings-form js-integration-settings-form', data: { 'test-url' => test_project_service_path(@project, integration) } }) do |form| | ||||
| = form_for(integration, as: :service, url: scoped_integration_path(integration, project: @project, group: @group), method: :put, html: { class: 'gl-show-field-errors integration-settings-form js-integration-settings-form', data: { 'test-url' => test_project_integration_path(@project, integration) } }) do |form| | ||||
|   = render 'shared/service_settings', form: form, integration: integration | ||||
|   %input{ id: 'services_redirect_to', type: 'hidden', name: 'redirect_to', value: request.referer } | ||||
| 
 | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ | |||
|     = create_link | ||||
|     - if show_enable_confluence_integration?(@wiki.container) | ||||
|       = link_to s_('WikiEmpty|Enable the Confluence Wiki integration'), | ||||
|           edit_project_service_path(@project, :confluence), | ||||
|           edit_project_integration_path(@project, :confluence), | ||||
|           class: 'btn gl-button', title: s_('WikiEmpty|Enable the Confluence Wiki integration') | ||||
| 
 | ||||
| - elsif @project && can?(current_user, :read_issue, @project) | ||||
|  |  | |||
|  | @ -212,7 +212,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do | |||
|           end | ||||
|         end | ||||
| 
 | ||||
|         resources :services, constraints: { id: %r{[^/]+} }, only: [:edit, :update] do | ||||
|         resources :integrations, controller: :services, constraints: { id: %r{[^/]+} }, only: [:edit, :update] do | ||||
|           member do | ||||
|             put :test | ||||
|           end | ||||
|  |  | |||
|  | @ -2603,7 +2603,7 @@ Example response: | |||
| 
 | ||||
| ## Approvals | ||||
| 
 | ||||
| For approvals, please see [Merge Request Approvals](merge_request_approvals.md) | ||||
| For approvals, see [Merge Request Approvals](merge_request_approvals.md) | ||||
| 
 | ||||
| ## List merge request state events | ||||
| 
 | ||||
|  |  | |||
|  | @ -42,7 +42,7 @@ However, you can't import issues and merge requests this way. To retain all meta | |||
| merge requests, use the [import/export feature](../settings/import_export.md) | ||||
| to export projects from self-managed GitLab and import those projects into GitLab.com. All GitLab | ||||
| user associations (such as comment author) are changed to the user importing the project. For more | ||||
| information, see the prerequisites and imporant notes in these sections: | ||||
| information, see the prerequisites and important notes in these sections: | ||||
| 
 | ||||
| - [Export a project and its data](../settings/import_export.md#export-a-project-and-its-data). | ||||
| - [Import the project](../settings/import_export.md#import-a-project-and-its-data). | ||||
|  |  | |||
|  | @ -40,7 +40,7 @@ See [Prometheus cluster integration](../../clusters/integrations.md#prometheus-c | |||
| Integration with Prometheus requires the following: | ||||
| 
 | ||||
| - Prometheus must be configured to collect one of the [supported metrics](prometheus_library/index.md) | ||||
| - Each metric must be have a label to indicate the environment | ||||
| - Each metric must have a label to indicate the environment | ||||
| - GitLab must have network connectivity to the Prometheus server | ||||
| 
 | ||||
| #### Getting started | ||||
|  |  | |||
|  | @ -60,9 +60,9 @@ RSpec.describe Projects::MattermostsController do | |||
| 
 | ||||
|       it 'redirects to the new page' do | ||||
|         subject | ||||
|         service = project.integrations.last | ||||
|         integration = project.integrations.last | ||||
| 
 | ||||
|         expect(subject).to redirect_to(edit_project_service_url(project, service)) | ||||
|         expect(subject).to redirect_to(edit_project_integration_path(project, integration)) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  |  | |||
|  | @ -141,7 +141,7 @@ RSpec.describe Projects::Prometheus::MetricsController do | |||
| 
 | ||||
|         expect(flash[:notice]).to include('Metric was successfully added.') | ||||
| 
 | ||||
|         expect(response).to redirect_to(edit_project_service_path(project, ::Integrations::Prometheus)) | ||||
|         expect(response).to redirect_to(edit_project_integration_path(project, ::Integrations::Prometheus)) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|  | @ -157,6 +157,22 @@ RSpec.describe Projects::Prometheus::MetricsController do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'PUT #update' do | ||||
|     context 'metric is updated' do | ||||
|       let_it_be(:metric) { create(:prometheus_metric, project: project) } | ||||
| 
 | ||||
|       let(:metric_params) { { prometheus_metric: { title: 'new_title' }, id: metric.id } } | ||||
| 
 | ||||
|       it 'shows a success flash message' do | ||||
|         put :update, params: project_params(metric_params) | ||||
| 
 | ||||
|         expect(metric.reload.title).to eq('new_title') | ||||
|         expect(flash[:notice]).to include('Metric was successfully updated.') | ||||
|         expect(response).to redirect_to(edit_project_integration_path(project, ::Integrations::Prometheus)) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'DELETE #destroy' do | ||||
|     context 'format html' do | ||||
|       let!(:metric) { create(:prometheus_metric, project: project) } | ||||
|  | @ -164,7 +180,7 @@ RSpec.describe Projects::Prometheus::MetricsController do | |||
|       it 'destroys the metric' do | ||||
|         delete :destroy, params: project_params(id: metric.id) | ||||
| 
 | ||||
|         expect(response).to redirect_to(edit_project_service_path(project, ::Integrations::Prometheus)) | ||||
|         expect(response).to redirect_to(edit_project_integration_path(project, ::Integrations::Prometheus)) | ||||
|         expect(PrometheusMetric.find_by(id: metric.id)).to be_nil | ||||
|       end | ||||
|     end | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ RSpec.describe Projects::ServiceHookLogsController do | |||
|     { | ||||
|       namespace_id: project.namespace, | ||||
|       project_id: project, | ||||
|       service_id: integration.to_param, | ||||
|       integration_id: integration.to_param, | ||||
|       id: log.id | ||||
|     } | ||||
|   end | ||||
|  | @ -44,7 +44,7 @@ RSpec.describe Projects::ServiceHookLogsController do | |||
|     it 'executes the hook and redirects to the service form' do | ||||
|       expect_any_instance_of(ServiceHook).to receive(:execute) | ||||
|       expect_any_instance_of(described_class).to receive(:set_hook_execution_notice) | ||||
|       expect(subject).to redirect_to(edit_project_service_path(project, integration)) | ||||
|       expect(subject).to redirect_to(edit_project_integration_path(project, integration)) | ||||
|     end | ||||
| 
 | ||||
|     it 'renders a 404 if the hook does not exist' do | ||||
|  |  | |||
|  | @ -183,7 +183,7 @@ RSpec.describe Projects::ServicesController do | |||
|       let(:params) { project_params(service: integration_params) } | ||||
| 
 | ||||
|       let(:message) { 'Jira settings saved and active.' } | ||||
|       let(:redirect_url) { edit_project_service_path(project, integration) } | ||||
|       let(:redirect_url) { edit_project_integration_path(project, integration) } | ||||
| 
 | ||||
|       before do | ||||
|         stub_jira_integration_test | ||||
|  | @ -341,7 +341,7 @@ RSpec.describe Projects::ServicesController do | |||
|         it 'redirects user back to edit page with alert' do | ||||
|           put :update, params: project_params.merge(service: integration_params) | ||||
| 
 | ||||
|           expect(response).to redirect_to(edit_project_service_path(project, integration)) | ||||
|           expect(response).to redirect_to(edit_project_integration_path(project, integration)) | ||||
|           expected_alert = [ | ||||
|             "You can now manage your Prometheus settings on the", | ||||
|             %(<a href="#{project_settings_operations_path(project)}">Operations</a> page.), | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ RSpec.describe 'User activates Jira', :js do | |||
| 
 | ||||
|       it 'activates the Jira service' do | ||||
|         expect(page).to have_content('Jira settings saved and active.') | ||||
|         expect(current_path).to eq(edit_project_service_path(project, :jira)) | ||||
|         expect(current_path).to eq(edit_project_integration_path(project, :jira)) | ||||
|       end | ||||
| 
 | ||||
|       unless Gitlab.ee? | ||||
|  | @ -55,7 +55,7 @@ RSpec.describe 'User activates Jira', :js do | |||
|         click_test_then_save_integration | ||||
| 
 | ||||
|         expect(page).to have_content('Jira settings saved and active.') | ||||
|         expect(current_path).to eq(edit_project_service_path(project, :jira)) | ||||
|         expect(current_path).to eq(edit_project_integration_path(project, :jira)) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | @ -72,7 +72,7 @@ RSpec.describe 'User activates Jira', :js do | |||
| 
 | ||||
|     it 'saves but does not activate the Jira service' do | ||||
|       expect(page).to have_content('Jira settings saved, but not active.') | ||||
|       expect(current_path).to eq(edit_project_service_path(project, :jira)) | ||||
|       expect(current_path).to eq(edit_project_integration_path(project, :jira)) | ||||
|     end | ||||
| 
 | ||||
|     it 'does not show the Jira link in the menu' do | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ RSpec.describe 'User activates issue tracker', :js do | |||
| 
 | ||||
|         it 'activates the service' do | ||||
|           expect(page).to have_content("#{tracker} settings saved and active.") | ||||
|           expect(current_path).to eq(edit_project_service_path(project, tracker.parameterize(separator: '_'))) | ||||
|           expect(current_path).to eq(edit_project_integration_path(project, tracker.parameterize(separator: '_'))) | ||||
|         end | ||||
| 
 | ||||
|         it 'shows the link in the menu' do | ||||
|  | @ -58,7 +58,7 @@ RSpec.describe 'User activates issue tracker', :js do | |||
|           end | ||||
| 
 | ||||
|           expect(page).to have_content("#{tracker} settings saved and active.") | ||||
|           expect(current_path).to eq(edit_project_service_path(project, tracker.parameterize(separator: '_'))) | ||||
|           expect(current_path).to eq(edit_project_integration_path(project, tracker.parameterize(separator: '_'))) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|  | @ -73,7 +73,7 @@ RSpec.describe 'User activates issue tracker', :js do | |||
| 
 | ||||
|       it 'saves but does not activate the service' do | ||||
|         expect(page).to have_content("#{tracker} settings saved, but not active.") | ||||
|         expect(current_path).to eq(edit_project_service_path(project, tracker.parameterize(separator: '_'))) | ||||
|         expect(current_path).to eq(edit_project_integration_path(project, tracker.parameterize(separator: '_'))) | ||||
|       end | ||||
| 
 | ||||
|       it 'does not show the external tracker link in the menu' do | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ RSpec.describe 'Set up Mattermost slash commands', :js do | |||
|       let(:mattermost_enabled) { true } | ||||
| 
 | ||||
|       describe 'activation' do | ||||
|         let(:edit_path) { edit_project_service_path(project, :mattermost_slash_commands) } | ||||
|         let(:edit_path) { edit_project_integration_path(project, :mattermost_slash_commands) } | ||||
| 
 | ||||
|         include_examples 'user activates the Mattermost Slash Command integration' | ||||
|       end | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ RSpec.describe 'User activates Slack notifications', :js do | |||
|         pipeline_channel: 6, | ||||
|         wiki_page_channel: 7) | ||||
| 
 | ||||
|       visit(edit_project_service_path(project, integration)) | ||||
|       visit(edit_project_integration_path(project, integration)) | ||||
|     end | ||||
| 
 | ||||
|     it 'filters events by channel' do | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ RSpec.describe 'Slack slash commands', :js do | |||
|     click_active_checkbox | ||||
|     click_on 'Save' | ||||
| 
 | ||||
|     expect(current_path).to eq(edit_project_service_path(project, :slack_slash_commands)) | ||||
|     expect(current_path).to eq(edit_project_integration_path(project, :slack_slash_commands)) | ||||
|     expect(page).to have_content('Slack slash commands settings saved, but not active.') | ||||
|   end | ||||
| 
 | ||||
|  | @ -32,7 +32,7 @@ RSpec.describe 'Slack slash commands', :js do | |||
|     fill_in 'Token', with: 'token' | ||||
|     click_on 'Save' | ||||
| 
 | ||||
|     expect(current_path).to eq(edit_project_service_path(project, :slack_slash_commands)) | ||||
|     expect(current_path).to eq(edit_project_integration_path(project, :slack_slash_commands)) | ||||
|     expect(page).to have_content('Slack slash commands settings saved and active.') | ||||
|   end | ||||
| 
 | ||||
|  |  | |||
|  | @ -128,7 +128,7 @@ exports[`Dashboard template matches the default snapshot 1`] = ` | |||
|     emptynodatasvgpath="/images/illustrations/monitoring/no_data.svg" | ||||
|     emptyunabletoconnectsvgpath="/images/illustrations/monitoring/unable_to_connect.svg" | ||||
|     selectedstate="gettingStarted" | ||||
|     settingspath="/monitoring/monitor-project/-/services/prometheus/edit" | ||||
|     settingspath="/monitoring/monitor-project/-/integrations/prometheus/edit" | ||||
|   /> | ||||
| </div> | ||||
| `; | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ RSpec.describe EnvironmentsHelper do | |||
| 
 | ||||
|     it 'returns data' do | ||||
|       expect(metrics_data).to include( | ||||
|         'settings_path' => edit_project_service_path(project, 'prometheus'), | ||||
|         'settings_path' => edit_project_integration_path(project, 'prometheus'), | ||||
|         'clusters_path' => project_clusters_path(project), | ||||
|         'metrics_dashboard_base_path' => environment_metrics_path(environment), | ||||
|         'current_environment_name' => environment.name, | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ RSpec.describe OperationsHelper do | |||
|         expect(subject).to eq( | ||||
|           'alerts_setup_url' => help_page_path('operations/incident_management/integrations.md', anchor: 'configuration'), | ||||
|           'alerts_usage_url' => project_alert_management_index_path(project), | ||||
|           'prometheus_form_path' => project_service_path(project, prometheus_integration), | ||||
|           'prometheus_form_path' => project_integration_path(project, prometheus_integration), | ||||
|           'prometheus_reset_key_path' => reset_alerting_token_project_settings_operations_path(project), | ||||
|           'prometheus_authorization_key' => nil, | ||||
|           'prometheus_api_url' => nil, | ||||
|  |  | |||
|  | @ -5223,6 +5223,26 @@ RSpec.describe Ci::Build do | |||
|         it_behaves_like 'drops the build without changing allow_failure' | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when build is configured to be retried' do | ||||
|       let(:options) { { retry: 3 } } | ||||
| 
 | ||||
|       context 'when there is an MR attached to the pipeline and a failed job todo for that MR' do | ||||
|         let!(:merge_request) { create(:merge_request, source_project: project, author: user, head_pipeline: pipeline) } | ||||
|         let!(:todo) { create(:todo, :build_failed, user: user, project: project, author: user, target: merge_request) } | ||||
| 
 | ||||
|         before do | ||||
|           build.update!(user: user) | ||||
|           project.add_developer(user) | ||||
|         end | ||||
| 
 | ||||
|         it 'resolves the todo for the old failed build' do | ||||
|           expect do | ||||
|             drop_with_exit_code | ||||
|           end.to change { todo.reload.state }.from('pending').to('done') | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#exit_codes_defined?' do | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ RSpec.describe ServiceHookPresenter do | |||
|     subject { service_hook.present.logs_details_path(web_hook_log) } | ||||
| 
 | ||||
|     let(:expected_path) do | ||||
|       "/#{project.namespace.path}/#{project.name}/-/services/#{integration.to_param}/hook_logs/#{web_hook_log.id}" | ||||
|       "/#{project.namespace.path}/#{project.name}/-/integrations/#{integration.to_param}/hook_logs/#{web_hook_log.id}" | ||||
|     end | ||||
| 
 | ||||
|     it { is_expected.to eq(expected_path) } | ||||
|  | @ -22,7 +22,7 @@ RSpec.describe ServiceHookPresenter do | |||
|     subject { service_hook.present.logs_retry_path(web_hook_log) } | ||||
| 
 | ||||
|     let(:expected_path) do | ||||
|       "/#{project.namespace.path}/#{project.name}/-/services/#{integration.to_param}/hook_logs/#{web_hook_log.id}/retry" | ||||
|       "/#{project.namespace.path}/#{project.name}/-/integrations/#{integration.to_param}/hook_logs/#{web_hook_log.id}/retry" | ||||
|     end | ||||
| 
 | ||||
|     it { is_expected.to eq(expected_path) } | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ RSpec.describe WebHookLogPresenter do | |||
|       let(:web_hook) { create(:service_hook, integration: integration) } | ||||
|       let(:integration) { create(:drone_ci_integration, project: project) } | ||||
| 
 | ||||
|       it { is_expected.to eq(project_service_hook_log_path(project, integration, web_hook_log)) } | ||||
|       it { is_expected.to eq(project_integration_hook_log_path(project, integration, web_hook_log)) } | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|  | @ -41,7 +41,7 @@ RSpec.describe WebHookLogPresenter do | |||
|       let(:web_hook) { create(:service_hook, integration: integration) } | ||||
|       let(:integration) { create(:drone_ci_integration, project: project) } | ||||
| 
 | ||||
|       it { is_expected.to eq(retry_project_service_hook_log_path(project, integration, web_hook_log)) } | ||||
|       it { is_expected.to eq(retry_project_integration_hook_log_path(project, integration, web_hook_log)) } | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -188,13 +188,6 @@ RSpec.describe Ci::RetryBuildService do | |||
|         expect(new_build).to be_pending | ||||
|       end | ||||
| 
 | ||||
|       it 'resolves todos for old build that failed' do | ||||
|         expect(::MergeRequests::AddTodoWhenBuildFailsService) | ||||
|           .to receive_message_chain(:new, :close) | ||||
| 
 | ||||
|         service.execute(build) | ||||
|       end | ||||
| 
 | ||||
|       context 'when there are subsequent processables that are skipped' do | ||||
|         let!(:subsequent_build) do | ||||
|           create(:ci_build, :skipped, stage_idx: 2, | ||||
|  | @ -272,6 +265,17 @@ RSpec.describe Ci::RetryBuildService do | |||
|           expect(bridge.reload).to be_pending | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context 'when there is a failed job todo for the MR' do | ||||
|         let!(:merge_request) { create(:merge_request, source_project: project, author: user, head_pipeline: pipeline) } | ||||
|         let!(:todo) { create(:todo, :build_failed, user: user, project: project, author: user, target: merge_request) } | ||||
| 
 | ||||
|         it 'resolves the todo for the old failed build' do | ||||
|           expect do | ||||
|             service.execute(build) | ||||
|           end.to change { todo.reload.state }.from('pending').to('done') | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when user does not have ability to execute build' do | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue