From 4ad86a7b7f2c8648ca9075ae7d49e1c4837da5b0 Mon Sep 17 00:00:00 2001 From: Samantha Ming Date: Thu, 1 Oct 2020 17:50:41 -0700 Subject: [PATCH] Only allow multiple reviewers in paid tiers Issue: https://gitlab.com/gitlab-org/gitlab/-/issues/246905 --- .../reviewers/uncollapsed_reviewer_list.vue | 6 +-- app/helpers/form_helper.rb | 26 +++++++++- ee/app/helpers/ee/form_helper.rb | 4 ++ ...allow-multiple-reviewers-in-paid-tiers.yml | 5 ++ ...user_creates_multiple_reviewers_mr_spec.rb | 13 +++++ .../user_edits_multiple_reviewers_mr_spec.rb | 13 +++++ locale/gitlab.pot | 3 ++ .../multiple_reviewers_mr_shared_examples.rb | 47 +++++++++++++++++++ 8 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 ee/changelogs/unreleased/246905-only-allow-multiple-reviewers-in-paid-tiers.yml create mode 100644 ee/spec/features/merge_request/user_creates_multiple_reviewers_mr_spec.rb create mode 100644 ee/spec/features/merge_request/user_edits_multiple_reviewers_mr_spec.rb create mode 100644 spec/support/shared_examples/features/multiple_reviewers_mr_shared_examples.rb diff --git a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue index 2ae4a114b36101..e82a271d007006 100644 --- a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue +++ b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue @@ -75,9 +75,9 @@ export default { :root-path="rootPath" :issuable-type="issuableType" > -
- {{ user.name }} - {{ username }} +
+
{{ user.name }}
+
{{ username }}
diff --git a/app/helpers/form_helper.rb b/app/helpers/form_helper.rb index 3dde5afcb92354..8a8d708b0b24dc 100644 --- a/app/helpers/form_helper.rb +++ b/app/helpers/form_helper.rb @@ -56,7 +56,7 @@ def assignees_dropdown_options(issuable_type) end def reviewers_dropdown_options(issuable_type) - { + dropdown_data = { toggle_class: 'js-reviewer-search js-multiselect js-save-user-data', title: 'Request review from', filter: true, @@ -69,13 +69,20 @@ def reviewers_dropdown_options(issuable_type) project_id: (@target_project || @project)&.id, field_name: "#{issuable_type}[reviewer_ids][]", default_label: 'Unassigned', - 'dropdown-header': 'Reviewer(s)', + 'max-select': 1, + 'dropdown-header': 'Reviewer', multi_select: true, 'input-meta': 'name', 'always-show-selectbox': true, current_user_info: UserSerializer.new.represent(current_user) } } + + if merge_request_supports_multiple_reviewers? + dropdown_data = multiple_reviewers_dropdown_options(dropdown_data) + end + + dropdown_data end # Overwritten @@ -88,6 +95,11 @@ def merge_request_supports_multiple_assignees? false end + # Overwritten + def merge_request_supports_multiple_reviewers? + false + end + private def multiple_assignees_dropdown_options(options) @@ -99,6 +111,16 @@ def multiple_assignees_dropdown_options(options) new_options end + + def multiple_reviewers_dropdown_options(options) + new_options = options.dup + + new_options[:title] = _('Select reviewer(s)') + new_options[:data][:'dropdown-header'] = _('Reviewer(s)') + new_options[:data].delete(:'max-select') + + new_options + end end FormHelper.prepend_if_ee('::EE::FormHelper') diff --git a/ee/app/helpers/ee/form_helper.rb b/ee/app/helpers/ee/form_helper.rb index ba0ec340d1593a..315947e743d17c 100644 --- a/ee/app/helpers/ee/form_helper.rb +++ b/ee/app/helpers/ee/form_helper.rb @@ -9,5 +9,9 @@ def issue_supports_multiple_assignees? def merge_request_supports_multiple_assignees? @merge_request&.allows_multiple_assignees? end + + def merge_request_supports_multiple_reviewers? + @merge_request&.allows_multiple_reviewers? + end end end diff --git a/ee/changelogs/unreleased/246905-only-allow-multiple-reviewers-in-paid-tiers.yml b/ee/changelogs/unreleased/246905-only-allow-multiple-reviewers-in-paid-tiers.yml new file mode 100644 index 00000000000000..6c9edc5c86ed14 --- /dev/null +++ b/ee/changelogs/unreleased/246905-only-allow-multiple-reviewers-in-paid-tiers.yml @@ -0,0 +1,5 @@ +--- +title: Only allow multiple reviewers in paid tiers +merge_request: 44097 +author: +type: changed diff --git a/ee/spec/features/merge_request/user_creates_multiple_reviewers_mr_spec.rb b/ee/spec/features/merge_request/user_creates_multiple_reviewers_mr_spec.rb new file mode 100644 index 00000000000000..b390d3e7130a82 --- /dev/null +++ b/ee/spec/features/merge_request/user_creates_multiple_reviewers_mr_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Merge request > User creates MR with multiple reviewers' do + include_context 'merge request create context' + + before do + stub_licensed_features(multiple_merge_request_reviewers: true) + end + + it_behaves_like 'multiple reviewers merge request', 'creates', 'Submit merge request' +end diff --git a/ee/spec/features/merge_request/user_edits_multiple_reviewers_mr_spec.rb b/ee/spec/features/merge_request/user_edits_multiple_reviewers_mr_spec.rb new file mode 100644 index 00000000000000..2ebb76b01a29d9 --- /dev/null +++ b/ee/spec/features/merge_request/user_edits_multiple_reviewers_mr_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Merge request > User edits MR with multiple reviewers' do + include_context 'merge request edit context' + + before do + stub_licensed_features(multiple_merge_request_reviewers: true) + end + + it_behaves_like 'multiple reviewers merge request', 'updates', 'Save changes' +end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 2b918a14d33478..f13d0309825e2b 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -23168,6 +23168,9 @@ msgstr "" msgid "Select required regulatory standard" msgstr "" +msgid "Select reviewer(s)" +msgstr "" + msgid "Select shards to replicate" msgstr "" diff --git a/spec/support/shared_examples/features/multiple_reviewers_mr_shared_examples.rb b/spec/support/shared_examples/features/multiple_reviewers_mr_shared_examples.rb new file mode 100644 index 00000000000000..48cde90bd9b4c1 --- /dev/null +++ b/spec/support/shared_examples/features/multiple_reviewers_mr_shared_examples.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'multiple reviewers merge request' do |action, save_button_title| + it "#{action} a MR with multiple reviewers", :js do + find('.js-reviewer-search').click + page.within '.dropdown-menu-user' do + click_link user.name + click_link user2.name + end + + # Extra click needed in order to toggle the dropdown + find('.js-reviewer-search').click + + expect(all('input[name="merge_request[reviewer_ids][]"]', visible: false).map(&:value)) + .to match_array([user.id.to_s, user2.id.to_s]) + + page.within '.js-reviewer-search' do + expect(page).to have_content "#{user2.name} + 1 more" + end + + click_button save_button_title + + page.within '.issuable-sidebar' do + page.within '.reviewer' do + expect(page).to have_content '2 Reviewers' + + click_link 'Edit' + + expect(page).to have_content user.name + expect(page).to have_content user2.name + end + end + + page.within '.dropdown-menu-user' do + click_link user.name + end + + page.within '.issuable-sidebar' do + page.within '.reviewer' do + # Closing dropdown to persist + click_link 'Edit' + + expect(page).to have_content user2.name + end + end + end +end -- GitLab