Updated

spec/validators / email_validator_spec.rb

D
145 lines of codes
1 methods
188.9 complexity/method
1 churn
188.85 complexity
22 duplications
require 'rails_helper' RSpec.describe EmailValidator do let(:disable_plus_address_check) { false } let(:errors) { subject.errors[:email] } let :model do
  1. Similar code found in 2 nodes Locations: 0 1
Class.new do include ActiveModel::Model attr_accessor :email validates :email, email: true class << self def name "Signature" end end end end subject { model.new(email: email) } before do allow(Site).to receive(:disable_plus_address_check?).and_return(disable_plus_address_check) subject.valid? end describe "with a simple email address" do let(:email) { "laura@example.com" } it "doesn't add an error" do expect(errors).to be_empty end end describe "with a subdomain email address" do let(:email) { "laura@subdomain.example.com" } it "doesn't add an error" do expect(errors).to be_empty end end describe "with an email address on a new top-level domain" do let(:email) { "laura@example.photography" } it "doesn't add an error" do expect(errors).to be_empty end end describe "with a single character email address" do let(:email) { "l@s.c" } it "doesn't add an error" do expect(errors).to be_empty end end describe "with an email address without a domain" do let(:email) { "laura@example" } it "adds an error" do expect(errors).to include("Email 'laura@example' not recognised") end end describe "with an email address without a local part" do let(:email) { "@example.com" } it "adds an error" do expect(errors).to include("Email '@example.com' not recognised") end end describe "with an email address without an @ symbol" do let(:email) { "laura.example.com" } it "adds an error" do expect(errors).to include("Email 'laura.example.com' not recognised") end end describe "with an email address containing a space in the local part" do let(:email) { "laura @example.com" } it "adds an error" do expect(errors).to include("Email 'laura @example.com' not recognised") end end describe "with an email address containing a space in the domain part" do let(:email) { "laura@ example.com" } it "adds an error" do expect(errors).to include("Email 'laura@ example.com' not recognised") end end describe "with an email address containing a space in the domain part" do let(:email) { "laura@ example.com" } it "adds an error" do expect(errors).to include("Email 'laura@ example.com' not recognised") end end describe "with an email address containing an @ symbol in the local part" do let(:email) { "laura@home@example.com" } it "adds an error" do expect(errors).to include("Email 'laura@home@example.com' not recognised") end end describe "with an email address containing an @ symbol in the domain part" do let(:email) { "laura@example.@com" } it "adds an error" do expect(errors).to include("Email 'laura@example.@com' not recognised") end end describe "with an email address containing a plus address part" do let(:email) { "laura+petitions@example.com" } context "when plus addressing is not allowed" do let(:disable_plus_address_check) { false } it "adds an error" do expect(errors).to include("You can’t use ‘plus addressing’ in your email address") end end context "when plus addressing is allowed" do let(:disable_plus_address_check) { true } it "doesn't add an error" do expect(errors).to be_empty end end end end