diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js b/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js index 473e8a936fd854a6f77c370328ebfc4c7a81f856..9ce5448d86e598318bc758bdc1e7a403823f8c42 100644 --- a/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js +++ b/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js @@ -122,6 +122,7 @@ export default class MergeRequestStore { this.availableAutoMergeStrategies, ); this.ffOnlyEnabled = data.ff_only_enabled; + this.ffMergePossible = data.ff_merge_possible; this.isRemovingSourceBranch = this.isRemovingSourceBranch || false; this.mergeRequestState = data.state; this.isOpen = this.mergeRequestState === STATUS_OPEN; diff --git a/app/serializers/merge_request_poll_widget_entity.rb b/app/serializers/merge_request_poll_widget_entity.rb index cef3f4555df72dae418ac1a05efcfa5e75d31a33..3374cd4672929898e3213fd9bdaae8b4c2a401e8 100644 --- a/app/serializers/merge_request_poll_widget_entity.rb +++ b/app/serializers/merge_request_poll_widget_entity.rb @@ -15,6 +15,8 @@ class MergeRequestPollWidgetEntity < Grape::Entity merge_request.project.merge_requests_ff_only_enabled end + expose :ff_merge_possible?, as: :ff_merge_possible + # User entities expose :merge_user, using: UserEntity diff --git a/ee/app/assets/javascripts/vue_merge_request_widget/mixins/ready_to_merge.js b/ee/app/assets/javascripts/vue_merge_request_widget/mixins/ready_to_merge.js index 36b9b8d828aafbe0f2bfe5f27d232776fb73f250..bd6040f162bbb73cff992cf7452ffb7576df2dea 100644 --- a/ee/app/assets/javascripts/vue_merge_request_widget/mixins/ready_to_merge.js +++ b/ee/app/assets/javascripts/vue_merge_request_widget/mixins/ready_to_merge.js @@ -107,7 +107,7 @@ export default { }, shouldShowMergeImmediatelyDropdown() { if (this.preferredAutoMergeStrategy === MT_MERGE_STRATEGY) { - return true; + return !this.mr.ffOnlyEnabled || this.mr.ffMergePossible; } return this.isPipelineActive && !this.state.onlyAllowMergeIfPipelineSucceeds; diff --git a/ee/spec/frontend/vue_merge_request_widget/components/states/mr_widget_ready_to_merge_spec.js b/ee/spec/frontend/vue_merge_request_widget/components/states/mr_widget_ready_to_merge_spec.js index f88f253cd5e9ca2649050735bade9a65772737f4..5e8367212d4b9aa75735a4877a14717666bd15a5 100644 --- a/ee/spec/frontend/vue_merge_request_widget/components/states/mr_widget_ready_to_merge_spec.js +++ b/ee/spec/frontend/vue_merge_request_widget/components/states/mr_widget_ready_to_merge_spec.js @@ -30,6 +30,7 @@ describe('ReadyToMerge', () => { isMergeAllowed: true, onlyAllowMergeIfPipelineSucceeds: false, ffOnlyEnabled: false, + ffMergePossible: false, hasCI: false, ciStatus: null, sha: '12345678', @@ -135,14 +136,31 @@ describe('ReadyToMerge', () => { expect(findMergeImmediatelyDropdown().exists()).toBe(true); }); - it('should return true when the merge train auto merge stategy is available', () => { - createComponent({ - availableAutoMergeStrategies: [MT_MERGE_STRATEGY], - headPipeline: { id: 'gid://gitlab/Pipeline/1', path: 'path/to/pipeline', active: false }, - onlyAllowMergeIfPipelineSucceeds: true, - }); + describe('with merge train auto merge strategy', () => { + it.each` + ffOnlyEnabled | ffMergePossible | isVisible + ${false} | ${false} | ${true} + ${false} | ${true} | ${true} + ${true} | ${false} | ${false} + ${true} | ${true} | ${true} + `( + 'with ffOnlyEnabled $ffOnlyEnabled and ffMergePossible $ffMergePossible should be visible: $isVisible', + ({ ffOnlyEnabled, ffMergePossible, isVisible }) => { + createComponent({ + availableAutoMergeStrategies: [MT_MERGE_STRATEGY], + headPipeline: { + id: 'gid://gitlab/Pipeline/1', + path: 'path/to/pipeline', + active: false, + }, + ffOnlyEnabled, + ffMergePossible, + onlyAllowMergeIfPipelineSucceeds: true, + }); - expect(findMergeImmediatelyDropdown().exists()).toBe(true); + expect(findMergeImmediatelyDropdown().exists()).toBe(isVisible); + }, + ); }); it('should display the new merge dropdown options for merge trains when the skip trains feature flag is enabled', () => { diff --git a/spec/serializers/merge_request_poll_widget_entity_spec.rb b/spec/serializers/merge_request_poll_widget_entity_spec.rb index 6b80609c3486254947aa1a3128eb7cf82f3af691..171f2324cf1fd2368f0305d4c48260771ec9ea68 100644 --- a/spec/serializers/merge_request_poll_widget_entity_spec.rb +++ b/spec/serializers/merge_request_poll_widget_entity_spec.rb @@ -22,6 +22,9 @@ .to eq(resource.default_merge_commit_message(include_description: true)) end + it { is_expected.to include(ff_only_enabled: false) } + it { is_expected.to include(ff_merge_possible: false) } + describe 'new_blob_path' do context 'when user can push to project' do it 'returns path' do