commontator 4.0.2 → 4.1.1

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -5
  3. data/app/assets/stylesheets/commontator/comments.css +16 -5
  4. data/app/assets/stylesheets/commontator/comments.css~ +98 -0
  5. data/app/controllers/commontator/application_controller.rb +6 -3
  6. data/app/controllers/commontator/application_controller.rb~ +30 -0
  7. data/app/controllers/commontator/threads_controller.rb +2 -0
  8. data/app/controllers/commontator/threads_controller.rb~ +44 -0
  9. data/app/helpers/commontator/threads_helper.rb +1 -8
  10. data/app/helpers/commontator/threads_helper.rb~ +11 -0
  11. data/app/mailers/commontator/subscriptions_mailer.rb +2 -4
  12. data/app/mailers/commontator/subscriptions_mailer.rb~ +50 -0
  13. data/app/models/commontator/comment.rb +23 -19
  14. data/app/models/commontator/comment.rb~ +106 -0
  15. data/app/models/commontator/thread.rb +10 -10
  16. data/app/models/commontator/thread.rb~ +124 -0
  17. data/app/views/commontator/comments/_show.html.erb +36 -34
  18. data/app/views/commontator/comments/_show.html.erb~ +47 -0
  19. data/app/views/commontator/comments/_votes.html.erb +6 -2
  20. data/app/views/commontator/comments/_votes.html.erb~ +61 -0
  21. data/app/views/commontator/comments/delete.js.erb +2 -2
  22. data/app/views/commontator/comments/delete.js.erb~ +17 -0
  23. data/app/views/commontator/comments/update.js.erb +2 -2
  24. data/app/views/commontator/comments/update.js.erb~ +7 -0
  25. data/app/views/commontator/subscriptions_mailer/comment_created.html.erb +2 -2
  26. data/app/views/commontator/subscriptions_mailer/comment_created.html.erb~ +6 -0
  27. data/app/views/commontator/threads/_show.html.erb +3 -7
  28. data/app/views/commontator/threads/_show.html.erb~ +58 -0
  29. data/config/initializers/commontator.rb +52 -47
  30. data/config/initializers/commontator.rb~ +176 -0
  31. data/lib/commontator.rb +6 -7
  32. data/lib/commontator.rb~ +61 -0
  33. data/lib/commontator/controller_includes.rb +1 -3
  34. data/lib/commontator/controller_includes.rb~ +22 -0
  35. data/lib/commontator/shared_helper.rb +3 -8
  36. data/lib/commontator/shared_helper.rb~ +37 -0
  37. data/lib/commontator/version.rb +1 -1
  38. data/lib/commontator/version.rb~ +3 -0
  39. data/spec/app/controllers/commontator/comments_controller_spec.rb +64 -45
  40. data/spec/app/controllers/commontator/comments_controller_spec.rb~ +580 -0
  41. data/spec/app/controllers/commontator/subscriptions_controller_spec.rb +3 -3
  42. data/spec/app/controllers/commontator/subscriptions_controller_spec.rb~ +99 -0
  43. data/spec/app/controllers/commontator/threads_controller_spec.rb +15 -9
  44. data/spec/app/controllers/commontator/threads_controller_spec.rb~ +126 -0
  45. data/spec/app/helpers/commontator/application_helper_spec.rb +1 -1
  46. data/spec/app/helpers/commontator/application_helper_spec.rb~ +9 -0
  47. data/spec/app/helpers/commontator/threads_helper_spec.rb +1 -5
  48. data/spec/app/helpers/commontator/threads_helper_spec.rb~ +13 -0
  49. data/spec/app/models/commontator/comment_spec.rb +4 -3
  50. data/spec/app/models/commontator/comment_spec.rb~ +62 -0
  51. data/spec/dummy/config/application.rb +1 -1
  52. data/spec/dummy/config/application.rb~ +27 -0
  53. data/spec/dummy/config/initializers/commontator.rb +67 -55
  54. data/spec/dummy/config/initializers/commontator.rb~ +176 -0
  55. data/spec/dummy/config/initializers/commontator2.rb~ +169 -0
  56. data/spec/dummy/db/test.sqlite3 +0 -0
  57. data/spec/dummy/log/test.log +84489 -0
  58. data/spec/dummy/tmp/cache/assets/test/sprockets/02d4b791eb831cf2057bf4703a1218d1 +0 -0
  59. data/spec/dummy/tmp/cache/assets/test/sprockets/0f196a1a50363b0a076ec6e1ee5417f6 +0 -0
  60. data/spec/dummy/tmp/cache/assets/test/sprockets/a41c8be5379abec3c0d0d98e2f0d5609 +0 -0
  61. data/spec/dummy/tmp/cache/assets/test/sprockets/e1f674c11941d62aac1764ef3a7134e4 +0 -0
  62. data/spec/dummy/tmp/cache/assets/test/sprockets/e85565206c3e5fdf9dfeb367c85557b1 +0 -0
  63. data/spec/lib/commontator/commontable_config_spec.rb +1 -1
  64. data/spec/lib/commontator/commontable_config_spec.rb~ +26 -0
  65. data/spec/lib/commontator/commontator_config_spec.rb +5 -5
  66. data/spec/lib/commontator/commontator_config_spec.rb~ +26 -0
  67. data/spec/lib/commontator_spec.rb +6 -4
  68. data/spec/lib/commontator_spec.rb~ +28 -0
  69. data/spec/test_helper.rb +4 -4
  70. data/spec/test_helper.rb~ +37 -0
  71. metadata +46 -2
@@ -0,0 +1,580 @@
1
+ require 'test_helper'
2
+ require 'acts_as_votable'
3
+
4
+ module Commontator
5
+ describe CommentsController do
6
+ before do
7
+ setup_controller_spec
8
+ @comment = Comment.new
9
+ @comment.thread = @thread
10
+ @comment.creator = @user
11
+ @comment.body = 'Something'
12
+ @comment.save!
13
+ @comment.is_votable?.must_equal true
14
+ end
15
+
16
+ it "won't get new unless authorized" do
17
+ get :new, :thread_id => @thread.id, :use_route => :commontator
18
+ assert_response 403
19
+
20
+ sign_in @user
21
+ get :new, :thread_id => @thread.id, :use_route => :commontator
22
+ assert_response 403
23
+ end
24
+
25
+ it 'must get new if authorized' do
26
+ sign_in @user
27
+
28
+ @user.can_read = true
29
+ get :new, :thread_id => @thread.id, :use_route => :commontator
30
+ assert_redirected_to @thread
31
+ assigns(:comment).errors.must_be_empty
32
+
33
+ @user.can_read = false
34
+ @user.can_edit = true
35
+ get :new, :thread_id => @thread.id, :use_route => :commontator
36
+ assert_redirected_to @thread
37
+ assigns(:comment).errors.must_be_empty
38
+
39
+ @user.can_edit = false
40
+ @user.is_admin = true
41
+ get :new, :thread_id => @thread.id, :use_route => :commontator
42
+ assert_redirected_to @thread
43
+ assigns(:comment).errors.must_be_empty
44
+ end
45
+
46
+ it "won't create unless authorized" do
47
+ attributes = Hash.new
48
+ attributes[:body] = 'Something else'
49
+
50
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
51
+ assert_response 403
52
+
53
+ sign_in @user
54
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
55
+ assert_response 403
56
+
57
+ @user.can_read = true
58
+ @user.can_edit = true
59
+ @user.is_admin = true
60
+ @thread.close.must_equal true
61
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
62
+ assert_response 403
63
+ end
64
+
65
+ it 'must create if authorized' do
66
+ sign_in @user
67
+ attributes = Hash.new
68
+
69
+ attributes[:body] = 'Something else'
70
+ @user.can_read = true
71
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
72
+ assert_redirected_to @thread
73
+ assigns(:comment).errors.must_be_empty
74
+ assigns(:comment).body.must_equal 'Something else'
75
+ assigns(:comment).creator.must_equal @user
76
+ assigns(:comment).editor.must_be_nil
77
+ assigns(:comment).thread.must_equal @thread
78
+
79
+ attributes[:body] = 'Another thing'
80
+ @user.can_read = false
81
+ @user.can_edit = true
82
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
83
+ assert_redirected_to @thread
84
+ assigns(:comment).errors.must_be_empty
85
+ assigns(:comment).body.must_equal 'Another thing'
86
+ assigns(:comment).creator.must_equal @user
87
+ assigns(:comment).editor.must_be_nil
88
+ assigns(:comment).thread.must_equal @thread
89
+
90
+ attributes[:body] = 'And this too'
91
+ @user.can_edit = false
92
+ @user.is_admin = true
93
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
94
+ assert_redirected_to @thread
95
+ assigns(:comment).errors.must_be_empty
96
+ assigns(:comment).body.must_equal 'And this too'
97
+ assigns(:comment).creator.must_equal @user
98
+ assigns(:comment).editor.must_be_nil
99
+ assigns(:comment).thread.must_equal @thread
100
+ end
101
+
102
+ it "won't create if double posting" do
103
+ sign_in @user
104
+ @user.can_read = true
105
+ attributes = Hash.new
106
+
107
+ attributes[:body] = 'Something'
108
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
109
+ assert_redirected_to @thread
110
+ assigns(:comment).errors.wont_be_empty
111
+
112
+ attributes[:body] = 'Something else'
113
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
114
+ assert_redirected_to @thread
115
+ assigns(:comment).errors.must_be_empty
116
+ assigns(:comment).body.must_equal 'Something else'
117
+ assigns(:comment).creator.must_equal @user
118
+ assigns(:comment).editor.must_be_nil
119
+ assigns(:comment).thread.must_equal @thread
120
+
121
+ attributes[:body] = 'Something else'
122
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
123
+ assert_redirected_to @thread
124
+ assigns(:comment).errors.wont_be_empty
125
+ end
126
+
127
+ it "won't edit unless authorized" do
128
+ get :edit, :id => @comment.id, :use_route => :commontator
129
+ assert_response 403
130
+
131
+ sign_in @user
132
+ get :edit, :id => @comment.id, :use_route => :commontator
133
+ assert_response 403
134
+
135
+ user2 = DummyUser.create
136
+ user2.can_read = true
137
+ user2.can_edit = true
138
+ user2.is_admin = true
139
+ sign_in user2
140
+ get :edit, :id => @comment.id, :use_route => :commontator
141
+ assert_response 403
142
+
143
+ @user.can_read = true
144
+ @user.can_edit = true
145
+ @user.is_admin = true
146
+ sign_in @user
147
+ comment2 = Comment.new
148
+ comment2.thread = @thread
149
+ comment2.creator = @user
150
+ comment2.body = 'Something else'
151
+ comment2.save!
152
+ get :edit, :id => @comment.id, :use_route => :commontator
153
+ assert_response 403
154
+ end
155
+
156
+ it 'must edit if authorized' do
157
+ sign_in @user
158
+
159
+ @user.can_read = true
160
+ get :edit, :id => @comment.id, :use_route => :commontator
161
+ assert_redirected_to @thread
162
+ assigns(:comment).errors.must_be_empty
163
+
164
+ @user.can_read = false
165
+ @user.can_edit = true
166
+ get :edit, :id => @comment.id, :use_route => :commontator
167
+ assert_redirected_to @thread
168
+ assigns(:comment).errors.must_be_empty
169
+
170
+ @user.can_edit = false
171
+ @user.is_admin = true
172
+ get :edit, :id => @comment.id, :use_route => :commontator
173
+ assert_redirected_to @thread
174
+ assigns(:comment).errors.must_be_empty
175
+ end
176
+
177
+ it "won't update unless authorized" do
178
+ attributes = Hash.new
179
+ attributes[:body] = 'Something else'
180
+
181
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
182
+ assert_response 403
183
+ @comment.reload
184
+ @comment.body.must_equal 'Something'
185
+ @comment.editor.must_be_nil
186
+
187
+ sign_in @user
188
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
189
+ assert_response 403
190
+ @comment.reload
191
+ @comment.body.must_equal 'Something'
192
+ @comment.editor.must_be_nil
193
+
194
+ user2 = DummyUser.create
195
+ user2.can_read = true
196
+ user2.can_edit = true
197
+ user2.is_admin = true
198
+ sign_in user2
199
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
200
+ assert_response 403
201
+ @comment.reload
202
+ @comment.body.must_equal 'Something'
203
+ @comment.editor.must_be_nil
204
+
205
+ @user.can_read = true
206
+ @user.can_edit = true
207
+ @user.is_admin = true
208
+ sign_in @user
209
+ comment2 = Comment.new
210
+ comment2.thread = @thread
211
+ comment2.creator = @user
212
+ comment2.body = 'Something else'
213
+ comment2.save!
214
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
215
+ @comment.reload
216
+ @comment.body.must_equal 'Something'
217
+ @comment.editor.must_be_nil
218
+ end
219
+
220
+ it 'must update if authorized' do
221
+ sign_in @user
222
+ attributes = Hash.new
223
+ attributes[:body] = 'Something else'
224
+
225
+ @user.can_read = true
226
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
227
+ assert_redirected_to @thread
228
+ assigns(:comment).errors.must_be_empty
229
+ assigns(:comment).editor.must_equal @user
230
+
231
+ @user.can_read = false
232
+ @user.can_edit = true
233
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
234
+ assert_redirected_to @thread
235
+ assigns(:comment).errors.must_be_empty
236
+ assigns(:comment).editor.must_equal @user
237
+
238
+ @user.can_edit = false
239
+ @user.is_admin = true
240
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
241
+ assert_redirected_to @thread
242
+ assigns(:comment).errors.must_be_empty
243
+ assigns(:comment).editor.must_equal @user
244
+ end
245
+
246
+ it "won't delete unless authorized and not deleted" do
247
+ put :delete, :id => @comment.id, :use_route => :commontator
248
+ assert_response 403
249
+ @comment.reload
250
+ @comment.is_deleted?.must_equal false
251
+
252
+ sign_in @user
253
+
254
+ put :delete, :id => @comment.id, :use_route => :commontator
255
+ assert_response 403
256
+ @comment.reload
257
+ @comment.is_deleted?.must_equal false
258
+
259
+ @user.can_read = true
260
+ @comment.delete_by(@user).must_equal true
261
+ put :delete, :id => @comment.id, :use_route => :commontator
262
+ assert_redirected_to @thread
263
+ assigns(:comment).errors.wont_be_empty
264
+
265
+ comment2 = Comment.new
266
+ comment2.thread = @thread
267
+ comment2.creator = @user
268
+ comment2.body = 'Something else'
269
+ comment2.save!
270
+ @comment.undelete_by(@user).must_equal true
271
+ put :delete, :id => @comment.id, :use_route => :commontator
272
+ assert_response 403
273
+ @comment.reload
274
+ @comment.is_deleted?.must_equal false
275
+ end
276
+
277
+ it 'must delete if authorized and not deleted' do
278
+ sign_in @user
279
+
280
+ @user.can_read = true
281
+ put :delete, :id => @comment.id, :use_route => :commontator
282
+ assert_redirected_to @thread
283
+ assigns(:comment).errors.must_be_empty
284
+ assigns(:comment).is_deleted?.must_equal true
285
+ assigns(:comment).editor.must_equal @user
286
+
287
+ user2 = DummyUser.create
288
+ sign_in user2
289
+ comment2 = Comment.new
290
+ comment2.thread = @thread
291
+ comment2.creator = @user
292
+ comment2.body = 'Something else'
293
+ comment2.save!
294
+
295
+ assigns(:comment).undelete_by(@user).must_equal true
296
+ user2.can_edit = true
297
+ put :delete, :id => @comment.id, :use_route => :commontator
298
+ assert_redirected_to @thread
299
+ assigns(:comment).errors.must_be_empty
300
+ assigns(:comment).is_deleted?.must_equal true
301
+ assigns(:comment).editor.must_equal user2
302
+
303
+ assigns(:comment).undelete_by(@user).must_equal true
304
+ user2.can_edit = false
305
+ user2.is_admin = true
306
+ put :delete, :id => @comment.id, :use_route => :commontator
307
+ assert_redirected_to @thread
308
+ assigns(:comment).errors.must_be_empty
309
+ assigns(:comment).is_deleted?.must_equal true
310
+ assigns(:comment).editor.must_equal user2
311
+ end
312
+
313
+ it "won't undelete unless authorized and deleted" do
314
+ @comment.delete_by(@user).must_equal true
315
+ put :undelete, :id => @comment.id, :use_route => :commontator
316
+ assert_response 403
317
+ @comment.reload
318
+ @comment.is_deleted?.must_equal true
319
+
320
+ sign_in @user
321
+
322
+ put :undelete, :id => @comment.id, :use_route => :commontator
323
+ assert_response 403
324
+ @comment.reload
325
+ @comment.is_deleted?.must_equal true
326
+
327
+ @user.can_read = true
328
+ @comment.undelete_by(@user).must_equal true
329
+ put :undelete, :id => @comment.id, :use_route => :commontator
330
+ assert_redirected_to @thread
331
+ assigns(:comment).errors.wont_be_empty
332
+
333
+ user2 = DummyUser.create
334
+ user2.can_read = true
335
+ user2.can_edit = true
336
+ user2.is_admin = true
337
+ @comment.delete_by(user2).must_equal true
338
+ put :undelete, :id => @comment.id, :use_route => :commontator
339
+ assert_response 403
340
+ @comment.reload
341
+ @comment.is_deleted?.must_equal true
342
+
343
+ comment2 = Comment.new
344
+ comment2.thread = @thread
345
+ comment2.creator = @user
346
+ comment2.body = 'Something else'
347
+ comment2.save!
348
+ @comment.undelete_by(@user).must_equal true
349
+ @comment.delete_by(@user).must_equal true
350
+ put :undelete, :id => @comment.id, :use_route => :commontator
351
+ assert_response 403
352
+ @comment.reload
353
+ @comment.is_deleted?.must_equal true
354
+ end
355
+
356
+ it 'must undelete if authorized and deleted' do
357
+ sign_in @user
358
+
359
+ @comment.delete_by(@user).must_equal true
360
+ @user.can_read = true
361
+ put :undelete, :id => @comment.id, :use_route => :commontator
362
+ assert_redirected_to @thread
363
+ assigns(:comment).errors.must_be_empty
364
+ assigns(:comment).is_deleted?.must_equal false
365
+
366
+ user2 = DummyUser.create
367
+ sign_in user2
368
+ comment2 = Comment.new
369
+ comment2.thread = @thread
370
+ comment2.creator = @user
371
+ comment2.body = 'Something else'
372
+ comment2.save!
373
+
374
+ assigns(:comment).delete_by(@user).must_equal true
375
+ user2.can_edit = true
376
+ put :undelete, :id => @comment.id, :use_route => :commontator
377
+ assert_redirected_to @thread
378
+ assigns(:comment).errors.must_be_empty
379
+ assigns(:comment).is_deleted?.must_equal false
380
+
381
+ assigns(:comment).delete_by(@user).must_equal true
382
+ user2.can_edit = false
383
+ user2.is_admin = true
384
+ put :undelete, :id => @comment.id, :use_route => :commontator
385
+ assert_redirected_to @thread
386
+ assigns(:comment).errors.must_be_empty
387
+ assigns(:comment).is_deleted?.must_equal false
388
+ end
389
+
390
+ it "won't upvote unless authorized" do
391
+ put :upvote, :id => @comment.id, :use_route => :commontator
392
+ assert_response 403
393
+ @comment.reload
394
+ @comment.upvotes.must_be_empty
395
+ @comment.downvotes.must_be_empty
396
+
397
+ sign_in @user
398
+ @user.can_read = true
399
+ put :upvote, :id => @comment.id, :use_route => :commontator
400
+ assert_response 403
401
+ @comment.reload
402
+ @comment.upvotes.must_be_empty
403
+ @comment.downvotes.must_be_empty
404
+
405
+ user2 = DummyUser.create
406
+ sign_in user2
407
+ put :upvote, :id => @comment.id, :use_route => :commontator
408
+ assert_response 403
409
+ @comment.reload
410
+ @comment.upvotes.must_be_empty
411
+ @comment.downvotes.must_be_empty
412
+ end
413
+
414
+ it 'must upvote if authorized' do
415
+ user2 = DummyUser.create
416
+ user2.can_read = true
417
+ sign_in user2
418
+
419
+ put :upvote, :id => @comment.id, :use_route => :commontator
420
+ assert_redirected_to @thread
421
+ assigns(:comment).upvotes.count.must_equal 1
422
+ assigns(:comment).downvotes.must_be_empty
423
+
424
+ put :upvote, :id => @comment.id, :use_route => :commontator
425
+ assert_redirected_to @thread
426
+ assigns(:comment).upvotes.count.must_equal 1
427
+ assigns(:comment).downvotes.must_be_empty
428
+
429
+ @comment.downvote_from(user2).must_equal true
430
+
431
+ put :upvote, :id => @comment.id, :use_route => :commontator
432
+ assert_redirected_to @thread
433
+ assigns(:comment).upvotes.count.must_equal 1
434
+ assigns(:comment).downvotes.must_be_empty
435
+ end
436
+
437
+ it "won't downvote unless authorized" do
438
+ put :downvote, :id => @comment.id, :use_route => :commontator
439
+ assert_response 403
440
+ @comment.reload
441
+ @comment.upvotes.must_be_empty
442
+ @comment.downvotes.must_be_empty
443
+
444
+ sign_in @user
445
+ @user.can_read = true
446
+ put :downvote, :id => @comment.id, :use_route => :commontator
447
+ assert_response 403
448
+ @comment.reload
449
+ @comment.upvotes.must_be_empty
450
+ @comment.downvotes.must_be_empty
451
+
452
+ user2 = DummyUser.create
453
+ sign_in user2
454
+ put :downvote, :id => @comment.id, :use_route => :commontator
455
+ assert_response 403
456
+ @comment.reload
457
+ @comment.upvotes.must_be_empty
458
+ @comment.downvotes.must_be_empty
459
+ end
460
+
461
+ it 'must downvote if authorized' do
462
+ user2 = DummyUser.create
463
+ user2.can_read = true
464
+ sign_in user2
465
+
466
+ put :downvote, :id => @comment.id, :use_route => :commontator
467
+ assert_redirected_to @thread
468
+ assigns(:comment).upvotes.must_be_empty
469
+ assigns(:comment).downvotes.count.must_equal 1
470
+
471
+ put :downvote, :id => @comment.id, :use_route => :commontator
472
+ assert_redirected_to @thread
473
+ assigns(:comment).upvotes.must_be_empty
474
+ assigns(:comment).downvotes.count.must_equal 1
475
+
476
+ @comment.upvote_from(user2).must_equal true
477
+
478
+ put :downvote, :id => @comment.id, :use_route => :commontator
479
+ assert_redirected_to @thread
480
+ assigns(:comment).upvotes.must_be_empty
481
+ assigns(:comment).downvotes.count.must_equal 1
482
+ end
483
+
484
+ it "won't unvote unless authorized" do
485
+ @comment.upvote_from(@user).must_equal true
486
+
487
+ put :unvote, :id => @comment.id, :use_route => :commontator
488
+ assert_response 403
489
+ assigns(:comment).upvotes.count.must_equal 1
490
+ assigns(:comment).downvotes.must_be_empty
491
+
492
+ sign_in @user
493
+ @user.can_read = true
494
+ put :unvote, :id => @comment.id, :use_route => :commontator
495
+ assert_response 403
496
+ assigns(:comment).upvotes.count.must_equal 1
497
+ assigns(:comment).downvotes.must_be_empty
498
+
499
+ user2 = DummyUser.create
500
+ sign_in user2
501
+ put :unvote, :id => @comment.id, :use_route => :commontator
502
+ assert_response 403
503
+ @comment.reload
504
+ @comment.upvotes.count.must_equal 1
505
+ @comment.downvotes.must_be_empty
506
+ end
507
+
508
+ it 'must unvote if authorized' do
509
+ user2 = DummyUser.create
510
+ user2.can_read = true
511
+ sign_in user2
512
+
513
+ @comment.upvote_from(user2).must_equal true
514
+ put :unvote, :id => @comment.id, :use_route => :commontator
515
+ assert_redirected_to @thread
516
+ assigns(:comment).upvotes.must_be_empty
517
+ assigns(:comment).downvotes.must_be_empty
518
+
519
+ put :unvote, :id => @comment.id, :use_route => :commontator
520
+ assert_redirected_to @thread
521
+ assigns(:comment).upvotes.must_be_empty
522
+ assigns(:comment).downvotes.must_be_empty
523
+
524
+ @comment.downvote_from(user2).must_equal true
525
+ put :unvote, :id => @comment.id, :use_route => :commontator
526
+ assert_redirected_to @thread
527
+ assigns(:comment).upvotes.must_be_empty
528
+ assigns(:comment).downvotes.must_be_empty
529
+ end
530
+
531
+ it "won't send mail if recipients empty" do
532
+ if defined?(CommentsController::SubscriptionsMailer)
533
+ CommentsController::SubscriptionsMailer.__send__(:initialize)
534
+ else
535
+ CommentsController::SubscriptionsMailer = MiniTest::Mock.new
536
+ end
537
+
538
+ user2 = DummyUser.create
539
+ user2.can_read = true
540
+
541
+ email = MiniTest::Mock.new.expect(:deliver, nil)
542
+ CommentsController::SubscriptionsMailer.expect(:comment_created, email, [Comment, [user2]])
543
+
544
+ @user.can_read = true
545
+ sign_in @user
546
+
547
+ attributes = {:body => 'Something else'}
548
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
549
+ assigns(:comment).errors.must_be_empty
550
+
551
+ proc { CommentsController::SubscriptionsMailer.verify }.must_raise(MockExpectationError)
552
+ proc { email.verify }.must_raise(MockExpectationError)
553
+ end
554
+
555
+ it 'must send mail if recipients not empty' do
556
+ if defined?(CommentsController::SubscriptionsMailer)
557
+ CommentsController::SubscriptionsMailer.__send__(:initialize)
558
+ else
559
+ CommentsController::SubscriptionsMailer = MiniTest::Mock.new
560
+ end
561
+
562
+ user2 = DummyUser.create
563
+ user2.can_read = true
564
+ @thread.subscribe(user2)
565
+
566
+ email = MiniTest::Mock.new.expect(:deliver, nil)
567
+ CommentsController::SubscriptionsMailer.expect(:comment_created, email, [Comment, [user2]])
568
+
569
+ @user.can_read = true
570
+ sign_in @user
571
+
572
+ attributes = {:body => 'Something else'}
573
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
574
+ assigns(:comment).errors.must_be_empty
575
+
576
+ CommentsController::SubscriptionsMailer.verify
577
+ email.verify
578
+ end
579
+ end
580
+ end