module Truemail::RSpec::ValidatorHelper

Attributes

configuration[R]
email[R]
mail_servers[R]
rcptto_error[R]
success[R]
validation_type[R]

Public Instance Methods

create_servers_list(size = nil) click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 6
def create_servers_list(size = nil)
  ::Array.new(size || rand(1..4)) { ::FFaker::Internet.ip_v4_address }
end
create_validator( validation_type = nil, email = ::FFaker::Internet.email, mail_servers = create_servers_list, rcptto_error: 'user not found', success: true, configuration: create_configuration ) click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 10
def create_validator( # rubocop:disable Metrics/ParameterLists
  validation_type = nil,
  email = ::FFaker::Internet.email,
  mail_servers = create_servers_list,
  rcptto_error: 'user not found',
  success: true,
  configuration: create_configuration
)
  set_expected_result(validation_type, email, mail_servers, success, configuration, rcptto_error)
  stub_validation_layers
  validator_instance = ValidatorFactory.call(validation_type, success, email, mail_servers, configuration)
  unstub_validation_layers
  validator_instance
end

Private Instance Methods

mx_blacklist_layer() click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 67
def mx_blacklist_layer # rubocop:disable Metrics/AbcSize
  allow(Truemail::Validate::Regex).to receive(:check).and_return(true)
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:mx_records).and_return(mail_servers)
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:domain_not_include_null_mx).and_return(true)
  allow_any_instance_of(Truemail::Validate::MxBlacklist).to receive(:not_blacklisted_mail_servers?).and_return(success)
end
mx_layer() click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 61
def mx_layer
  allow(Truemail::Validate::Regex).to receive(:check).and_return(true)
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:mx_records).and_return(mail_servers)
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:domain_not_include_null_mx).and_return(success)
end
regex_layer() click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 57
def regex_layer
  allow_any_instance_of(Truemail::Validate::Regex).to receive(:match_regex_pattern?).and_return(success)
end
request_instance() click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 74
def request_instance
  request = Truemail::Validate::Smtp::Request.new(
    host: mail_servers.first,
    email: email,
    configuration: configuration
  )

  request.response.tap do |response|
    response.port_opened = true
    response.connection = true
    response.helo = true
    response.mailfrom = true
    response.rcptto = false
    response.errors[:rcptto] = rcptto_error
  end

  request
end
set_expected_result(validation_type, email, mail_servers, success, configuration, rcptto_error) click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 29
def set_expected_result(validation_type, email, mail_servers, success, configuration, rcptto_error) # rubocop:disable Metrics/ParameterLists
  @validation_type = validation_type
  @email = email
  @mail_servers = mail_servers
  @success = success
  @configuration = configuration
  @rcptto_error = rcptto_error
end
smtp_layer() click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 93
def smtp_layer # rubocop:disable Metrics/AbcSize
  allow(Truemail::Validate::Regex).to receive(:check).and_return(true)
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:mx_records).and_return(mail_servers)
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:domain_not_include_null_mx).and_return(true)
  allow_any_instance_of(Truemail::Validate::Smtp).to receive(:establish_smtp_connection).and_return(true)
  return allow_any_instance_of(Truemail::Validate::Smtp).to receive(:success_response?).and_return(true) if success
  allow_any_instance_of(Truemail::Validate::Smtp).to receive(:smtp_results).and_return([request_instance])
end
stub_validation_layers() click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 38
def stub_validation_layers
  case validation_type
  when :regex then regex_layer
  when :mx then mx_layer
  when :mx_blacklist then mx_blacklist_layer
  else smtp_layer
  end
end
unstub_validation_layers() click to toggle source
# File lib/truemail/rspec/validator_helper.rb, line 47
def unstub_validation_layers # rubocop:disable Metrics/AbcSize
  allow_any_instance_of(Truemail::Validate::Regex).to receive(:match_regex_pattern?).and_call_original
  allow(Truemail::Validate::Regex).to receive(:check).and_call_original
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:mx_records).and_call_original
  allow_any_instance_of(Truemail::Validate::Mx).to receive(:domain_not_include_null_mx).and_call_original
  allow_any_instance_of(Truemail::Validate::Smtp).to receive(:establish_smtp_connection).and_call_original
  allow_any_instance_of(Truemail::Validate::Smtp).to receive(:success_response?).and_call_original
  allow_any_instance_of(Truemail::Validate::Smtp).to receive(:smtp_results).and_call_original
end