email_address_validation_spec.rb 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe EmailAddressValidation do
  4. shared_examples 'email address validity' do |valid:, check_mx:|
  5. let(:email_address_validation) { described_class.new(email_address) }
  6. it 'reports given email address' do
  7. expect(email_address_validation.email_address).to eq(email_address)
  8. expect(email_address_validation.to_s).to eq(email_address)
  9. end
  10. it "reports email address as #{valid ? 'valid' : 'invalid'}" do
  11. expect(email_address_validation.valid?(check_mx: check_mx)).to be(valid)
  12. end
  13. end
  14. describe 'Email address' do
  15. describe 'with MX record' do
  16. let(:email_address) { 'greetings@zammad.org' }
  17. include_examples 'email address validity', valid: true, check_mx: true
  18. end
  19. describe 'without MX record' do
  20. let(:email_address) { 'someone@this-is-probably-a-non-existent-domain.com.example' }
  21. include_examples 'email address validity', valid: true, check_mx: false
  22. end
  23. describe 'with unicode characters' do
  24. let(:email_address) { 'ąžuolas@paštas.com' }
  25. include_examples 'email address validity', valid: true, check_mx: false
  26. end
  27. describe 'when max length' do
  28. let(:email_address) { 'trulyverylongpastasdomainnamehere.trulyverylongpastasdomainnamee@trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumname.com' }
  29. include_examples 'email address validity', valid: true, check_mx: false
  30. end
  31. describe 'when max length with unicode characters' do
  32. let(:email_address) { 'trulyverylongpaštasdomainnamehere.trulyverylongpaštasdomainnamee@trulyverylongpaštasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpaštasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpaštasdomainnameheredob.com' }
  33. include_examples 'email address validity', valid: true, check_mx: false
  34. end
  35. describe 'when local non-localhost email' do
  36. let(:email_address) { 'test@localhost' }
  37. include_examples 'email address validity', valid: true, check_mx: false
  38. end
  39. describe 'without dot in domain' do
  40. let(:email_address) { 'greetings@localhost' }
  41. include_examples 'email address validity', valid: true, check_mx: false
  42. end
  43. describe 'without domain' do
  44. let(:email_address) { 'zammad' }
  45. include_examples 'email address validity', valid: false, check_mx: false
  46. end
  47. describe 'when too long' do
  48. let(:email_address) { 'trulyverylongpastasdomainnamehere.trulyverylongpastasdomainnamee@trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumnametoolong.com' }
  49. include_examples 'email address validity', valid: false, check_mx: false
  50. end
  51. describe 'with invalid domain format' do
  52. let(:email_address) { 'greetings@example..com' }
  53. include_examples 'email address validity', valid: false, check_mx: false
  54. end
  55. describe 'which is empty' do
  56. let(:email_address) { '' }
  57. include_examples 'email address validity', valid: false, check_mx: false
  58. end
  59. end
  60. end