diff options
author | Stan Hu <stanhu@gmail.com> | 2019-03-09 00:05:59 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-03-09 00:05:59 +0000 |
commit | 6908c5f70eb4d5d7e8ef28b43d73d71da9b2a0c3 (patch) | |
tree | 0404e97adfa9f2368aa43fc3be4c34d946eb552c /spec/validators | |
parent | 1e7a7993d737965e53f51594172e920197d53510 (diff) | |
parent | c8c0ea6c52d46ce63d838d1e739355d4deace434 (diff) | |
download | gitlab-ce-6908c5f70eb4d5d7e8ef28b43d73d71da9b2a0c3.tar.gz |
Merge branch 'fix/email_validator' into 'master'
Align EmailValidator to validate_email gem implementation.
Closes #57352
See merge request gitlab-org/gitlab-ce!24971
Diffstat (limited to 'spec/validators')
-rw-r--r-- | spec/validators/devise_email_validator_spec.rb | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/spec/validators/devise_email_validator_spec.rb b/spec/validators/devise_email_validator_spec.rb new file mode 100644 index 00000000000..7860b659bd3 --- /dev/null +++ b/spec/validators/devise_email_validator_spec.rb @@ -0,0 +1,94 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe DeviseEmailValidator do + let!(:user) { build(:user, public_email: 'test@example.com') } + subject { validator.validate(user) } + + describe 'validations' do + context 'by default' do + let(:validator) { described_class.new(attributes: [:public_email]) } + + it 'allows when email is valid' do + subject + + expect(user.errors).to be_empty + end + + it 'returns error when email is invalid' do + user.public_email = 'invalid' + + subject + + expect(user.errors).to be_present + expect(user.errors.first[1]).to eq 'is invalid' + end + + it 'returns error when email is nil' do + user.public_email = nil + + subject + + expect(user.errors).to be_present + end + + it 'returns error when email is blank' do + user.public_email = '' + + subject + + expect(user.errors).to be_present + expect(user.errors.first[1]).to eq 'is invalid' + end + end + end + + context 'when regexp is set as Regexp' do + let(:validator) { described_class.new(attributes: [:public_email], regexp: /[0-9]/) } + + it 'allows when value match' do + user.public_email = '1' + + subject + + expect(user.errors).to be_empty + end + + it 'returns error when value does not match' do + subject + + expect(user.errors).to be_present + end + end + + context 'when regexp is set as String' do + it 'raise argument error' do + expect { described_class.new( { regexp: 'something' } ) }.to raise_error ArgumentError + end + end + + context 'when allow_nil is set to true' do + let(:validator) { described_class.new(attributes: [:public_email], allow_nil: true) } + + it 'allows when email is nil' do + user.public_email = nil + + subject + + expect(user.errors).to be_empty + end + end + + context 'when allow_blank is set to true' do + let(:validator) { described_class.new(attributes: [:public_email], allow_blank: true) } + + it 'allows when email is blank' do + user.public_email = '' + + subject + + expect(user.errors).to be_empty + end + end +end |