From 200fe12efe535d4e93660597c467d88443b5f742 Mon Sep 17 00:00:00 2001 From: Patrick Bajao Date: Wed, 31 Jul 2019 12:52:36 +0800 Subject: [PATCH] Allow approvals_required to be lower than project MR level approvals_required are currently restricted to be higher than project level approvals_required. This removes that restriction so the logic will be simpler. --- .../assets/javascripts/approvals/mappers.js | 4 +-- ee/app/models/approval_merge_request_rule.rb | 10 ------- .../12607-allow-lower-approvals-required.yml | 5 ++++ .../approval_merge_request_rule_spec.rb | 27 ------------------- 4 files changed, 7 insertions(+), 39 deletions(-) create mode 100644 ee/changelogs/unreleased/12607-allow-lower-approvals-required.yml diff --git a/ee/app/assets/javascripts/approvals/mappers.js b/ee/app/assets/javascripts/approvals/mappers.js index 148e28febda4fa..51418a1e9e6600 100644 --- a/ee/app/assets/javascripts/approvals/mappers.js +++ b/ee/app/assets/javascripts/approvals/mappers.js @@ -18,7 +18,7 @@ export const mapApprovalRuleResponse = res => ({ hasSource: Boolean(res.source_rule), name: res.name, approvalsRequired: res.approvals_required, - minApprovalsRequired: res.source_rule ? res.source_rule.approvals_required : 0, + minApprovalsRequired: 0, approvers: res.approvers, containsHiddenGroups: res.contains_hidden_groups, users: res.users, @@ -41,7 +41,7 @@ export const mapMRSourceRule = ({ id, ...rule }) => ({ ...rule, hasSource: true, sourceId: id, - minApprovalsRequired: rule.approvalsRequired || 0, + minApprovalsRequired: 0, }); /** diff --git a/ee/app/models/approval_merge_request_rule.rb b/ee/app/models/approval_merge_request_rule.rb index f6d9f8937b26be..bd48ff6e379f2b 100644 --- a/ee/app/models/approval_merge_request_rule.rb +++ b/ee/app/models/approval_merge_request_rule.rb @@ -38,7 +38,6 @@ class ApprovalMergeRequestRule < ApplicationRecord has_one :approval_project_rule, through: :approval_merge_request_rule_source alias_method :source_rule, :approval_project_rule - validate :validate_approvals_required, unless: :report_approver? validate :validate_approval_project_rule enum rule_type: { @@ -116,15 +115,6 @@ def sync_approved_approvers private - def validate_approvals_required - return unless approval_project_rule - return unless approvals_required_changed? - - if approvals_required < approval_project_rule.approvals_required - errors.add(:approvals_required, :greater_than_or_equal_to, count: approval_project_rule.approvals_required) - end - end - def validate_approval_project_rule return if approval_project_rule.blank? return if merge_request.project == approval_project_rule.project diff --git a/ee/changelogs/unreleased/12607-allow-lower-approvals-required.yml b/ee/changelogs/unreleased/12607-allow-lower-approvals-required.yml new file mode 100644 index 00000000000000..ae363d24e396a9 --- /dev/null +++ b/ee/changelogs/unreleased/12607-allow-lower-approvals-required.yml @@ -0,0 +1,5 @@ +--- +title: Allow approvals_required to be lower than project +merge_request: 14902 +author: +type: changed diff --git a/ee/spec/models/approval_merge_request_rule_spec.rb b/ee/spec/models/approval_merge_request_rule_spec.rb index 59e714b82f02f5..0bf3ad30824de1 100644 --- a/ee/spec/models/approval_merge_request_rule_spec.rb +++ b/ee/spec/models/approval_merge_request_rule_spec.rb @@ -278,33 +278,6 @@ subject.assign_attributes(approvals_required: -1) expect(subject).to be_invalid end - - context 'when project rule is present' do - let(:project_rule) { create(:approval_project_rule, project: merge_request.project, approvals_required: 3) } - - it 'has to be greater than or equal to project rule approvals_required' do - subject.assign_attributes(approval_project_rule: project_rule, approvals_required: 2) - subject.valid? - - expect(subject.errors[:approvals_required]).to include("must be greater than or equal to 3") - end - - context 'when report_approver rule' do - subject do - build(:report_approver_rule, merge_request: merge_request, approvals_required: 1).tap do |rule| - rule.approval_project_rule = project_rule - end - end - - it 'skips validation' do - expect(subject).to be_valid - - subject.approvals_required = 0 - - expect(subject).to be_valid - end - end - end end end end -- GitLab