sugoi-mail 0.1.0 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. data/INSTALL +94 -0
  2. data/app/apis/mailservice_api.rb +32 -22
  3. data/app/controllers/account_controller.rb +38 -22
  4. data/app/controllers/address_controller.rb +2 -0
  5. data/app/controllers/application.rb +12 -1
  6. data/app/controllers/base_user_controller.rb +29 -0
  7. data/app/controllers/domain_controller.rb +7 -8
  8. data/app/controllers/mail_admin_controller.rb +275 -0
  9. data/app/controllers/mailinglist_controller.rb +68 -14
  10. data/app/controllers/mailservice_controller.rb +116 -94
  11. data/app/controllers/navigation_controller.rb +3 -0
  12. data/app/controllers/root_admin_controller.rb +346 -0
  13. data/app/controllers/sugoi_admin_controller.rb +16 -13
  14. data/app/helpers/base_user_helper.rb +2 -0
  15. data/app/helpers/mail_admin_helper.rb +7 -0
  16. data/app/helpers/navigation_helper.rb +2 -0
  17. data/app/helpers/root_admin_helper.rb +2 -0
  18. data/app/models/address.rb +3 -4
  19. data/app/models/domain.rb +1 -1
  20. data/app/models/mail_admin.rb +2 -0
  21. data/app/models/mailinglist.rb +41 -19
  22. data/app/models/mailinglist_class.rb +1 -0
  23. data/app/models/message.rb +18 -36
  24. data/app/models/proxy_link.rb +14 -6
  25. data/app/views/account/login.rhtml +14 -12
  26. data/app/views/account/logout.rhtml +4 -8
  27. data/app/views/account/welcome.rhtml +3 -13
  28. data/app/views/base_user/add_address.rhtml +3 -0
  29. data/app/views/base_user/edit_address.rhtml +3 -0
  30. data/app/views/base_user/edit_user_list.rhtml +21 -0
  31. data/app/views/base_user/list_mailinglists.rhtml +3 -0
  32. data/app/views/base_user/remove_address.rhtml +3 -0
  33. data/app/views/base_user/unsubscribe_self.rhtml +3 -0
  34. data/app/views/layouts/application.rhtml +47 -0
  35. data/app/views/layouts/login.rhtml +34 -0
  36. data/app/views/layouts/sugoi_admin.rhtml +1 -0
  37. data/app/views/mail_admin/_form.rhtml +11 -0
  38. data/app/views/mail_admin/edit_admin_message.rhtml +12 -0
  39. data/app/views/mail_admin/list_admin_messages.rhtml +20 -0
  40. data/app/views/mail_admin/new_admin_message.rhtml +0 -0
  41. data/app/views/mailinglist/_address_form.rhtml +23 -0
  42. data/app/views/mailinglist/_form.rhtml +10 -14
  43. data/app/views/mailinglist/_new_class_form.rhtml +16 -0
  44. data/app/views/mailinglist/_new_form.rhtml +30 -0
  45. data/app/views/mailinglist/edit.rhtml +11 -5
  46. data/app/views/mailinglist/list.rhtml +15 -15
  47. data/app/views/mailinglist/list_mailinglist_classes.rhtml +18 -0
  48. data/app/views/mailinglist/new.rhtml +5 -5
  49. data/app/views/mailinglist/new_address.rhtml +10 -0
  50. data/app/views/mailinglist/new_mailinglist_class.rhtml +8 -0
  51. data/app/views/mailinglist/show.rhtml +15 -13
  52. data/app/views/navigation/_base_add_address_module.rhtml +2 -0
  53. data/app/views/navigation/_base_edit_address_module.rhtml +2 -0
  54. data/app/views/navigation/_base_edit_user_list_module.rhtml +5 -0
  55. data/app/views/navigation/_base_index_module.rhtml +2 -0
  56. data/app/views/navigation/_base_list_mailinglists_module.rhtml +3 -0
  57. data/app/views/navigation/_base_remove_address_module.rhtml +2 -0
  58. data/app/views/navigation/_base_unsubscribe_self_module.rhtml +2 -0
  59. data/app/views/navigation/_base_welcome_module.rhtml +3 -0
  60. data/app/views/navigation/_nav_module.rhtml +77 -0
  61. data/app/views/navigation/_root_add_address_module.rhtml +3 -0
  62. data/app/views/navigation/_root_add_mailinglist_module.rhtml +3 -0
  63. data/app/views/navigation/_root_add_user_module.rhtml +3 -0
  64. data/app/views/navigation/_root_change_user_password_module.rhtml +3 -0
  65. data/app/views/navigation/_root_edit_address_module.rhtml +13 -0
  66. data/app/views/navigation/_root_edit_mailinglist_module.rhtml +12 -0
  67. data/app/views/navigation/_root_edit_user_list_module.rhtml +3 -0
  68. data/app/views/navigation/_root_edit_user_module.rhtml +10 -0
  69. data/app/views/navigation/_root_index_module.rhtml +4 -0
  70. data/app/views/navigation/_root_list_addresses_module.rhtml +11 -0
  71. data/app/views/navigation/_root_list_mailinglists_module.rhtml +11 -0
  72. data/app/views/navigation/_root_list_users_module.rhtml +12 -0
  73. data/app/views/navigation/_root_remove_address_module.rhtml +12 -0
  74. data/app/views/navigation/_root_remove_mailinglist_module.rhtml +12 -0
  75. data/app/views/navigation/_root_remove_user_module.rhtml +12 -0
  76. data/app/views/navigation/_root_show_user_module.rhtml +10 -0
  77. data/app/views/navigation/_root_welcome_module.rhtml +3 -0
  78. data/app/views/navigation/chooseNav.rhtml +0 -0
  79. data/app/views/navigation/logout.rhtml +8 -0
  80. data/app/views/root_admin/_form.rhtml +21 -0
  81. data/app/views/root_admin/add_address.rhtml +3 -0
  82. data/app/views/root_admin/add_mailinglist.rhtml +3 -0
  83. data/app/views/root_admin/admin_user_list.rhtml +29 -0
  84. data/app/views/root_admin/admin_user_new.rhtml +8 -0
  85. data/app/views/root_admin/change_user_password.rhtml +3 -0
  86. data/app/views/root_admin/edit_address.rhtml +3 -0
  87. data/app/views/root_admin/edit_mailinglist.rhtml +3 -0
  88. data/app/views/root_admin/edit_user_list.rhtml +3 -0
  89. data/app/views/root_admin/list_addresses.rhtml +3 -0
  90. data/app/views/root_admin/list_mailinglists.rhtml +3 -0
  91. data/app/views/root_admin/list_users.rhtml +32 -0
  92. data/app/views/root_admin/remove_address.rhtml +3 -0
  93. data/app/views/root_admin/remove_mailinglist.rhtml +3 -0
  94. data/app/views/root_admin/remove_user.rhtml +3 -0
  95. data/app/views/root_admin/show_user.rhtml +3 -0
  96. data/app/views/sugoi_admin/_command_description.rhtml +1 -1
  97. data/app/views/sugoi_admin/_command_list.rhtml +1 -1
  98. data/app/views/sugoi_admin/create_domain.rhtml +1 -1
  99. data/app/views/sugoi_admin/create_list.rhtml +1 -1
  100. data/app/views/sugoi_admin/create_user.rhtml +1 -1
  101. data/app/views/sugoi_admin/help.rhtml +1 -1
  102. data/app/views/sugoi_admin/init.rhtml +1 -1
  103. data/app/views/sugoi_admin/list_addresses.rhtml +1 -1
  104. data/app/views/sugoi_admin/list_domains.rhtml +1 -1
  105. data/app/views/sugoi_admin/list_mailinglist_classes.rhtml +1 -1
  106. data/app/views/sugoi_admin/list_mailinglists.rhtml +1 -1
  107. data/app/views/sugoi_admin/list_users.rhtml +1 -1
  108. data/app/views/sugoi_admin/set_config.rhtml +4 -1
  109. data/app/views/sugoi_admin/show_config.rhtml +1 -1
  110. data/app/views/sugoi_admin/subscribe.rhtml +1 -1
  111. data/app/views/sugoi_admin/unsubscribe.rhtml +1 -1
  112. data/bin/maild +1 -1
  113. data/bin/sugoi-mail +1 -1
  114. data/config/environment.rb +2 -2
  115. data/config/routes.rb +4 -2
  116. data/db/migrate/028_add_sessions.rb +15 -0
  117. data/db/schema.rb +56 -48
  118. data/lib/login_system.rb +6 -6
  119. data/lib/tasks/release.rake +2 -2
  120. data/public/404.html +27 -5
  121. data/public/500.html +27 -5
  122. data/public/images/celltop1.jpg +0 -0
  123. data/public/images/title11.jpg +0 -0
  124. data/public/{index.html → index_default.html} +0 -0
  125. data/public/javascripts/dragdrop.js +1 -1
  126. data/public/javascripts/effects.js +1 -1
  127. data/public/javascripts/prototype.js +1 -1
  128. data/public/stylesheets/global.css +201 -0
  129. data/public/stylesheets/scaffold.css +176 -11
  130. data/public/stylesheets/trestle.css +176 -11
  131. data/script/cover +6 -0
  132. data/script/process/inspector +3 -0
  133. data/test/all.rb +2 -0
  134. data/test/fixtures/helps.yml +1 -1
  135. data/test/fixtures/mailinglist_classes.yml +4 -4
  136. data/test/fixtures/messages.yml +22 -2
  137. data/test/functional/base_user_controller_test.rb +18 -0
  138. data/test/functional/mail_admin_controller_test.rb +18 -0
  139. data/test/functional/mailservice_controller_test.rb +164 -19
  140. data/test/functional/navigation_controller_test.rb +18 -0
  141. data/test/functional/root_admin_controller_test.rb +18 -0
  142. data/test/functional/sugoi_admin_controller_test.rb +68 -10
  143. data/test/functionals.rb +2 -1
  144. data/test/integration/test_soap.rb +3 -1
  145. data/test/unit/address_test.rb +16 -1
  146. data/test/unit/domain_test.rb +5 -12
  147. data/test/unit/mailinglist_class_test.rb +2 -2
  148. data/test/unit/mailinglist_test.rb +138 -3
  149. data/test/unit/message_test.rb +256 -1
  150. data/test/unit/proxy_link_test.rb +37 -0
  151. data/test/unit/sys_config_test.rb +6 -0
  152. data/test/unit/user_test.rb +20 -0
  153. data/test/units.rb +2 -1
  154. metadata +94 -8
  155. data/app/views/layouts/address.rhtml +0 -13
  156. data/app/views/layouts/scaffold.rhtml +0 -13
@@ -9,6 +9,7 @@ class MailinglistTest < Test::Unit::TestCase
9
9
 
10
10
  def setup
11
11
  @ml=Mailinglist.find 1
12
+ @nonconfirm_ml = Mailinglist.find 5
12
13
  @addr1=Address.find 1
13
14
  @addr2=Address.find 2
14
15
  end
@@ -21,12 +22,22 @@ class MailinglistTest < Test::Unit::TestCase
21
22
  assert !@ml.confirmed_addresses.member?(addr)
22
23
  end
23
24
 
25
+ def test_subscribing_already_subscribed
26
+ test_subscribing
27
+ assert @ml.subscribe("brandnewuser@foo.test")
28
+ assert addr=Address.find_by_address("brandnewuser@foo.test")
29
+ assert @ml.addresses.member?(addr)
30
+ assert @ml.pending_addresses.member?(addr)
31
+ assert !@ml.confirmed_addresses.member?(addr)
32
+ end
33
+
24
34
  def test_confirming
25
35
  assert_equal [@addr1],@ml.confirmed_addresses
26
36
  assert_equal [@addr2],@ml.pending_addresses
27
37
  confirmationcode=@loaded_fixtures["confirmationcodes"] \
28
38
  ["confirmationcode_testuser_address2"] \
29
39
  ["code"]
40
+ assert_equal false, @ml.confirm(@addr2, "hogehoge")
30
41
  assert_nothing_raised do
31
42
  @ml.confirm(@addr2,confirmationcode)
32
43
  end
@@ -35,6 +46,80 @@ class MailinglistTest < Test::Unit::TestCase
35
46
  assert_equal [], @ml.pending_addresses
36
47
  end
37
48
 
49
+ def test_unsubscribing
50
+ test_confirming
51
+ assert_equal [@addr1, @addr2],
52
+ @ml.confirmed_addresses.sort_by { |a| a.id }
53
+ @ml.unsubscribe @addr2, false
54
+ assert_equal [@addr1],
55
+ @ml.confirmed_addresses
56
+ end
57
+
58
+ def test_unsubscribing_by_text_why_did_i_do_that_anyway
59
+ test_confirming
60
+ assert_equal [@addr1, @addr2],
61
+ @ml.confirmed_addresses.sort_by { |a| a.id }
62
+ @ml.unsubscribe @addr2.address, false
63
+ assert_equal [@addr1],
64
+ @ml.confirmed_addresses
65
+ end
66
+
67
+ def test_unsubscribing_send_mail
68
+ test_confirming
69
+ assert_equal [@addr1, @addr2],
70
+ @ml.confirmed_addresses.sort_by { |a| a.id }
71
+ @ml.unsubscribe @addr2, true
72
+ assert_equal [@addr1],
73
+ @ml.confirmed_addresses
74
+ assert_equal @addr2.address, Net::SMTP.to
75
+ end
76
+
77
+ def test_subscribing_with_confirmation_code
78
+ assert_equal [@addr1],@ml.confirmed_addresses
79
+ assert_equal [@addr2],@ml.pending_addresses
80
+ assert_equal false, @ml.subscribe(@addr2.address, "hogehoge")
81
+ confirmationcode=@loaded_fixtures["confirmationcodes"] \
82
+ ["confirmationcode_testuser_address2"] \
83
+ ["code"]
84
+ assert_nothing_raised do
85
+ @ml.subscribe(@addr2.address,confirmationcode)
86
+ end
87
+
88
+ assert @ml.confirmed?(@addr2)
89
+ assert_equal [], @ml.pending_addresses
90
+ assert_equal [@addr1, @addr2],
91
+ @ml.confirmed_addresses.sort_by { |a| a.id }
92
+ end
93
+
94
+ def test_subscribing_with_confirmation_code_after_subscription_confirmed
95
+ test_subscribing_with_confirmation_code
96
+ assert_equal [@addr1, @addr2],@ml.confirmed_addresses.
97
+ sort_by { |a| a.id }
98
+ assert_equal [],@ml.pending_addresses
99
+ assert_equal true, @ml.subscribe(@addr2.address, "hogehoge"),
100
+ "if an address is already subscribed, further subscription " +
101
+ "attempts are cheerfully ignored"
102
+ confirmationcode=@loaded_fixtures["confirmationcodes"] \
103
+ ["confirmationcode_testuser_address2"] \
104
+ ["code"]
105
+ assert_nothing_raised do
106
+ @ml.subscribe(@addr2.address,confirmationcode)
107
+ end
108
+
109
+ assert @ml.confirmed?(@addr2)
110
+ assert_equal [], @ml.pending_addresses
111
+ assert_equal [@addr1, @addr2],
112
+ @ml.confirmed_addresses.sort_by { |a| a.id }
113
+ end
114
+
115
+
116
+ def test_subscribing_after_confirmation
117
+ test_confirming
118
+ assert @ml.subscribe(@addr1.address)
119
+ assert_equal [ @addr1, @addr2 ],
120
+ @ml.confirmed_addresses.sort_by { |a| a.id }
121
+ end
122
+
38
123
  def test_confirming_by_addr_string
39
124
  confirmationcode=@loaded_fixtures["confirmationcodes"] \
40
125
  ["confirmationcode_testuser_address2"] \
@@ -47,6 +132,21 @@ class MailinglistTest < Test::Unit::TestCase
47
132
  assert_equal [], @ml.pending_addresses
48
133
  end
49
134
 
135
+ def test_subscribing_non_confirmation
136
+ assert @nonconfirm_ml.subscribe("brandnewuser@foo.test")
137
+ assert addr=Address.find_by_address("brandnewuser@foo.test")
138
+ assert @nonconfirm_ml.addresses.member?(addr)
139
+ assert @nonconfirm_ml.confirmed_addresses.member?(addr)
140
+ end
141
+
142
+ def test_subscribing_non_confirmation_already_there
143
+ test_subscribing_non_confirmation
144
+ assert @nonconfirm_ml.subscribe("brandnewuser@foo.test")
145
+ assert addr=Address.find_by_address("brandnewuser@foo.test")
146
+ assert @nonconfirm_ml.addresses.member?(addr)
147
+ assert @nonconfirm_ml.confirmed_addresses.member?(addr)
148
+ end
149
+
50
150
  def test_new_confirmation
51
151
  @ml.subscribe 'brandnewuser@foo.test'
52
152
  addr=Address.find_by_address("brandnewuser@foo.test")
@@ -69,6 +169,20 @@ class MailinglistTest < Test::Unit::TestCase
69
169
  assert_equal 3, ml.sayonara_admin_message_id
70
170
  end
71
171
 
172
+ def test_creating_description_too_long
173
+ ml=Mailinglist.new
174
+ ml.name='testing-new-mailing-list'
175
+ ml.user=User.find 1
176
+ ml.description="very long "*160
177
+ ml.mailinglist_class = MailinglistClass.find 2
178
+ assert_equal false, ml.save
179
+ assert_equal 1, ml.errors.length
180
+ ml.errors.each do |facil, text|
181
+ assert_equal "description", facil
182
+ assert_equal "Is too long (>160 chars)", text
183
+ end
184
+ end
185
+
72
186
  def test_creating_nonexistent_user
73
187
  ml=Mailinglist.new
74
188
  ml.name="testing-new-mailing-list"
@@ -96,15 +210,24 @@ class MailinglistTest < Test::Unit::TestCase
96
210
  assert_equal false, ml.canonical_address?
97
211
  end
98
212
 
99
- def has_address
213
+ def test_has_address
100
214
  ml=Mailinglist.find 1
101
215
  assert ml.has_address?(@loaded_fixtures["addresses"]["address_1"]\
102
216
  ["address"])
103
217
  end
104
218
 
105
- def messages
219
+ def test_messages
220
+ ml=Mailinglist.find 1
221
+ assert_equal 5, ml.messages.count
222
+ end
223
+
224
+ def test_send_message
106
225
  ml=Mailinglist.find 1
107
- assert_equal 3, ml.messages_count
226
+ assert_equal 5, ml.messages.count
227
+ mess = ml.messages[0]
228
+ ml.send_message mess
229
+ assert_equal ml.name+"-bounces@"+ml.domain.name, Net::SMTP.from
230
+ # assert_equal ml.expand_addresses.map { |a| a.address }, Net::SMTP.to
108
231
  end
109
232
 
110
233
  def test_expanded_addresses
@@ -123,6 +246,13 @@ class MailinglistTest < Test::Unit::TestCase
123
246
  assert_equal false, ml.has_address?("address3@foo.test")
124
247
  end
125
248
 
249
+ def test_nonconfirmed_ml_always_confirmed_addrs
250
+ ml=Mailinglist.find 5
251
+ addr = Address.find_or_create_by_address("nonconfirmedaddress@foo.test")
252
+ ml.addresses << addr
253
+ assert_equal true, ml.confirmed?(addr)
254
+ end
255
+
126
256
  def test_find_by_address
127
257
  ml, cmd, realaddress = Mailinglist.find_by_address("testuser-42@test.domain")
128
258
  assert_equal :proxy, cmd
@@ -143,4 +273,9 @@ class MailinglistTest < Test::Unit::TestCase
143
273
  assert_equal :request, cmd
144
274
  assert_equal 1, ml.id
145
275
  end
276
+
277
+ def test_find_by_domain_id
278
+ assert_equal 8, Mailinglist.find_all_by_domain_id(1).length
279
+ assert_equal 0, Mailinglist.find_all_by_domain_id(2).length
280
+ end
146
281
  end
@@ -43,12 +43,13 @@ class MessageTest < Test::Unit::TestCase
43
43
  assert_equal 3, siblings[0].id
44
44
  end
45
45
 
46
- def test_new_message
46
+ def test_new_message_with_date_header
47
47
  new_message_headers = <<EOT
48
48
  From: brandnewaddress@foo.test (Brand New Address)
49
49
  Delivered-To: testuser@test.domain
50
50
  Message-Id: <280826ee-bdad-4564-9dc4-5218b8143b54@localhost>
51
51
  To: testuser@test.domain
52
+ Date: Sun, 4 Feb 2007 11:07:27 +0900 (JST)
52
53
  Subject: Test message
53
54
  EOT
54
55
 
@@ -61,10 +62,12 @@ EOT
61
62
  "brandnewaddress@foo.test")
62
63
 
63
64
  assert m
65
+ dt=DateTime.parse "Sun, 4 Feb 2007 11:07:27 +0900 (JST)"
64
66
  assert_equal "brandnewaddress@foo.test", m.envelope_from
65
67
  assert_equal ["testuser@test.domain"], m.envelope_to
66
68
  assert m.messageid
67
69
  assert m.timestamp
70
+ assert_equal dt, m.timestamp
68
71
  assert m.headers
69
72
  assert m.body
70
73
  assert_equal nil, m.parent
@@ -133,6 +136,178 @@ EOT
133
136
  assert_not_equal [], headers_sorted.grep(/^Reply-To:/)
134
137
  end
135
138
 
139
+ def test_add_message_id
140
+ new_message_headers = <<EOT
141
+ From: brandnewaddress@foo.test (Brand New Address)
142
+ Delivered-To: testuser@test.domain
143
+ To: testuser@test.domain
144
+ Subject: Test message
145
+ EOT
146
+
147
+ new_message_body = <<EOT
148
+ This is a test message.
149
+ EOT
150
+
151
+ m=Message.parse(new_message_headers+"\n"+new_message_body,
152
+ "testuser@test.domain",
153
+ "brandnewaddress@foo.test")
154
+
155
+ assert m
156
+ assert_equal "brandnewaddress@foo.test", m.envelope_from
157
+ assert_equal ["testuser@test.domain"], m.envelope_to
158
+ assert m.messageid
159
+ assert_match(/\<[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\@[a-z.0-9-]+\>$/, m.messageid)
160
+ assert m.timestamp
161
+ assert m.headers
162
+ assert m.body
163
+ assert_equal nil, m.parent
164
+ assert_equal new_message_headers.split("\n").sort, m.headers.split("\n").sort - m.headers.split("\n").grep(/^Message-Id/)
165
+ assert_equal "\n"+new_message_body, m.body
166
+ assert Address.find_by_address("brandnewaddress@foo.test")
167
+ assert m.deliver
168
+ assert_equal "testuser-bounces@test.domain",Net::SMTP.from
169
+ assert_equal ["address1@foo.test"], Net::SMTP.to
170
+ end
171
+
172
+ def test_new_message
173
+ new_message_headers = <<EOT
174
+ From: brandnewaddress@foo.test (Brand New Address)
175
+ Delivered-To: testuser@test.domain
176
+ Message-Id: <280826ee-bdad-4564-9dc4-5218b8143b54@localhost>
177
+ To: testuser@test.domain
178
+ Subject: Test message
179
+ EOT
180
+
181
+ new_message_body = <<EOT
182
+ This is a test message.
183
+ EOT
184
+
185
+ m=Message.parse(new_message_headers+"\n"+new_message_body,
186
+ "testuser@test.domain",
187
+ "brandnewaddress@foo.test")
188
+
189
+ assert m
190
+ assert_equal "brandnewaddress@foo.test", m.envelope_from
191
+ assert_equal ["testuser@test.domain"], m.envelope_to
192
+ assert m.messageid
193
+ assert m.timestamp
194
+ assert m.headers
195
+ assert m.body
196
+ assert_equal nil, m.parent
197
+ assert_equal new_message_headers.split("\n").sort, m.headers.split("\n").sort
198
+ assert_equal "\n"+new_message_body, m.body
199
+ assert Address.find_by_address("brandnewaddress@foo.test")
200
+ assert m.deliver
201
+ assert_equal "testuser-bounces@test.domain",Net::SMTP.from
202
+ assert_equal ["address1@foo.test"], Net::SMTP.to
203
+ end
204
+
205
+
206
+ def test_new_message_delivered_with_different_smtp_details
207
+ new_message_headers = <<EOT
208
+ From: brandnewaddress@foo.test (Brand New Address)
209
+ Delivered-To: testuser@test.domain
210
+ Message-Id: <280826ee-bdad-4564-9dc4-5218b8143b54@localhost>
211
+ To: testuser@test.domain
212
+ Subject: Test message
213
+ EOT
214
+
215
+ new_message_body = <<EOT
216
+ This is a test message.
217
+ EOT
218
+
219
+ m=Message.parse(new_message_headers+"\n"+new_message_body,
220
+ "testuser@test.domain",
221
+ "brandnewaddress@foo.test")
222
+
223
+ assert m
224
+ assert_equal "brandnewaddress@foo.test", m.envelope_from
225
+ assert_equal ["testuser@test.domain"], m.envelope_to
226
+ assert m.messageid
227
+ assert m.timestamp
228
+ assert m.headers
229
+ assert m.body
230
+ assert_equal nil, m.parent
231
+ assert_equal new_message_headers.split("\n").sort, m.headers.split("\n").sort
232
+ assert_equal "\n"+new_message_body, m.body
233
+ assert Address.find_by_address("brandnewaddress@foo.test")
234
+ assert m.deliver(:smtpserver => "fred",
235
+ :smtpport => 10048)
236
+ assert_equal "testuser-bounces@test.domain",Net::SMTP.from
237
+ assert_equal ["address1@foo.test"], Net::SMTP.to
238
+ end
239
+
240
+
241
+ def test_new_message_multiple_recipients
242
+ new_message_headers = <<EOT
243
+ From: brandnewaddress@foo.test (Brand New Address)
244
+ Delivered-To: testuser@test.domain
245
+ Message-Id: <280826ee-bdad-4564-9dc4-5218b8143b54@localhost>
246
+ To: testuser@test.domain
247
+ Subject: Test message
248
+ EOT
249
+
250
+ new_message_body = <<EOT
251
+ This is a test message.
252
+ EOT
253
+
254
+ m=Message.parse(new_message_headers+"\n"+new_message_body,
255
+ [ "testuser@test.domain", "testuser2@test.domain" ],
256
+ "brandnewaddress@foo.test")
257
+
258
+ assert m
259
+ assert_equal "brandnewaddress@foo.test", m.envelope_from
260
+ assert_equal ["testuser@test.domain", "testuser2@test.domain" ],
261
+ m.envelope_to
262
+ assert m.messageid
263
+ assert_equal "<280826ee-bdad-4564-9dc4-5218b8143b54@localhost>",
264
+ m.messageid
265
+ assert m.timestamp
266
+ assert m.headers
267
+ assert m.body
268
+ assert_equal nil, m.parent
269
+ assert_equal new_message_headers.split("\n").sort, m.headers.split("\n").sort
270
+ assert_equal "\n"+new_message_body, m.body
271
+ assert Address.find_by_address("brandnewaddress@foo.test")
272
+ assert m.deliver
273
+ assert_equal "testuser-bounces@test.domain",Net::SMTP.from
274
+ assert_equal ["address1@foo.test"], Net::SMTP.to
275
+ end
276
+
277
+ def test_new_message_guess_the_recipients
278
+ new_message_headers = <<EOT
279
+ From: brandnewaddress@foo.test (Brand New Address)
280
+ Delivered-To: testuser@test.domain
281
+ Message-Id: <280826ee-bdad-4564-9dc4-5218b8143b55@localhost>
282
+ To: testuser@test.domain
283
+ Subject: Test message
284
+ EOT
285
+
286
+ new_message_body = <<EOT
287
+ This is a test message.
288
+ EOT
289
+
290
+ m=Message.parse(new_message_headers+"\n"+new_message_body)
291
+
292
+ assert m
293
+ assert_equal "brandnewaddress@foo.test", m.envelope_from
294
+ assert_equal ["testuser@test.domain" ],
295
+ m.envelope_to
296
+ assert m.messageid
297
+ assert_equal "<280826ee-bdad-4564-9dc4-5218b8143b55@localhost>",
298
+ m.messageid
299
+ assert m.timestamp
300
+ assert m.headers
301
+ assert m.body
302
+ assert_equal nil, m.parent
303
+ assert_equal new_message_headers.split("\n").sort, m.headers.split("\n").sort
304
+ assert_equal "\n"+new_message_body, m.body
305
+ assert Address.find_by_address("brandnewaddress@foo.test")
306
+ assert m.deliver
307
+ assert_equal "testuser-bounces@test.domain",Net::SMTP.from
308
+ assert_equal ["address1@foo.test"], Net::SMTP.to
309
+ end
310
+
136
311
  def test_plain_rewrite
137
312
  m=Message.find 7
138
313
 
@@ -148,4 +323,84 @@ EOT
148
323
  "Date: Thu, 11 Nov 2006 19:13:00 +0900 (JST)" ] .
149
324
  sort . join("\n"), headers_sorted
150
325
  end
326
+
327
+ def test_customtext
328
+ m=Message.find 8
329
+
330
+ assert_equal "testing", m.messagetext(:custom_message => "testing")
331
+
332
+ m=Message.find 7
333
+
334
+ assert_equal "testing", m.messagetext(:custom_message => "testing")
335
+ end
336
+
337
+ def test_new_message_with_in_reply_to
338
+ new_message_headers = <<EOT
339
+ From: brandnewaddress@foo.test (Brand New Address)
340
+ Delivered-To: testuser@test.domain
341
+ Message-Id: <280826ee-bdad-4564-9dc4-5218b8143b55@localhost>
342
+ To: testuser@test.domain
343
+ In-Reply-To: <testmessage-7@foo.test>
344
+ Subject: Test message
345
+ EOT
346
+
347
+ new_message_body = <<EOT
348
+ This is a test message.
349
+ EOT
350
+
351
+ m=Message.parse(new_message_headers+"\n"+new_message_body)
352
+
353
+ assert m
354
+ assert_equal "brandnewaddress@foo.test", m.envelope_from
355
+ assert_equal ["testuser@test.domain" ],
356
+ m.envelope_to
357
+ assert m.messageid
358
+ assert_equal "<280826ee-bdad-4564-9dc4-5218b8143b55@localhost>",
359
+ m.messageid
360
+ assert m.timestamp
361
+ assert m.headers
362
+ assert m.body
363
+ assert_equal 7, m.parent_id
364
+ assert_equal new_message_headers.split("\n").sort, m.headers.split("\n").sort
365
+ assert_equal "\n"+new_message_body, m.body
366
+ assert Address.find_by_address("brandnewaddress@foo.test")
367
+ assert m.deliver
368
+ assert_equal "testuser-bounces@test.domain",Net::SMTP.from
369
+ assert_equal ["address1@foo.test"], Net::SMTP.to
370
+ end
371
+
372
+ def test_new_message_with_references
373
+ new_message_headers = <<EOT
374
+ From: brandnewaddress@foo.test (Brand New Address)
375
+ Delivered-To: testuser@test.domain
376
+ Message-Id: <280826ee-bdad-4564-9dc4-5218b8143b55@localhost>
377
+ To: testuser@test.domain
378
+ References: <testmessage-7@foo.test>
379
+ Subject: Test message
380
+ EOT
381
+
382
+ new_message_body = <<EOT
383
+ This is a test message.
384
+ EOT
385
+
386
+ m=Message.parse(new_message_headers+"\n"+new_message_body)
387
+
388
+ assert m
389
+ assert_equal "brandnewaddress@foo.test", m.envelope_from
390
+ assert_equal ["testuser@test.domain" ],
391
+ m.envelope_to
392
+ assert m.messageid
393
+ assert_equal "<280826ee-bdad-4564-9dc4-5218b8143b55@localhost>",
394
+ m.messageid
395
+ assert m.timestamp
396
+ assert m.headers
397
+ assert m.body
398
+ assert_equal 7, m.parent_id
399
+ assert_equal new_message_headers.split("\n").sort, m.headers.split("\n").sort
400
+ assert_equal "\n"+new_message_body, m.body
401
+ assert Address.find_by_address("brandnewaddress@foo.test")
402
+ assert m.deliver
403
+ assert_equal "testuser-bounces@test.domain",Net::SMTP.from
404
+ assert_equal ["address1@foo.test"], Net::SMTP.to
405
+ end
151
406
  end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ProxyLinkTest < Test::Unit::TestCase
4
+ fixtures :addresses, :domains, :proxy_links, :mailinglists
5
+
6
+ def test_verify_fixtures
7
+ assert_equal @loaded_fixtures["proxy_links"].length,
8
+ ProxyLink.count
9
+ end
10
+
11
+ def test_proxy_address
12
+ pl=ProxyLink.find(:first)
13
+ assert_equal "testuser-42@test.domain", pl.proxy_address
14
+ end
15
+
16
+ def test_real_address_valid
17
+ assert_equal "addressmessage1@foo.test",
18
+ ProxyLink.real_address("testuser-42@test.domain")
19
+ end
20
+
21
+ def test_real_address_random_address
22
+ assert_nil ProxyLink.real_address("test@test.test")
23
+ end
24
+
25
+ def test_real_address_random_address_with_proxy_looking_syntax
26
+ assert_nil ProxyLink.real_address("test-42@test.test")
27
+ end
28
+
29
+ def test_real_address_random_address_with_real_domain
30
+ assert_nil ProxyLink.real_address("randomtest-42@test.domain")
31
+ end
32
+
33
+ def test_real_address_real_mailinglist_list_bad_proxy_id
34
+ assert_nil ProxyLink.real_address("testuser-64738@test.domain")
35
+ end
36
+
37
+ end
@@ -38,4 +38,10 @@ class SysConfigTest < Test::Unit::TestCase
38
38
  assert_equal @testconfig["smtpserver"]["value"], param.value
39
39
  end
40
40
  end
41
+
42
+ def test_how_did_you_manage_that
43
+ assert_raises ArgumentError do
44
+ SysConfig.__send__ "smtpserver=", "honk", "honk"
45
+ end
46
+ end
41
47
  end
@@ -112,6 +112,26 @@ class UserTest < Test::Unit::TestCase
112
112
  assert u.mailinglist_id
113
113
  end
114
114
 
115
+ def test_create_description
116
+ u = User.new
117
+ u.login = "brandnewbob"
118
+ u.description = "Brand New Bob"
119
+ u.domain_id = 1
120
+ u.password = u.password_confirmation = "bobs_secure_password"
121
+
122
+ assert_equal "Brand New Bob", u.description
123
+ u.save
124
+ assert_equal "Brand New Bob", u.description,
125
+ "different code path in #description"
126
+
127
+ u.description = "Altered Bob"
128
+ u.password = u.password_confirmation = "bobs_secure_password"
129
+ assert u.save # hmm
130
+ assert_equal "Altered Bob", u.description,
131
+ "different code path in #description="
132
+
133
+ end
134
+
115
135
  def test_sha1
116
136
  u = User.new
117
137
  u.login = "nonexistingbob"
data/test/units.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/test_helper'
2
- Dir["unit/*.rb"].each do |file|
2
+
3
+ Dir[File.join(File.dirname(__FILE__),"unit","*.rb")].each do |file|
3
4
  require file.sub(/.rb$/,'')
4
5
  end