1 require File.dirname(__FILE__) + '/test_helper'
3 class ValidatesEmailFormatOfTest < TEST_CASE
4 fixtures :people, :peoplemx
7 @valid_email = 'valid@example.com'
8 @invalid_email = 'invalid@example.'
11 def test_without_activerecord
12 assert_nil ValidatesEmailFormatOf::validate_email_format('valid@example.com')
13 err = ValidatesEmailFormatOf::validate_email_format('valid@example-com')
14 assert_equal 1, err.size
17 def test_should_allow_valid_email_addresses
19 'Valid@test.example.com',
20 'valid+valid123@test.example.com',
21 'valid_valid123@test.example.com',
22 'valid-valid+123@test.example.co.uk',
23 'valid-valid+1.23@test.example.com.au',
24 'valid@example.co.uk',
28 'valid123.456@example.org',
29 'valid123.456@example.travel',
30 'valid123.456@example.museum',
34 # from RFC 3696, page 6
35 'customer/department=shipping@example.com',
36 '$A12345@example.com',
37 '!def!xyz%abc@example.com',
38 '_somename@example.com',
40 "test'test@example.com",
42 p = create_person(:email => email)
47 def test_should_not_allow_invalid_email_addresses
48 ['invalid@example-com',
49 # period can not start local part
50 '.invalid@example.com',
51 # period can not end local part
52 'invalid.@example.com',
53 # period can not appear twice consecutively in local part
54 'invali..d@example.com',
55 # should not allow underscores in domain names
56 'invalid@ex_mple.com',
57 'invalid@example.com.',
58 'invalid@example.com_',
59 'invalid@example.com-',
60 'invalid-example.com',
61 'invalid@example.b#r.com',
63 'invali d@example.com',
65 'invalid@example.'].each do |email|
66 p = create_person(:email => email)
71 # from http://www.rfc-editor.org/errata_search.php?rfc=3696
72 def test_should_allow_quoted_characters
73 ['"Abc\@def"@example.com',
74 '"Fred\ Bloggs"@example.com',
75 '"Joe.\\Blow"@example.com',
77 p = create_person(:email => email)
82 # from http://tools.ietf.org/html/rfc3696, page 5
83 # corrected in http://www.rfc-editor.org/errata_search.php?rfc=3696
84 def test_should_not_allow_escaped_characters_without_quotes
85 ['Fred\ Bloggs_@example.com',
86 'Abc\@def+@example.com',
87 'Joe.\\Blow@example.com'
89 p = create_person(:email => email)
94 def test_should_check_length_limits
95 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com',
96 'test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com'
98 p = create_person(:email => email)
103 def test_should_respect_validate_on_option
104 p = create_person(:email => @valid_email)
107 # we only asked to validate on :create so this should fail
108 assert p.update_attributes(:email => @invalid_email)
109 assert_equal @invalid_email, p.email
112 def test_should_allow_custom_error_message
113 p = create_person(:email => @invalid_email)
115 assert_equal 'fails with custom message', p.errors.on(:email)
118 def test_should_allow_nil
119 p = create_person(:email => nil)
124 pmx = MxRecord.new(:email => 'test@dunae.ca')
127 pmx = MxRecord.new(:email => 'test@example.com')
132 def create_person(params)
136 def save_passes(p, email = '')
137 assert p.valid?, " validating #{email}"
139 assert_nil p.errors.on(:email)
142 def save_fails(p, email = '')
143 assert !p.valid?, " validating #{email}"
145 assert p.errors.on(:email)