diff options
Diffstat (limited to 'spec/lib/gitlab/config/entry/validators_spec.rb')
-rw-r--r-- | spec/lib/gitlab/config/entry/validators_spec.rb | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/spec/lib/gitlab/config/entry/validators_spec.rb b/spec/lib/gitlab/config/entry/validators_spec.rb index 0458bcd6354..54a2adbefd2 100644 --- a/spec/lib/gitlab/config/entry/validators_spec.rb +++ b/spec/lib/gitlab/config/entry/validators_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Gitlab::Config::Entry::Validators do +RSpec.describe Gitlab::Config::Entry::Validators, feature_category: :pipeline_authoring do let(:klass) do Class.new do include ActiveModel::Validations @@ -40,4 +40,66 @@ RSpec.describe Gitlab::Config::Entry::Validators do end end end + + describe described_class::DisallowedKeysValidator do + using RSpec::Parameterized::TableSyntax + + where(:config, :disallowed_keys, :ignore_nil, :valid_result) do + { foo: '1' } | 'foo' | false | false + { foo: '1', bar: '2', baz: '3' } | 'foo, bar' | false | false + { baz: '1', qux: '2' } | '' | false | true + { foo: nil } | 'foo' | false | false + { foo: nil, bar: '2', baz: '3' } | 'foo, bar' | false | false + { foo: nil, bar: nil, baz: '3' } | 'foo, bar' | false | false + { baz: nil, qux: nil } | '' | false | true + { foo: '1' } | 'foo' | true | false + { foo: '1', bar: '2', baz: '3' } | 'foo, bar' | true | false + { baz: '1', qux: '2' } | '' | true | true + { foo: nil } | '' | true | true + { foo: nil, bar: '2', baz: '3' } | 'bar' | true | false + { foo: nil, bar: nil, baz: '3' } | '' | true | true + { baz: nil, qux: nil } | '' | true | true + end + + with_them do + before do + klass.instance_variable_set(:@ignore_nil, ignore_nil) + + klass.instance_eval do + validates :config, disallowed_keys: { + in: %i[foo bar], + ignore_nil: @ignore_nil # rubocop:disable RSpec/InstanceVariable + } + end + + allow(instance).to receive(:config).and_return(config) + end + + it 'validates the instance' do + expect(instance.valid?).to be(valid_result) + + unless valid_result + expect(instance.errors.messages_for(:config)).to include "contains disallowed keys: #{disallowed_keys}" + end + end + end + + context 'when custom message is provided' do + before do + klass.instance_eval do + validates :config, disallowed_keys: { + in: %i[foo bar], + message: 'custom message' + } + end + + allow(instance).to receive(:config).and_return({ foo: '1' }) + end + + it 'returns the custom message when invalid' do + expect(instance).not_to be_valid + expect(instance.errors.messages_for(:config)).to include "custom message: foo" + end + end + end end |