diff --git a/ee/lib/ee/gitlab/quick_actions/merge_request_actions.rb b/ee/lib/ee/gitlab/quick_actions/merge_request_actions.rb index 20370904a0dc752d1ba9f368daed06b4fc8ec33e..f082a04548a992ea1e359c4557e1fa2b719ec9b0 100644 --- a/ee/lib/ee/gitlab/quick_actions/merge_request_actions.rb +++ b/ee/lib/ee/gitlab/quick_actions/merge_request_actions.rb @@ -48,6 +48,20 @@ def process_reviewer_users_message ::Ai::CodeReviewMessages.manual_error end + + override :auto_merge_strategy_copy + def auto_merge_strategy_copy(strategy, type) + case strategy + when ::EE::AutoMergeService::STRATEGY_MERGE_TRAIN + case type + when :desc then _('Add to merge train') + when :explanation then _('Adds this merge request to merge train.') + when :feedback then _('Added to merge train.') + end + else + super + end + end end end end diff --git a/ee/spec/lib/ee/gitlab/quick_actions/merge_request_actions_spec.rb b/ee/spec/lib/ee/gitlab/quick_actions/merge_request_actions_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..6df560fb9da7428074d890c1f345fa967d180400 --- /dev/null +++ b/ee/spec/lib/ee/gitlab/quick_actions/merge_request_actions_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::QuickActions::MergeRequestActions, feature_category: :code_review_workflow do + describe '#auto_merge_strategy_copy' do + let(:quick_action) do + Class.new do + include Gitlab::QuickActions::MergeRequestActions + end.new + end + + describe 'merge_train strategy' do + let(:strategy) { EE::AutoMergeService::STRATEGY_MERGE_TRAIN } + let(:expected_description) { 'Add to merge train' } + let(:expected_explanation) { 'Adds this merge request to merge train.' } + let(:expected_feedback) { 'Added to merge train.' } + + it_behaves_like 'auto_merge_strategy_copy' + end + end +end \ No newline at end of file diff --git a/ee/spec/services/quick_actions/interpret_service_spec.rb b/ee/spec/services/quick_actions/interpret_service_spec.rb index fa5ec702dab749ce7c2f4b62e3e432367988a06a..6fe5a9259c9c7d9781a376370898106a4a1075a6 100644 --- a/ee/spec/services/quick_actions/interpret_service_spec.rb +++ b/ee/spec/services/quick_actions/interpret_service_spec.rb @@ -1354,7 +1354,7 @@ expect(updates).to eq(merge: merge_request.diff_head_sha) - expect(message).to eq('Scheduled to merge this merge request (Merge when checks pass).') + expect(message).to eq('Set to auto-merge.') end end end @@ -1380,7 +1380,7 @@ expect(updates).to eq(merge: issuable.diff_head_sha) - expect(message).to eq('Scheduled to merge this merge request (Merge when checks pass).') + expect(message).to eq('Set to auto-merge.') end end diff --git a/lib/gitlab/quick_actions/merge_request_actions.rb b/lib/gitlab/quick_actions/merge_request_actions.rb index d97d375fc09709ee9968ecc4626e546b985d5a64..0acc1046c365b5b6e65fa1982d2aa097ca696449 100644 --- a/lib/gitlab/quick_actions/merge_request_actions.rb +++ b/lib/gitlab/quick_actions/merge_request_actions.rb @@ -19,15 +19,15 @@ module MergeRequestActions # /merge # desc do - if preferred_strategy = preferred_auto_merge_strategy(quick_action_target) - _("Merge automatically (%{strategy})") % { strategy: preferred_strategy.humanize } + if strategy = preferred_auto_merge_strategy(quick_action_target) + auto_merge_strategy_copy(strategy, :desc) else _("Merge immediately") end end explanation do - if preferred_strategy = preferred_auto_merge_strategy(quick_action_target) - _("Schedules to merge this merge request (%{strategy}).") % { strategy: preferred_strategy.humanize } + if strategy = preferred_auto_merge_strategy(quick_action_target) + auto_merge_strategy_copy(strategy, :explanation) else _('Merges this merge request immediately.') end @@ -37,8 +37,8 @@ module MergeRequestActions _("The `/merge` quick action requires the SHA of the head of the branch.") elsif params[:merge_request_diff_head_sha] != quick_action_target.diff_head_sha _("Branch has been updated since the merge was requested.") - elsif preferred_strategy = preferred_auto_merge_strategy(quick_action_target) - _("Scheduled to merge this merge request (%{strategy}).") % { strategy: preferred_strategy.humanize } + elsif strategy = preferred_auto_merge_strategy(quick_action_target) + auto_merge_strategy_copy(strategy, :feedback) else _('Merged this merge request.') end @@ -548,6 +548,23 @@ def reviewers_to_remove?(updates) quick_action_target.reviewers.any? || updates&.dig(:reviewer_ids)&.any? end + def auto_merge_strategy_copy(strategy, type) + case strategy + when AutoMergeService::STRATEGY_MERGE_WHEN_CHECKS_PASS + case type + when :desc then _('Set to auto-merge') + when :explanation then _('Sets this merge request to auto-merge when ready.') + when :feedback then _('Set to auto-merge.') + end + when AutoMergeService::STRATEGY_ADD_TO_MERGE_TRAIN_WHEN_CHECKS_PASS + case type + when :desc then _('Add to merge train when ready') + when :explanation then _('Adds this merge request to merge train when ready.') + when :feedback then _('Set to add to merge train when ready.') + end + end + end + def merge_orchestration_service @merge_orchestration_service ||= ::MergeRequests::MergeOrchestrationService.new(project, current_user) end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 6d9474e9cfbe3ead00022f06584f5b8f799477bc..3862fcd15895fda91a74a9bf74b663cb6e7f0062 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -4785,6 +4785,9 @@ msgstr "" msgid "Add to merge train when all merge checks pass" msgstr "" +msgid "Add to merge train when ready" +msgstr "" + msgid "Add to review" msgstr "" @@ -4881,6 +4884,9 @@ msgstr "" msgid "Added in this version" msgstr "" +msgid "Added to merge train." +msgstr "" + msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission." msgstr "" @@ -4940,6 +4946,12 @@ msgstr "" msgid "Adds email participants that don't have a GitLab account." msgstr "" +msgid "Adds this merge request to merge train when ready." +msgstr "" + +msgid "Adds this merge request to merge train." +msgstr "" + msgid "AdherenceReport|%{pendingCount}/%{totalCount} control is pending" msgid_plural "AdherenceReport|%{pendingCount}/%{totalCount} controls are pending" msgstr[0] "" @@ -41699,9 +41711,6 @@ msgstr "" msgid "Merge Requests merged" msgstr "" -msgid "Merge automatically (%{strategy})" -msgstr "" - msgid "Merge blocked: Merge all open dependent merge requests, and remove all closed dependencies." msgstr "" @@ -59023,18 +59032,12 @@ msgstr "" msgid "Scheduled pipelines cannot run more frequently than once per %{limit} minutes. A pipeline configured to run more frequently only starts after %{limit} minutes have elapsed since the last time it ran." msgstr "" -msgid "Scheduled to merge this merge request (%{strategy})." -msgstr "" - msgid "ScheduledJob|delayed manual action (%{remainingTime})" msgstr "" msgid "Schedules" msgstr "" -msgid "Schedules to merge this merge request (%{strategy})." -msgstr "" - msgid "Scope" msgstr "" @@ -63962,9 +63965,15 @@ msgstr "" msgid "Set to 0 to disable timeout." msgstr "" +msgid "Set to add to merge train when ready." +msgstr "" + msgid "Set to auto-merge" msgstr "" +msgid "Set to auto-merge." +msgstr "" + msgid "Set up" msgstr "" @@ -64064,6 +64073,9 @@ msgstr "" msgid "Sets the severity" msgstr "" +msgid "Sets this merge request to auto-merge when ready." +msgstr "" + msgid "Sets time estimate to %{time_estimate}." msgstr "" diff --git a/spec/lib/gitlab/quick_actions/merge_request_actions_spec.rb b/spec/lib/gitlab/quick_actions/merge_request_actions_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..f1acf3e8f4717e1c0e1d695d8aa74b4234841245 --- /dev/null +++ b/spec/lib/gitlab/quick_actions/merge_request_actions_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::QuickActions::MergeRequestActions, feature_category: :code_review_workflow do + describe '#auto_merge_strategy_copy' do + let(:quick_action) do + Class.new do + include Gitlab::QuickActions::MergeRequestActions + end.new + end + + describe 'merge_when_checks_pass strategy' do + let(:strategy) { AutoMergeService::STRATEGY_MERGE_WHEN_CHECKS_PASS } + let(:expected_description) { 'Set to auto-merge' } + let(:expected_explanation) { 'Sets this merge request to auto-merge when ready.' } + let(:expected_feedback) { 'Set to auto-merge.' } + + it_behaves_like 'auto_merge_strategy_copy' + end + + describe 'add_to_merge_train_when_checks_pass strategy' do + let(:strategy) { AutoMergeService::STRATEGY_ADD_TO_MERGE_TRAIN_WHEN_CHECKS_PASS } + let(:expected_description) { 'Add to merge train when ready' } + let(:expected_explanation) { 'Adds this merge request to merge train when ready.' } + let(:expected_feedback) { 'Set to add to merge train when ready.' } + + it_behaves_like 'auto_merge_strategy_copy' + end + + describe 'unknown strategy' do + let(:strategy) { 'unknown_strategy' } + let(:expected_description) { nil } + let(:expected_explanation) { nil } + let(:expected_feedback) { nil } + + it_behaves_like 'auto_merge_strategy_copy' + end + + describe 'unknown type' do + let(:strategy) { AutoMergeService::STRATEGY_MERGE_WHEN_CHECKS_PASS } + + it 'returns nil for unknown type' do + expect(quick_action.auto_merge_strategy_copy(strategy, :unknown)).to be_nil + end + end + end +end \ No newline at end of file diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index b81ff4f7580adfd04a9e968f8764fb702aaa6ef0..bbc0a7469cfaee4f92cbe2a838071cab191720de 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -606,7 +606,7 @@ expect(updates).to eq(merge: merge_request.diff_head_sha) - expect(message).to eq(_('Scheduled to merge this merge request (Merge when checks pass).')) + expect(message).to eq(_('Set to auto-merge.')) end end diff --git a/spec/support/shared_examples/quick_actions/auto_merge_strategy_copy_shared_examples.rb b/spec/support/shared_examples/quick_actions/auto_merge_strategy_copy_shared_examples.rb new file mode 100644 index 0000000000000000000000000000000000000000..b5a908cd83b26777900d71f97e7fc013a148d565 --- /dev/null +++ b/spec/support/shared_examples/quick_actions/auto_merge_strategy_copy_shared_examples.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'auto_merge_strategy_copy' do + it 'returns correct desc copy' do + expect(quick_action.auto_merge_strategy_copy(strategy, :desc)) + .to eq(expected_description) + end + + it 'returns correct explanation copy' do + expect(quick_action.auto_merge_strategy_copy(strategy, :explanation)) + .to eq(expected_explanation) + end + + it 'returns correct feedback copy' do + expect(quick_action.auto_merge_strategy_copy(strategy, :feedback)) + .to eq(expected_feedback) + end +end diff --git a/spec/support/shared_examples/quick_actions/merge_request/merge_quick_action_shared_examples.rb b/spec/support/shared_examples/quick_actions/merge_request/merge_quick_action_shared_examples.rb index 2c59d85729c59b3817fc3d02c8c912e9a764204e..6a21ee282e75861e1a70c5c131c956a9fc20f39e 100644 --- a/spec/support/shared_examples/quick_actions/merge_request/merge_quick_action_shared_examples.rb +++ b/spec/support/shared_examples/quick_actions/merge_request/merge_quick_action_shared_examples.rb @@ -43,10 +43,6 @@ it 'schedules to merge the MR' do add_note("/merge") - expect(page).to( - have_content("Scheduled to merge this merge request (Merge when checks pass).") - ) - expect(merge_request.reload).to be_auto_merge_enabled expect(merge_request.reload).not_to be_merged end