Merge branch '43275-improve-variables-validation-message' into 'master'
Resolve "Improve Variables validation message" Closes #43275 See merge request gitlab-org/gitlab-ce!17135
This commit is contained in:
commit
1e04603f93
|
@ -6,7 +6,10 @@ module Ci
|
|||
|
||||
belongs_to :group
|
||||
|
||||
validates :key, uniqueness: { scope: :group_id }
|
||||
validates :key, uniqueness: {
|
||||
scope: :group_id,
|
||||
message: "(%{value}) has already been taken"
|
||||
}
|
||||
|
||||
scope :unprotected, -> { where(protected: false) }
|
||||
end
|
||||
|
|
|
@ -6,7 +6,10 @@ module Ci
|
|||
|
||||
belongs_to :project
|
||||
|
||||
validates :key, uniqueness: { scope: [:project_id, :environment_scope] }
|
||||
validates :key, uniqueness: {
|
||||
scope: [:project_id, :environment_scope],
|
||||
message: "(%{value}) has already been taken"
|
||||
}
|
||||
|
||||
scope :unprotected, -> { where(protected: false) }
|
||||
end
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
# - Use `validates :xxx, uniqueness: { scope: :xxx_id }` in a child model
|
||||
class VariableDuplicatesValidator < ActiveModel::EachValidator
|
||||
def validate_each(record, attribute, value)
|
||||
return if record.errors.include?(:"#{attribute}.key")
|
||||
|
||||
if options[:scope]
|
||||
scoped = value.group_by do |variable|
|
||||
Array(options[:scope]).map { |attr| variable.send(attr) } # rubocop:disable GitlabSecurity/PublicSend
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Remove duplicated error message on duplicate variable validation
|
||||
merge_request: 17135
|
||||
author:
|
||||
type: fixed
|
|
@ -5,7 +5,7 @@ describe Ci::GroupVariable do
|
|||
|
||||
it { is_expected.to include_module(HasVariable) }
|
||||
it { is_expected.to include_module(Presentable) }
|
||||
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:group_id) }
|
||||
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:group_id).with_message(/\(\w+\) has already been taken/) }
|
||||
|
||||
describe '.unprotected' do
|
||||
subject { described_class.unprotected }
|
||||
|
|
|
@ -6,7 +6,7 @@ describe Ci::Variable do
|
|||
describe 'validations' do
|
||||
it { is_expected.to include_module(HasVariable) }
|
||||
it { is_expected.to include_module(Presentable) }
|
||||
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:project_id, :environment_scope) }
|
||||
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:project_id, :environment_scope).with_message(/\(\w+\) has already been taken/) }
|
||||
end
|
||||
|
||||
describe '.unprotected' do
|
||||
|
|
|
@ -261,6 +261,8 @@ shared_examples 'variable list' do
|
|||
click_button('Save variables')
|
||||
wait_for_requests
|
||||
|
||||
expect(all('.js-ci-variable-list-section .js-ci-variable-error-box ul li').count).to eq(1)
|
||||
|
||||
# We check the first row because it re-sorts to alphabetical order on refresh
|
||||
page.within('.js-ci-variable-list-section') do
|
||||
expect(find('.js-ci-variable-error-box')).to have_content(/Validation failed Variables have duplicate values \(.+\)/)
|
||||
|
|
Loading…
Reference in New Issue