sugoi-mail 0.0.0

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 (182) hide show
  1. data/README +35 -0
  2. data/Rakefile +10 -0
  3. data/app/apis/mailservice_api.rb +178 -0
  4. data/app/controllers/.sugoi_admin_controller.rb.swp +0 -0
  5. data/app/controllers/account_controller.rb +39 -0
  6. data/app/controllers/address_controller.rb +49 -0
  7. data/app/controllers/application.rb +4 -0
  8. data/app/controllers/commandline_controller.rb +15 -0
  9. data/app/controllers/domain_controller.rb +37 -0
  10. data/app/controllers/mailinglist_controller.rb +51 -0
  11. data/app/controllers/mailservice_controller.rb +497 -0
  12. data/app/controllers/sugoi_admin_controller.rb +93 -0
  13. data/app/helpers/account_helper.rb +2 -0
  14. data/app/helpers/address_helper.rb +2 -0
  15. data/app/helpers/application_helper.rb +3 -0
  16. data/app/helpers/domain_helper.rb +2 -0
  17. data/app/helpers/mailservice_helper.rb +2 -0
  18. data/app/helpers/sugoi_admin_helper.rb +2 -0
  19. data/app/models/address.rb +110 -0
  20. data/app/models/admin_message.rb +45 -0
  21. data/app/models/confirmationcode.rb +59 -0
  22. data/app/models/domain.rb +76 -0
  23. data/app/models/mailinglist.rb +336 -0
  24. data/app/models/mailinglist_class.rb +39 -0
  25. data/app/models/message.rb +293 -0
  26. data/app/models/proxy_link.rb +25 -0
  27. data/app/models/user.rb +150 -0
  28. data/app/views/account/login.rhtml +22 -0
  29. data/app/views/account/logout.rhtml +10 -0
  30. data/app/views/account/signup.rhtml +17 -0
  31. data/app/views/account/welcome.rhtml +13 -0
  32. data/app/views/address/_form.rhtml +7 -0
  33. data/app/views/address/edit.rhtml +10 -0
  34. data/app/views/address/list.rhtml +27 -0
  35. data/app/views/address/new.rhtml +8 -0
  36. data/app/views/address/show.rhtml +8 -0
  37. data/app/views/domain/login.rhtml +22 -0
  38. data/app/views/domain/logout.rhtml +10 -0
  39. data/app/views/domain/signup.rhtml +17 -0
  40. data/app/views/domain/welcome.rhtml +13 -0
  41. data/app/views/layouts/address.rhtml +13 -0
  42. data/app/views/layouts/scaffold.rhtml +13 -0
  43. data/app/views/mailinglist/_form.rhtml +28 -0
  44. data/app/views/mailinglist/edit.rhtml +10 -0
  45. data/app/views/mailinglist/list.rhtml +27 -0
  46. data/app/views/mailinglist/new.rhtml +8 -0
  47. data/app/views/mailinglist/show.rhtml +16 -0
  48. data/app/views/sugoi_admin/create_domain.rhtml +1 -0
  49. data/app/views/sugoi_admin/list_addresses.rhtml +1 -0
  50. data/app/views/sugoi_admin/list_domains.rhtml +2 -0
  51. data/app/views/sugoi_admin/list_mailinglists.rhtml +1 -0
  52. data/bin/mailc +32 -0
  53. data/bin/maild +133 -0
  54. data/bin/sugoi-admin +21 -0
  55. data/bin/sugoi-mail +20 -0
  56. data/config/boot.rb +44 -0
  57. data/config/environment.rb +54 -0
  58. data/config/environments/bench.rb +21 -0
  59. data/config/environments/coverage.rb +21 -0
  60. data/config/environments/development.rb +21 -0
  61. data/config/environments/production.rb +18 -0
  62. data/config/environments/test.rb +19 -0
  63. data/config/lighttpd.conf +46 -0
  64. data/config/routes.rb +29 -0
  65. data/db/migrate/001_mailproxy.rb +7 -0
  66. data/db/migrate/002_create_users.rb +13 -0
  67. data/db/migrate/003_create_mailinglists.rb +13 -0
  68. data/db/migrate/004_create_addresses.rb +12 -0
  69. data/db/migrate/005_create_addresses_mailinglists.rb +13 -0
  70. data/db/migrate/006_alter_mailinglists.rb +9 -0
  71. data/db/migrate/007_create_messages.rb +25 -0
  72. data/db/migrate/008_add_mailinglistid_to_users.rb +14 -0
  73. data/db/migrate/009_add_domainadmin_to_users.rb +9 -0
  74. data/db/migrate/010_add_domain_to_users.rb +16 -0
  75. data/db/migrate/011_add_active_to_addresses.rb +14 -0
  76. data/db/migrate/012_create_confirmationcodes.rb +14 -0
  77. data/db/migrate/013_add_description_to_mailinglists.rb +9 -0
  78. data/db/migrate/014_create_admin_messages.rb +69 -0
  79. data/db/migrate/015_add_messages_to_mailinglists.rb +26 -0
  80. data/db/migrate/016_add_mailinglist_admin_to_users.rb +9 -0
  81. data/db/migrate/017_add_mailinglist_types.rb +94 -0
  82. data/db/migrate/018_add_bounciness_to_addresses.rb +20 -0
  83. data/db/migrate/019_add_archived_to_mailinglist_classes.rb +25 -0
  84. data/db/migrate/020_add_envelope_data_to_messages.rb +11 -0
  85. data/db/migrate/021_add_addresses_users.rb +14 -0
  86. data/db/migrate/022_add_virtual_to_users.rb +14 -0
  87. data/db/migrate/023_drop_openposting_from_mailinglists.rb +9 -0
  88. data/db/migrate/024_add_proxy_links.rb +21 -0
  89. data/db/migrate/025_add_proxify_to_mailinglist_classes.rb +25 -0
  90. data/db/schema.mysql.sql +104 -0
  91. data/db/schema.postgresql.sql +104 -0
  92. data/db/schema.rb +85 -0
  93. data/db/schema.sqlite.sql +104 -0
  94. data/db/schema.sqlserver.sql +113 -0
  95. data/db/schema_version +1 -0
  96. data/doc/README_FOR_APP +179 -0
  97. data/doc/mailinglist_classes description.txt +28 -0
  98. data/installer/rails_installer_defaults.yml +5 -0
  99. data/lib/daemonize.rb +56 -0
  100. data/lib/domain_system.rb +87 -0
  101. data/lib/gurgitate-rules.rb +69 -0
  102. data/lib/limitedfork.rb +66 -0
  103. data/lib/login_system.rb +87 -0
  104. data/public/.htaccess +40 -0
  105. data/public/404.html +8 -0
  106. data/public/500.html +8 -0
  107. data/public/dispatch.cgi +10 -0
  108. data/public/dispatch.fcgi +24 -0
  109. data/public/dispatch.rb +10 -0
  110. data/public/favicon.ico +0 -0
  111. data/public/images/rails.png +0 -0
  112. data/public/javascripts/application.js +2 -0
  113. data/public/javascripts/controls.js +815 -0
  114. data/public/javascripts/dragdrop.js +913 -0
  115. data/public/javascripts/effects.js +958 -0
  116. data/public/javascripts/prototype.js +2006 -0
  117. data/public/robots.txt +1 -0
  118. data/public/stylesheets/scaffold.css +74 -0
  119. data/public/stylesheets/trestle.css +74 -0
  120. data/script/about +3 -0
  121. data/script/breakpointer +3 -0
  122. data/script/console +3 -0
  123. data/script/destroy +3 -0
  124. data/script/fakedeliver +19 -0
  125. data/script/generate +3 -0
  126. data/script/performance/benchmarker +3 -0
  127. data/script/performance/profiler +3 -0
  128. data/script/plugin +3 -0
  129. data/script/process/reaper +3 -0
  130. data/script/process/spawner +3 -0
  131. data/script/runner +3 -0
  132. data/script/server +3 -0
  133. data/sugoi-mail.gemspec +36 -0
  134. data/test/fixtures/addresses.yml +70 -0
  135. data/test/fixtures/addresses_mailinglists.yml +20 -0
  136. data/test/fixtures/admin_messages.yml +65 -0
  137. data/test/fixtures/confirmationcodes.yml +13 -0
  138. data/test/fixtures/domains.yml +9 -0
  139. data/test/fixtures/mailinglist_classes.yml +45 -0
  140. data/test/fixtures/mailinglists.yml +80 -0
  141. data/test/fixtures/messages.yml +154 -0
  142. data/test/fixtures/proxy_links.yml +5 -0
  143. data/test/fixtures/users.yml +50 -0
  144. data/test/functional/domain_controller_test.rb +74 -0
  145. data/test/functional/mailservice_controller_test.rb +546 -0
  146. data/test/integration/test_soap.rb +413 -0
  147. data/test/integration/test_xmlrpc.rb +198 -0
  148. data/test/mocks/test/net-smtp-stub.rb +24 -0
  149. data/test/test_helper.rb +28 -0
  150. data/test/unit/address_test.rb +44 -0
  151. data/test/unit/admin_message_test.rb +41 -0
  152. data/test/unit/confirmationcode_test.rb +64 -0
  153. data/test/unit/domain_test.rb +128 -0
  154. data/test/unit/mailinglist_class_test.rb +82 -0
  155. data/test/unit/mailinglist_test.rb +145 -0
  156. data/test/unit/message_test.rb +151 -0
  157. data/test/unit/user_test.rb +126 -0
  158. data/test/units.rb +4 -0
  159. data/vendor/plugins/active_command/init.rb +1 -0
  160. data/vendor/plugins/active_command/lib/active_command/request.rb +137 -0
  161. data/vendor/plugins/active_command/lib/active_command/response.rb +132 -0
  162. data/vendor/plugins/active_command/lib/active_command.rb +2 -0
  163. data/vendor/plugins/ar_fixtures/CHANGELOG +10 -0
  164. data/vendor/plugins/ar_fixtures/MIT-LICENSE +20 -0
  165. data/vendor/plugins/ar_fixtures/README +19 -0
  166. data/vendor/plugins/ar_fixtures/Rakefile +54 -0
  167. data/vendor/plugins/ar_fixtures/about.yml +7 -0
  168. data/vendor/plugins/ar_fixtures/init.rb +1 -0
  169. data/vendor/plugins/ar_fixtures/lib/ar_fixtures.rb +102 -0
  170. data/vendor/plugins/ar_fixtures/tasks/ar_fixtures.rake +39 -0
  171. data/vendor/plugins/ar_fixtures/test/ar_fixtures_test.rb +53 -0
  172. data/vendor/plugins/ar_fixtures/test/database.yml +18 -0
  173. data/vendor/plugins/ar_fixtures/test/fixtures/beer.rb +5 -0
  174. data/vendor/plugins/ar_fixtures/test/fixtures/beers.yml +9 -0
  175. data/vendor/plugins/ar_fixtures/test/fixtures/beers_drunkards.yml +8 -0
  176. data/vendor/plugins/ar_fixtures/test/fixtures/drunkard.rb +6 -0
  177. data/vendor/plugins/ar_fixtures/test/fixtures/drunkards.yml +8 -0
  178. data/vendor/plugins/ar_fixtures/test/fixtures/glass.rb +2 -0
  179. data/vendor/plugins/ar_fixtures/test/fixtures/glasses.yml +9 -0
  180. data/vendor/plugins/ar_fixtures/test/schema.rb +21 -0
  181. data/vendor/plugins/ar_fixtures/test/test_helper.rb +37 -0
  182. metadata +320 -0
@@ -0,0 +1,546 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'mailservice_controller'
3
+ require 'net-smtp-stub'
4
+
5
+ # Re-raise errors caught by the controller.
6
+ class MailserviceController; def rescue_action(e) raise e end; end
7
+
8
+ class MailserviceControllerTest < Test::Unit::TestCase
9
+ fixtures :domains, :users, :mailinglists, :admin_messages,
10
+ :mailinglist_classes, :confirmationcodes, :addresses,
11
+ :addresses_mailinglists
12
+
13
+ def setup
14
+ @controller = MailserviceController.new
15
+ @request = ActionController::TestRequest.new
16
+ @response = ActionController::TestResponse.new
17
+ end
18
+
19
+ def test_0_alive
20
+ assert invoke(:ping)
21
+ end
22
+ end
23
+
24
+ def get_confirmation_code(mailinglist, addr)
25
+ Confirmationcode.find(:first, :conditions =>
26
+ [ 'address_id = ? and mailinglist_id = ?',
27
+ Address.find_by_address(addr).id,
28
+ Mailinglist.find_by_name(mailinglist).id ]).code
29
+ end
30
+
31
+ class MailserviceDomainLogin < MailserviceControllerTest
32
+ def setup
33
+ super
34
+ @domain_name = @loaded_fixtures["domains"]["testdomain"]["name"]
35
+ @domain_password = "foobar"
36
+ invoke :domain_login, @domain_name, @domain_password
37
+ end
38
+
39
+ def teardown
40
+ invoke :domain_logout
41
+ end
42
+
43
+ def test_0_domain_logged_in
44
+ assert invoke(:domain_logged_in), "Domain still logged in"
45
+ assert_equal @domain_name, invoke(:domain_name), "Still the right domain"
46
+ end
47
+ end
48
+
49
+ class MailserviceUserLogin < MailserviceDomainLogin
50
+ def setup
51
+ super
52
+ @user_password = "foobar"
53
+ @user_name = @loaded_fixtures["users"]["testuser"]["login"]
54
+ invoke :user_login, @user_name, @user_password
55
+ end
56
+
57
+ def teardown
58
+ invoke :user_logout
59
+ super
60
+ end
61
+
62
+ def test_0_user_logged_in
63
+ assert invoke(:user_logged_in), "User still logged in"
64
+ assert_equal "testuser", invoke(:user_name), "Still the right user"
65
+ end
66
+ end
67
+
68
+ class MailserviceDomainAdmin < MailserviceDomainLogin
69
+ def setup
70
+ super
71
+ @admin_password="foobar"
72
+ @admin_name=@loaded_fixtures["users"]["root"]["login"]
73
+ invoke :user_login, @admin_name, @admin_password
74
+ end
75
+
76
+ def teardown
77
+ invoke :user_logout
78
+ super
79
+ end
80
+
81
+ def test_0_user_still_admin
82
+ assert invoke(:user_logged_in), "User still logged in"
83
+ assert_equal @admin_name, invoke(:user_name), "User is still root"
84
+ assert invoke(:is_admin), "User is still administrator"
85
+ end
86
+ end
87
+
88
+
89
+ class TC_Mailservice_DomainLogin < MailserviceControllerTest
90
+ def setup
91
+ super
92
+ @domain_name = @loaded_fixtures["domains"]["testdomain"]["name"]
93
+ @domain_password = "foobar"
94
+ end
95
+
96
+ def test_baddomain
97
+ # bad username, bad password
98
+ assert_equal(false, invoke(:domain_login,"junkdomain", "blort"))
99
+
100
+ # good username, bad password
101
+ assert_equal(false, invoke(:domain_login,@domain_name, "blort"))
102
+ end
103
+
104
+ def test_loggedout
105
+ # now once again
106
+ assert_equal(false, invoke(:domain_logout))
107
+ end
108
+
109
+ def test_good_domain
110
+ # good username, good password
111
+ assert_equal(true, invoke(:domain_login,@domain_name, @domain_password))
112
+
113
+ # now log out
114
+ assert_equal(true, invoke(:domain_logout))
115
+ end
116
+
117
+ def test_permissions
118
+ assert_raises RuntimeError do
119
+ invoke :user_login, "testuser", "foobar"
120
+ end
121
+ end
122
+ end
123
+
124
+ class TC_Mailservice_UserLogin < MailserviceDomainLogin
125
+ def test_baduser
126
+ assert_equal false, invoke(:user_login,"huaglhuagl", "blort")
127
+ assert_equal false, invoke(:user_login,"testuser", "blort")
128
+ end
129
+
130
+ def test_gooduser
131
+ assert invoke(:user_login,"testuser", "foobar")
132
+ assert_equal false, invoke(:is_admin)
133
+ end
134
+ end
135
+
136
+
137
+ class TC_Mailservice_TroublesomeAdminTask < MailserviceDomainAdmin
138
+ def test_userlogin
139
+ assert_nothing_raised do
140
+ assert invoke(:is_admin)
141
+ end
142
+ assert_nothing_raised do
143
+ assert invoke(:admin_user_signup,"newuser", "password", "password")
144
+ end
145
+
146
+ # user exists, login succeeds
147
+ assert invoke(:user_login, "newuser", "password")
148
+ assert_equal false, invoke(:is_admin)
149
+
150
+ # let's get our session back
151
+ assert invoke(:user_login, @admin_name, "foobar")
152
+ assert invoke(:is_admin)
153
+ assert_nothing_raised do
154
+ assert invoke(:admin_user_delete, "newuser", "newuser")
155
+ end
156
+ end
157
+ end
158
+
159
+ class TC_Mailservice_AdminTasks_UserCreation < MailserviceDomainAdmin
160
+ def test_passwordmismatch
161
+ assert invoke(:is_admin)
162
+ # password doesn't match
163
+ assert_raises RuntimeError do
164
+ invoke(:admin_user_signup,"newuser", "password", "drowssap")
165
+ end
166
+ end
167
+
168
+ def test_usercreate
169
+ # user doesn't exist; gets created
170
+ assert invoke(:is_admin)
171
+ assert invoke(:admin_user_signup,"newuser", "password", "password")
172
+ assert_raises RuntimeError do
173
+ assert invoke(:admin_user_delete,"newuser", "resuwen"),
174
+ "login and confirmation don't match on delete"
175
+ end
176
+ assert_nothing_raised do
177
+ assert invoke(:admin_user_delete,"newuser", "newuser"),
178
+ "successful deletion"
179
+ end
180
+ end
181
+
182
+ def test_usercollision
183
+ assert_nothing_raised do
184
+ assert invoke(:is_admin)
185
+ end
186
+ assert invoke(:admin_user_signup,"newuser", "password", "password")
187
+ # user already exists; creation fails
188
+ assert_raises RuntimeError do
189
+ invoke(:admin_user_signup,"newuser", "password", "password")
190
+ end
191
+ assert invoke(:admin_user_delete,"newuser", "newuser")
192
+ end
193
+
194
+ def test_aaa_userlist # force it to go first, see what happens
195
+ assert invoke(:is_admin)
196
+ list=nil
197
+ assert_nothing_raised do
198
+ list=invoke :admin_user_list
199
+ end
200
+ assert list
201
+ assert_equal [ [ @admin_name, "Admin" ],
202
+ [ "testuser", "Test User" ],
203
+ [ "virtuser", "Virtual User" ] ], list.sort
204
+ end
205
+
206
+ end
207
+
208
+ class TC_Mailservice_AdminTasks_UserDeletion < MailserviceDomainAdmin
209
+ def test_usernolongerexists
210
+ assert_nothing_raised do
211
+ assert invoke(:is_admin)
212
+ end
213
+
214
+ # create the user
215
+ assert_nothing_raised do
216
+ assert invoke(:admin_user_signup,"newuser", "password", "password")
217
+ end
218
+
219
+ # user exists; deletion succeeds
220
+ assert_nothing_raised do
221
+ assert invoke(:admin_user_delete,"newuser", "newuser")
222
+ end
223
+
224
+ # user doesn't exist; login fails
225
+ assert_nothing_raised do
226
+ assert_equal false, invoke(:user_login,"newuser", "password")
227
+ end
228
+
229
+ # okay, our session's just been trashed again. Get it back.
230
+ assert_nothing_raised do
231
+ assert invoke(:user_login,@admin_name, "foobar")
232
+ end
233
+
234
+ # user doesn't exist; deletion fails
235
+ assert_nothing_raised do
236
+ assert_equal false, invoke(:admin_user_delete,"newuser", "newuser")
237
+ end
238
+ end
239
+ end
240
+
241
+ class TC_Mailservice_AdminTasks_UserPasswords < MailserviceDomainAdmin
242
+ def test_password_reset_normal
243
+ assert invoke(:is_admin)
244
+
245
+ assert_nothing_raised do
246
+ assert invoke(:admin_user_reset_password, "testuser",
247
+ "newpassword", "newpassword")
248
+ end
249
+ end
250
+
251
+ def test_password_reset_password_mismatch
252
+ assert invoke(:is_admin)
253
+
254
+ assert_raises RuntimeError do
255
+ invoke(:admin_user_reset_password, "testuser",
256
+ "newpassword", "differentnewpassword")
257
+ end
258
+ end
259
+
260
+ def test_password_reset_user_not_found
261
+ assert invoke(:is_admin)
262
+
263
+ assert_raises RuntimeError, "user: user not found" do
264
+ invoke(:admin_user_reset_password, "nonexistentuser", "foobar", "foobar")
265
+ end
266
+ end
267
+ end
268
+
269
+ class TC_Mailservice_UserTasks_ChangePassword < MailserviceUserLogin
270
+ def test_normal
271
+ assert_nothing_raised do
272
+ assert_equal true, invoke(:user_change_password, "foobar",
273
+ "foobarquux", "foobarquux")
274
+ end
275
+
276
+ invoke(:user_logout)
277
+ assert_equal false, invoke(:user_logged_in)
278
+ assert_equal false, invoke(:user_login, "testuser", "foobar")
279
+ assert_equal false, invoke(:user_logged_in)
280
+ assert_equal true, invoke(:user_login, "testuser", "foobarquux")
281
+ assert_equal true, invoke(:user_logged_in)
282
+ end
283
+
284
+ def test_illegal_password
285
+ assert_raises RuntimeError, "password: is too short (minimum is 5 characters)" do
286
+ invoke(:user_change_password, "foobar", "x", "x")
287
+ end
288
+ end
289
+
290
+ def test_original_password_wrong
291
+ assert_raises RuntimeError, "auth: original password incorrect" do
292
+ invoke(:user_change_password, "notfoobar",
293
+ "foobarquux", "foobarquux")
294
+ end
295
+ end
296
+ end
297
+
298
+ class TC_Mailservice_UserTasks_RealName < MailserviceUserLogin
299
+ def setup
300
+ super
301
+ @new_name = "Test User New"
302
+ end
303
+
304
+ def test_retrieve
305
+ assert_equal "Test User", invoke(:user_real_name)
306
+ end
307
+
308
+ def test_change
309
+ assert_nothing_raised do
310
+ assert_equal @new_name, invoke(:user_change_real_name,
311
+ "foobar",
312
+ @new_name)
313
+ end
314
+
315
+ assert_equal @new_name, invoke(:user_real_name)
316
+ end
317
+
318
+ def test_bad_password
319
+ assert_raises RuntimeError, "auth: password incorrect" do
320
+ invoke(:user_change_real_name, "nofoobar", @new_name)
321
+ end
322
+ end
323
+ end
324
+
325
+ class TC_MailService_EmailAddresses < MailserviceUserLogin
326
+ def test_emailaddress
327
+ assert_equal "testuser@#{@domain_name}", invoke(:user_email_address)
328
+ end
329
+
330
+
331
+ def test_emailaddresses
332
+ assert_equal [ "address1@foo.test",
333
+ "address2@foo.test" ],
334
+ invoke(:user_email_addresses).sort
335
+ assert_equal [ "address1@foo.test" ],
336
+ invoke(:user_email_addresses_confirmed).sort
337
+ end
338
+
339
+ def test_addremove
340
+ assert_nothing_raised do
341
+ assert invoke(:user_email_addresses_add,"brandnewuser@foo.test")
342
+ end
343
+
344
+ assert_nothing_raised do
345
+ assert_equal [ "address1@foo.test",
346
+ "address2@foo.test",
347
+ "brandnewuser@foo.test" ],
348
+ invoke(:user_email_addresses).sort
349
+ end
350
+ assert_nothing_raised do
351
+ assert_equal [ "address1@foo.test" ],
352
+ invoke(:user_email_addresses_confirmed).sort
353
+ end
354
+ assert_nothing_raised do
355
+ assert_equal [ "address2@foo.test", "brandnewuser@foo.test" ],
356
+ invoke(:user_email_addresses_unconfirmed).sort
357
+ end
358
+
359
+ confirmation_code=get_confirmation_code("testuser",
360
+ "brandnewuser@foo.test")
361
+
362
+ assert confirmation_code =~ /[0-9a-z]{16}/
363
+
364
+ assert_nothing_raised do
365
+ assert_equal false, invoke(:user_email_address_confirm,
366
+ "brandnewuser@foo.test",
367
+ confirmation_code+"foo")
368
+ end
369
+
370
+ assert_nothing_raised do
371
+ assert_equal true, invoke(:user_email_address_confirm,
372
+ "brandnewuser@foo.test",confirmation_code)
373
+ end
374
+
375
+ assert_nothing_raised do
376
+ assert_equal [ "address2@foo.test" ],
377
+ invoke(:user_email_addresses_unconfirmed).sort
378
+ end
379
+
380
+ assert_nothing_raised do
381
+ assert_equal [ "brandnewuser@foo.test" ],
382
+ invoke(:user_email_addresses_remove,
383
+ "brandnewuser@foo.test").sort
384
+ end
385
+
386
+ assert_nothing_raised do
387
+ assert_equal nil,
388
+ invoke(:user_email_addresses_remove,
389
+ "brandnewuser@foo.test")
390
+ end
391
+
392
+ assert_nothing_raised do
393
+ assert_equal [ "address1@foo.test",
394
+ "address2@foo.test" ],
395
+ invoke(:user_email_addresses).sort
396
+ end
397
+ end
398
+ end
399
+
400
+ class TC_Mailservice_MailinglistClasses < MailserviceUserLogin
401
+
402
+ def setup
403
+ super
404
+ @mailing_list = @loaded_fixtures["mailinglist_classes"] \
405
+ ["mailinglist_class_mailing_list"]
406
+ @distribution_list = @loaded_fixtures["mailinglist_classes"] \
407
+ ["mailinglist_class_distribution_list"]
408
+ end
409
+
410
+ def test_get_mailinglist_classes
411
+ assert_equal [ 'Distribution List', 'Mailing List' ],
412
+ invoke(:mailinglist_classes).sort
413
+ end
414
+
415
+ def test_get_mailinglist_class
416
+ assert mlclass = invoke(:mailinglist_class_get_attributes,
417
+ "Mailing List")
418
+ assert_equal @mailing_list["description"], mlclass.description
419
+ assert_equal @mailing_list["public"], mlclass.public
420
+ assert_equal @mailing_list["moderated"], mlclass.moderated
421
+ assert_equal @mailing_list["confirmation"], mlclass.confirmation
422
+ assert_equal @mailing_list["joinable"], mlclass.joinable
423
+ assert_equal @mailing_list["closed"], mlclass.closed
424
+ assert_equal @mailing_list["archived"], mlclass.archived
425
+
426
+ assert dlclass = invoke(:mailinglist_class_get_attributes,
427
+ "Distribution List")
428
+ assert_equal @distribution_list["description"], dlclass.description
429
+ assert_equal @distribution_list["public"], dlclass.public
430
+ assert_equal @distribution_list["moderated"], dlclass.moderated
431
+ assert_equal @distribution_list["confirmation"], dlclass.confirmation
432
+ assert_equal @distribution_list["joinable"], dlclass.joinable
433
+ assert_equal @distribution_list["closed"], dlclass.closed
434
+ assert_equal @distribution_list["archived"], dlclass.archived
435
+ end
436
+ end
437
+
438
+ class TC_Mailservice_UserMailingLists < MailserviceUserLogin
439
+ def test_mailinglists
440
+ user_mailinglists=invoke(:user_mailinglists)
441
+ assert_equal [ 3 ],
442
+ invoke(:user_mailinglists)
443
+ assert_equal "testml", invoke(:mailinglist_name,3)
444
+ end
445
+ end
446
+
447
+ class TC_Mailservice_CreateMailinglist < MailserviceUserLogin
448
+ def test_create_mailinglist
449
+ assert_equal "testmailinglist@test.domain",
450
+ invoke(:mailinglist_create, "testmailinglist", "Mailing List")
451
+ assert id = invoke(:mailinglist_find_by_name, "testmailinglist")
452
+ assert invoke(:mailinglist_delete, id)
453
+ assert_equal nil, invoke(:mailinglist_find_by_name, "testmailinglist")
454
+ end
455
+ end
456
+
457
+ class MailserviceUserMailinglist < MailserviceUserLogin
458
+ def setup
459
+ super
460
+ invoke(:mailinglist_create,"testmailinglist", "Mailing List")
461
+ @id = invoke(:mailinglist_find_by_name,"testmailinglist")
462
+ end
463
+
464
+ def teardown
465
+ invoke(:mailinglist_delete,@id)
466
+ super
467
+ end
468
+
469
+ def test_0_mailinglist_exists
470
+ assert id = invoke(:mailinglist_find_by_name, "testmailinglist")
471
+ assert_equal @id, id
472
+
473
+ assert_equal "testmailinglist", invoke(:mailinglist_name, id)
474
+ assert_raises RuntimeError, "Mailing list not found" do
475
+ invoke(:mailinglist_name, 999)
476
+ end
477
+
478
+ assert_raises RuntimeError, "Permission denied" do
479
+ invoke(:mailinglist_name, 2)
480
+ end
481
+ end
482
+ end
483
+
484
+ class TC_Mailservice_MailingListSubscribe < MailserviceUserMailinglist
485
+ def test_mailinglist_subscribe
486
+ assert @id
487
+
488
+ assert_nothing_raised do
489
+ assert_equal [ ],
490
+ invoke(:mailinglist_subscribers,@id).sort
491
+ end
492
+
493
+ assert_nothing_raised do
494
+ assert invoke(:mailinglist_subscribe,@id,"test@foo.test")
495
+ end
496
+
497
+ assert_nothing_raised do
498
+ assert_equal [ ],
499
+ invoke(:mailinglist_subscribers,@id).sort
500
+ end
501
+
502
+ assert_nothing_raised do
503
+ assert_equal [ "test@foo.test" ],
504
+ invoke(:mailinglist_pending,@id)
505
+ end
506
+
507
+ confirmation=nil
508
+
509
+ assert_nothing_raised do
510
+ confirmation=get_confirmation_code("testmailinglist",
511
+ "test@foo.test")
512
+ end
513
+
514
+ assert confirmation =~ /[0-9a-z]{16}/
515
+
516
+ assert_nothing_raised do
517
+ assert_equal false, invoke(:mailinglist_confirm,
518
+ "testmailinglist", "test@foo.test",
519
+ "@@@@@@@@@@@@@@@@")
520
+ end
521
+
522
+ assert_nothing_raised do
523
+ assert_equal true, invoke(:mailinglist_confirm,
524
+ "testmailinglist", "test@foo.test",
525
+ confirmation)
526
+ end
527
+
528
+ assert_nothing_raised do
529
+ assert_equal [ "test@foo.test" ],
530
+ invoke(:mailinglist_subscribers,@id).sort
531
+ end
532
+
533
+ assert_nothing_raised do
534
+ assert invoke(:mailinglist_unsubscribe,@id,"test@foo.test")
535
+ end
536
+
537
+ assert_nothing_raised do
538
+ assert_equal [ ],
539
+ invoke(:mailinglist_subscribers,@id).sort
540
+ end
541
+ end
542
+
543
+ def test_mailinglist_message
544
+ # @server.mailinglistMessages(@id)
545
+ end
546
+ end