diff --git a/ee/app/models/approval_project_rule.rb b/ee/app/models/approval_project_rule.rb index c1222a366f6df85caa03f20c62375ab19ab85bde..4ee5d6dc1bc48d9bc4ea805423468f5f73485386 100644 --- a/ee/app/models/approval_project_rule.rb +++ b/ee/app/models/approval_project_rule.rb @@ -13,6 +13,8 @@ class ApprovalProjectRule < ApplicationRecord alias_method :code_owner, :code_owner? + validates :name, uniqueness: { scope: :project_id } + def source_rule nil end diff --git a/ee/changelogs/unreleased/weimeng-prevent-approval-group-name-collision.yml b/ee/changelogs/unreleased/weimeng-prevent-approval-group-name-collision.yml new file mode 100644 index 0000000000000000000000000000000000000000..0167427775b7ab666df7be9e935107c995f63ea9 --- /dev/null +++ b/ee/changelogs/unreleased/weimeng-prevent-approval-group-name-collision.yml @@ -0,0 +1,5 @@ +--- +title: Prevent project's approval rules having same name +merge_request: 16216 +author: +type: fixed diff --git a/ee/spec/factories/approval_rules.rb b/ee/spec/factories/approval_rules.rb index 83a164bd09de25a8298e43adbd91e95a35777fce..d89025071211bba391079e7d0c915a5c0c69d1e1 100644 --- a/ee/spec/factories/approval_rules.rb +++ b/ee/spec/factories/approval_rules.rb @@ -22,7 +22,7 @@ factory :approval_project_rule do project - name ApprovalRuleLike::DEFAULT_NAME + sequence(:name) { |n| "#{ApprovalRuleLike::DEFAULT_NAME}-#{n}" } rule_type :regular trait :security_report do diff --git a/ee/spec/models/approval_project_rule_spec.rb b/ee/spec/models/approval_project_rule_spec.rb index c09b81b2229a106b8787865638340f440e943e04..5ad418de83fbd8a0db9260cf256e58a7b0491e6b 100644 --- a/ee/spec/models/approval_project_rule_spec.rb +++ b/ee/spec/models/approval_project_rule_spec.rb @@ -5,6 +5,10 @@ describe ApprovalProjectRule do subject { create(:approval_project_rule) } + describe 'validations' do + it { is_expected.to validate_uniqueness_of(:name).scoped_to(:project_id) } + end + describe '.regular' do it 'returns non-report_approver records' do rules = create_list(:approval_project_rule, 2)