From 1df28973ed19d5d54f21e0bf097d1ea0a53ecaea Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 20 May 2026 13:55:31 +0530 Subject: [PATCH] chore: restore MX check --- .../account/sign_up_email_validation_service.rb | 2 +- .../account/sign_up_email_validation_service_spec.rb | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/services/account/sign_up_email_validation_service.rb b/app/services/account/sign_up_email_validation_service.rb index 903e55e7e..881b3b6a0 100644 --- a/app/services/account/sign_up_email_validation_service.rb +++ b/app/services/account/sign_up_email_validation_service.rb @@ -16,7 +16,7 @@ class Account::SignUpEmailValidationService raise InvalidEmail.new({ domain_blocked: true }) if domain_blocked? - raise InvalidEmail.new({ valid: true, disposable: true }) if address.disposable_domain? + raise InvalidEmail.new({ valid: true, disposable: true }) if address.disposable? raise InvalidEmail.new({ free_email_provider: true }) if !@allow_free_email_provider && address.deny_listed? diff --git a/spec/services/account/sign_up_email_validation_service_spec.rb b/spec/services/account/sign_up_email_validation_service_spec.rb index b508cb7e0..676a9fdf0 100644 --- a/spec/services/account/sign_up_email_validation_service_spec.rb +++ b/spec/services/account/sign_up_email_validation_service_spec.rb @@ -5,9 +5,9 @@ require 'rails_helper' RSpec.describe Account::SignUpEmailValidationService, type: :service do let(:service) { described_class.new(email) } let(:blocked_domains) { "gmail.com\noutlook.com" } - let(:valid_email_address) { instance_double(ValidEmail2::Address, valid?: true, disposable_domain?: false, deny_listed?: false) } - let(:free_provider_email_address) { instance_double(ValidEmail2::Address, valid?: true, disposable_domain?: false, deny_listed?: true) } - let(:disposable_email_address) { instance_double(ValidEmail2::Address, valid?: true, disposable_domain?: true) } + let(:valid_email_address) { instance_double(ValidEmail2::Address, valid?: true, disposable?: false, deny_listed?: false) } + let(:free_provider_email_address) { instance_double(ValidEmail2::Address, valid?: true, disposable?: false, deny_listed?: true) } + let(:disposable_email_address) { instance_double(ValidEmail2::Address, valid?: true, disposable?: true) } let(:invalid_email_address) { instance_double(ValidEmail2::Address, valid?: false) } before do @@ -91,6 +91,11 @@ RSpec.describe Account::SignUpEmailValidationService, type: :service do describe '#perform with the real deny list' do before do allow(GlobalConfigService).to receive(:load).with('BLOCKED_EMAIL_DOMAINS', '').and_return('') + # ValidEmail2::Dns is instantiated lazily inside ValidEmail2::Address per call, + # so we cannot capture the instance to stub it. Stubbing the class-level constructor + # would also break ValidEmail2's internal caching. Returning empty MX/A records keeps + # disposable? and valid_mx? offline and deterministic in CI. + allow_any_instance_of(ValidEmail2::Dns).to receive_messages(mx_servers: [], a_servers: []) # rubocop:disable RSpec/AnyInstance end %w[user@gmail.com user@outlook.com user@hotmail.com user@yahoo.com user@protonmail.com user@icloud.com].each do |email|