Merge pull request #4618 from tgxworld/fix_invalid_emails

FIX: Don't allow invalid email to be saved.
This commit is contained in:
Guo Xiang Tan
2016-12-30 07:11:48 +08:00
committed by GitHub
13 changed files with 97 additions and 18 deletions

View File

@@ -32,4 +32,16 @@ describe EmailValidator do
end
end
context '.email_regex' do
it 'should match valid emails' do
expect(!!('test@discourse.org' =~ EmailValidator.email_regex)).to eq(true)
end
it 'should not match invalid emails' do
['testdiscourse.org', 'test@discourse.org; a@discourse.org', 'random'].each do |email|
expect(!!(email =~ EmailValidator.email_regex)).to eq(false)
end
end
end
end

View File

@@ -0,0 +1,6 @@
Fabricator(:email_change_request) do
user
old_email { sequence(:old_email) { |i| "bruce#{i}@wayne.com" } }
new_email { sequence(:new_email) { |i| "super#{i}@man.com" } }
change_state EmailChangeRequest.states[:authorizing_old]
end

View File

@@ -0,0 +1,14 @@
require 'rails_helper'
RSpec.describe EmailChangeRequest do
context 'validations' do
describe '#new_email' do
describe 'when email is invalid' do
it 'should not be valid' do
email_change_request = Fabricate.build(:email_change_request, new_email: 'testdiscourse.org')
expect(email_change_request).to_not be_valid
end
end
end
end
end

View File

@@ -3,8 +3,29 @@ require_dependency 'user'
describe User do
it { is_expected.to validate_presence_of :username }
it { is_expected.to validate_presence_of :email }
context 'validations' do
it { is_expected.to validate_presence_of :username }
describe 'emails' do
let(:user) { Fabricate.build(:user) }
it { is_expected.to validate_presence_of :email }
describe 'when record has a valid email' do
it "should be valid" do
user.email = 'test@gmail.com'
expect(user).to be_valid
end
end
describe 'when record has an invalid email' do
it 'should not be valid' do
user.email = 'test@gmailcom'
expect(user).to_not be_valid
end
end
end
end
describe '#count_by_signup_date' do
before(:each) do

View File

@@ -28,14 +28,5 @@ describe UserActivator do
expect(user.email_tokens.last.created_at).to be_within_one_second_of(Time.zone.now)
end
it "escapes the email in the message" do
user = Fabricate(:user, email: '<strike>eviltrout@example.com</strike>')
activator = EmailActivator.new(user, nil, nil, nil)
msg = activator.activate
expect(msg).to match(/eviltrout@example.com/)
expect(msg).not_to match(/<strike>/)
end
end
end