From 2a9de97cb67dd3ef297c07cec0ad3cdc1433b57f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 19 Feb 2026 09:25:58 -0500 Subject: [PATCH] Use validation matchers for `UserEmailValidator` spec (#37908) --- spec/validators/user_email_validator_spec.rb | 50 +++++--------------- 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/spec/validators/user_email_validator_spec.rb b/spec/validators/user_email_validator_spec.rb index 92da04ea395..500b75c7497 100644 --- a/spec/validators/user_email_validator_spec.rb +++ b/spec/validators/user_email_validator_spec.rb @@ -3,49 +3,25 @@ require 'rails_helper' RSpec.describe UserEmailValidator do - describe '#validate' do - subject { described_class.new.validate(user) } + subject { Fabricate.build :user, confirmed_at: nil } - let(:user) { instance_double(User, email: 'info@mail.com', sign_up_ip: '1.2.3.4', errors: errors) } - let(:errors) { instance_double(ActiveModel::Errors, add: nil) } + let(:email_address) { 'info@host.example' } - before do - allow(user).to receive(:valid_invitation?).and_return(false) - allow(EmailDomainBlock).to receive(:block?) { blocked_email } - end + context 'when email provider is blocked' do + before { Fabricate :email_domain_block, domain: 'host.example' } - context 'when e-mail provider is blocked' do - let(:blocked_email) { true } - - it 'adds error' do - subject - - expect(errors).to have_received(:add).with(:email, :blocked).once - end - end - - context 'when e-mail provider is not blocked' do - let(:blocked_email) { false } - - it 'does not add errors' do - subject - - expect(errors).to_not have_received(:add) - end + it { is_expected.to_not allow_value(email_address).for(:email).with_message(:blocked) } + end - context 'when canonical e-mail is blocked' do - let(:other_user) { Fabricate(:user, email: 'i.n.f.o@mail.com') } + context 'when email provider is not blocked' do + it { is_expected.to allow_value(email_address).for(:email) } + end - before do - other_user.account.suspend! - end + context 'when canonical email address is blocked' do + let(:other_user) { Fabricate(:user, email: 'i.n.f.o@host.example') } - it 'adds error' do - subject + before { other_user.account.suspend! } - expect(errors).to have_received(:add).with(:email, :taken).once - end - end - end + it { is_expected.to_not allow_value(email_address).for(:email).with_message(:taken) } end end