-
Notifications
You must be signed in to change notification settings - Fork 935
/
address_list_spec.rb
138 lines (112 loc) · 5.08 KB
/
address_list_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# encoding: utf-8
require 'spec_helper'
describe Mail::AddressList do
describe "parsing" do
it "should parse an address list" do
parse_text = 'test@lindsaar.net'
doing { Mail::AddressList.new(parse_text) }.should_not raise_error
end
it "should raise an error if the input is useless" do
parse_text = '@@@@@@'
doing { Mail::AddressList.new(parse_text) }.should raise_error
end
it "should not raise an error if the input is just blank" do
parse_text = nil
doing { Mail::AddressList.new(parse_text) }.should_not raise_error
end
it "should raise an error if the input is useless" do
parse_text = "This ( is an invalid address!"
doing { Mail::AddressList.new(parse_text) }.should raise_error
end
it "should give the address passed in" do
parse_text = 'test@lindsaar.net'
result = 'test@lindsaar.net'
a = Mail::AddressList.new(parse_text)
a.addresses.first.to_s.should eq result
end
it "should give the addresses passed in" do
parse_text = 'test@lindsaar.net, test2@lindsaar.net'
result = ['test@lindsaar.net', 'test2@lindsaar.net']
a = Mail::AddressList.new(parse_text)
a.addresses.map {|addr| addr.to_s }.should eq result
end
it "should preserve the display name" do
parse_text = '"Mikel Lindsaar" <mikel@test.lindsaar.net>'
result = 'Mikel Lindsaar <mikel@test.lindsaar.net>'
a = Mail::AddressList.new(parse_text)
a.addresses.first.format.should eq result
a.addresses.first.display_name.should eq 'Mikel Lindsaar'
end
it "should handle and ignore nil addresses" do
parse_text = ' , user-example@aol.com, e-s-a-s-2200@app.ar.com'
result = ['user-example@aol.com', 'e-s-a-s-2200@app.ar.com']
a = Mail::AddressList.new(parse_text)
a.addresses.map {|addr| addr.to_s }.should eq result
end
it "should handle truly horrific combinations of commas, spaces, and addresses" do
parse_text = ' ,, foo@example.com, , ,,, bar@example.com ,,'
result = ['foo@example.com', 'bar@example.com']
a = Mail::AddressList.new(parse_text)
a.addresses.map {|addr| addr.to_s }.should eq result
end
it "should handle folding whitespace" do
parse_text = "foo@example.com,\r\n\tbar@example.com"
result = ['foo@example.com', 'bar@example.com']
a = Mail::AddressList.new(parse_text)
a.addresses.map {|addr| addr.to_s }.should eq result
end
it "should handle malformed folding whitespace" do
pending
parse_text = "leads@sg.dc.com,\n\t sag@leads.gs.ry.com,\n\t sn@example-hotmail.com,\n\t e-s-a-g-8718@app.ar.com,\n\t jp@t-exmaple.com,\n\t\n\t cc@c-l-example.com"
result = %w(leads@sg.dc.com sag@leads.gs.ry.com sn@example-hotmail.com e-s-a-g-8718@app.ar.com jp@t-exmaple.com cc@c-l-example.com)
a = Mail::AddressList.new(parse_text)
a.addresses.map {|addr| addr.to_s }.should eq result
end
end
describe "functionality" do
it "should give back a list of address nodes" do
list = Mail::AddressList.new('mikel@me.com, bob@you.com')
list.address_nodes.length.should eq 2
end
it "should have each nood a class of SyntaxNode" do
list = Mail::AddressList.new('mikel@me.com, bob@you.com')
list.address_nodes.each { |n| n.class.should eq Treetop::Runtime::SyntaxNode }
end
it "should give a block of address nodes with groups" do
list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;')
list.address_nodes.length.should eq 2
end
it "should give all the recipients when asked" do
list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;')
list.individual_recipients.length.should eq 1
end
it "should give all the groups when asked" do
list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;')
list.group_recipients.length.should eq 1
end
it "should ask the group for all it's addresses" do
list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;')
list.group_recipients.first.group_list.addresses.length.should eq 2
end
it "should give all the addresses when asked" do
list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;')
list.addresses.length.should eq 3
end
it "should handle a really nasty obsolete address list" do
pending
psycho_obsolete = "Mary Smith <@machine.tld:mary@example.net>, , jdoe@test . example"
list = Mail::AddressList.new(psycho_obsolete)
list.addresses.length.should eq 2
end
it "should create an address instance for each address returned" do
list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;')
list.addresses.each do |address|
address.class.should eq Mail::Address
end
end
it "should provide a list of group names" do
list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;')
list.group_names.should eq ["my_group"]
end
end
end