commontator 1.0.2 → 1.0.3

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 (108) hide show
  1. data/lib/commontator/version.rb +1 -1
  2. data/lib/commontator/version.rb~ +1 -1
  3. data/spec/app/controllers/comments_controller_spec.rb~ +7 -0
  4. data/spec/app/controllers/commontator/application_controller_spec.rb~ +30 -0
  5. data/spec/app/controllers/commontator/comments_controller_spec.rb +473 -0
  6. data/spec/app/controllers/commontator/comments_controller_spec.rb~ +473 -0
  7. data/spec/app/controllers/commontator/subscriptions_controller_spec.rb +99 -0
  8. data/spec/app/controllers/commontator/subscriptions_controller_spec.rb~ +99 -0
  9. data/spec/app/controllers/commontator/threads_controller_spec.rb +121 -0
  10. data/spec/app/controllers/commontator/threads_controller_spec.rb~ +121 -0
  11. data/spec/app/controllers/threads_controller_spec.rb~ +12 -0
  12. data/spec/app/helpers/commontator/application_helper_spec.rb +7 -0
  13. data/spec/app/helpers/commontator/application_helper_spec.rb~ +7 -0
  14. data/spec/app/helpers/commontator/threads_helper_spec.rb +17 -0
  15. data/spec/app/helpers/commontator/threads_helper_spec.rb~ +17 -0
  16. data/spec/app/mailers/commontator/subscriptions_mailer_spec.rb +38 -0
  17. data/spec/app/mailers/commontator/subscriptions_mailer_spec.rb~ +37 -0
  18. data/spec/app/models/commontator/comment_spec.rb +60 -0
  19. data/spec/app/models/commontator/comment_spec.rb~ +60 -0
  20. data/spec/app/models/commontator/subscription_spec.rb +28 -0
  21. data/spec/app/models/commontator/subscription_spec.rb~ +28 -0
  22. data/spec/app/models/commontator/thread_spec.rb +130 -0
  23. data/spec/app/models/commontator/thread_spec.rb~ +130 -0
  24. data/spec/dummy/Gemfile~ +3 -0
  25. data/spec/dummy/README.md +3 -0
  26. data/spec/dummy/README.md~ +3 -0
  27. data/spec/dummy/Rakefile +7 -0
  28. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  29. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  30. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  31. data/spec/dummy/app/controllers/application_controller.rb~ +7 -0
  32. data/spec/dummy/app/controllers/dummies_controller.rb~ +17 -0
  33. data/spec/dummy/app/controllers/dummy_models_controller.rb +29 -0
  34. data/spec/dummy/app/controllers/dummy_models_controller.rb~ +29 -0
  35. data/spec/dummy/app/helpers/application_helper.rb +15 -0
  36. data/spec/dummy/app/helpers/application_helper.rb~ +15 -0
  37. data/spec/dummy/app/models/dummy.rb~ +3 -0
  38. data/spec/dummy/app/models/dummy_model.rb +3 -0
  39. data/spec/dummy/app/models/dummy_user.rb +9 -0
  40. data/spec/dummy/app/models/dummy_user.rb~ +9 -0
  41. data/spec/dummy/app/models/user.rb~ +5 -0
  42. data/spec/dummy/app/views/dummy_model/show.html.erb +1 -0
  43. data/spec/dummy/app/views/dummy_model/show.html.erb~ +1 -0
  44. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  45. data/spec/dummy/config.ru +4 -0
  46. data/spec/dummy/config/application.rb +59 -0
  47. data/spec/dummy/config/application.rb~ +59 -0
  48. data/spec/dummy/config/boot.rb +10 -0
  49. data/spec/dummy/config/database.yml +25 -0
  50. data/spec/dummy/config/environment.rb +5 -0
  51. data/spec/dummy/config/environments/development.rb +37 -0
  52. data/spec/dummy/config/environments/production.rb +67 -0
  53. data/spec/dummy/config/environments/test.rb +37 -0
  54. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  55. data/spec/dummy/config/initializers/commontator.rb +158 -0
  56. data/spec/dummy/config/initializers/commontator.rb~ +157 -0
  57. data/spec/dummy/config/initializers/inflections.rb +15 -0
  58. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  59. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  60. data/spec/dummy/config/initializers/session_store.rb +8 -0
  61. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  62. data/spec/dummy/config/locales/en.yml +5 -0
  63. data/spec/dummy/config/routes.rb +7 -0
  64. data/spec/dummy/config/routes.rb~ +7 -0
  65. data/spec/dummy/db/development.sqlite3 +0 -0
  66. data/spec/dummy/db/migrate/0_create_dummies.rb~ +48 -0
  67. data/spec/dummy/db/migrate/0_create_dummy_models.rb +7 -0
  68. data/spec/dummy/db/migrate/0_create_dummy_models.rb~ +7 -0
  69. data/spec/dummy/db/migrate/1_create_dummy_users.rb +7 -0
  70. data/spec/dummy/db/migrate/1_create_dummy_users.rb~ +7 -0
  71. data/spec/dummy/db/migrate/1_create_users.rb~ +7 -0
  72. data/spec/dummy/db/migrate/2_install_commontator.rb +49 -0
  73. data/spec/dummy/db/migrate/2_install_commontator.rb~ +49 -0
  74. data/spec/dummy/db/migrate/3_acts_as_votable_migration.rb +20 -0
  75. data/spec/dummy/db/schema.rb +84 -0
  76. data/spec/dummy/db/schema.rb~ +71 -0
  77. data/spec/dummy/db/test.sqlite3 +0 -0
  78. data/spec/dummy/log/development.log +14298 -0
  79. data/spec/dummy/log/test.log +149321 -0
  80. data/spec/dummy/public/404.html +26 -0
  81. data/spec/dummy/public/422.html +26 -0
  82. data/spec/dummy/public/500.html +25 -0
  83. data/spec/dummy/public/favicon.ico +0 -0
  84. data/spec/dummy/script/rails +6 -0
  85. data/spec/dummy/tmp/cache/assets/CCB/1D0/sprockets%2F02d4b791eb831cf2057bf4703a1218d1 +0 -0
  86. data/spec/dummy/tmp/cache/assets/CD1/510/sprockets%2Fc69ee3cc5796188d873574179290a6ef +0 -0
  87. data/spec/dummy/tmp/cache/assets/D01/8B0/sprockets%2F0f196a1a50363b0a076ec6e1ee5417f6 +0 -0
  88. data/spec/dummy/tmp/cache/assets/D06/2F0/sprockets%2Fe1f674c11941d62aac1764ef3a7134e4 +0 -0
  89. data/spec/dummy/tmp/cache/assets/D54/060/sprockets%2Fe85565206c3e5fdf9dfeb367c85557b1 +0 -0
  90. data/spec/dummy/tmp/cache/assets/D9B/550/sprockets%2Fa41c8be5379abec3c0d0d98e2f0d5609 +0 -0
  91. data/spec/dummy/tmp/cache/assets/E01/2E0/sprockets%2Fa3fb9025f90ff05a6fd4afc7ded2692c +0 -0
  92. data/spec/lib/commontator/acts_as_commontable_spec.rb +26 -0
  93. data/spec/lib/commontator/acts_as_commontable_spec.rb~ +26 -0
  94. data/spec/lib/commontator/acts_as_commontator_spec.rb +25 -0
  95. data/spec/lib/commontator/acts_as_commontator_spec.rb~ +25 -0
  96. data/spec/lib/commontator/commontable_config_spec.rb +26 -0
  97. data/spec/lib/commontator/commontable_config_spec.rb~ +26 -0
  98. data/spec/lib/commontator/commontator_config_spec.rb +26 -0
  99. data/spec/lib/commontator/commontator_config_spec.rb~ +26 -0
  100. data/spec/lib/commontator/controller_includes_spec.rb +15 -0
  101. data/spec/lib/commontator/controller_includes_spec.rb~ +15 -0
  102. data/spec/lib/commontator/shared_helper_spec.rb +12 -0
  103. data/spec/lib/commontator/shared_helper_spec.rb~ +12 -0
  104. data/spec/lib/commontator_spec.rb +23 -0
  105. data/spec/lib/commontator_spec.rb~ +23 -0
  106. data/spec/spec_helper.rb +34 -0
  107. data/spec/spec_helper.rb~ +30 -0
  108. metadata +212 -2
@@ -1,3 +1,3 @@
1
1
  module Commontator
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module Commontator
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Commontator::CommentsController do
4
+ it 'must get show' do
5
+ get :show, :id => 1
6
+ end
7
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Commontator::ApplicationController do
4
+ before do
5
+
6
+ @controller = Commontator::ApplicationController.new
7
+ end
8
+
9
+ it 'must get user' do
10
+ @controller.send :get_user
11
+ @user.must_be_nil
12
+
13
+ user = DummyUser.create
14
+ sign_in user
15
+ @controller.send :get_user
16
+ @user.must_equal user
17
+ @user.is_commontator.must_equal true
18
+ end
19
+
20
+ it 'must get thread' do
21
+ @controller.send :get_thread
22
+ @thread.must_be_instance_of Commontator::Thread
23
+ end
24
+
25
+ it 'must get commontable url' do
26
+ @controller.send :get_thread
27
+ @controller.send :get_commontable_url
28
+ @commontable_url.must_equal 'a'
29
+ end
30
+ end
@@ -0,0 +1,473 @@
1
+ require 'spec_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 'wont 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 'wont create unless authorized' do
47
+ attributes = Hash.new
48
+ attributes[:body] = 'Something'
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
+ attributes[:body] = 'Something'
69
+
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'
75
+ assigns(:comment).creator.must_equal @user
76
+ assigns(:comment).thread.must_equal @thread
77
+
78
+ @user.can_read = false
79
+ @user.can_edit = true
80
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
81
+ assert_redirected_to @thread
82
+ assigns(:comment).errors.must_be_empty
83
+ assigns(:comment).body.must_equal 'Something'
84
+ assigns(:comment).creator.must_equal @user
85
+ assigns(:comment).thread.must_equal @thread
86
+
87
+ @user.can_edit = false
88
+ @user.is_admin = true
89
+ post :create, :thread_id => @thread.id, :comment => attributes, :use_route => :commontator
90
+ assert_redirected_to @thread
91
+ assigns(:comment).errors.must_be_empty
92
+ assigns(:comment).body.must_equal 'Something'
93
+ assigns(:comment).creator.must_equal @user
94
+ assigns(:comment).thread.must_equal @thread
95
+ end
96
+
97
+ it 'wont edit unless authorized' do
98
+ get :edit, :id => @comment.id, :use_route => :commontator
99
+ assert_response 403
100
+
101
+ sign_in @user
102
+ get :edit, :id => @comment.id, :use_route => :commontator
103
+ assert_response 403
104
+
105
+ user2 = DummyUser.create
106
+ user2.can_read = true
107
+ user2.can_edit = true
108
+ user2.is_admin = true
109
+ sign_in user2
110
+ get :edit, :id => @comment.id, :use_route => :commontator
111
+ assert_response 403
112
+
113
+ @user.can_read = true
114
+ @user.can_edit = true
115
+ @user.is_admin = true
116
+ sign_in @user
117
+ comment2 = Comment.new
118
+ comment2.thread = @thread
119
+ comment2.creator = @user
120
+ comment2.body = 'Something else'
121
+ comment2.save!
122
+ get :edit, :id => @comment.id, :use_route => :commontator
123
+ assert_response 403
124
+ end
125
+
126
+ it 'must edit if authorized' do
127
+ sign_in @user
128
+
129
+ @user.can_read = true
130
+ get :edit, :id => @comment.id, :use_route => :commontator
131
+ assert_redirected_to @thread
132
+ assigns(:comment).errors.must_be_empty
133
+
134
+ @user.can_read = false
135
+ @user.can_edit = true
136
+ get :edit, :id => @comment.id, :use_route => :commontator
137
+ assert_redirected_to @thread
138
+ assigns(:comment).errors.must_be_empty
139
+
140
+ @user.can_edit = false
141
+ @user.is_admin = true
142
+ get :edit, :id => @comment.id, :use_route => :commontator
143
+ assert_redirected_to @thread
144
+ assigns(:comment).errors.must_be_empty
145
+ end
146
+
147
+ it 'wont update unless authorized' do
148
+ attributes = Hash.new
149
+ attributes[:body] = 'Something else'
150
+
151
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
152
+ assert_response 403
153
+ assigns(:comment).body.must_equal 'Something'
154
+
155
+ sign_in @user
156
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
157
+ assert_response 403
158
+ assigns(:comment).body.must_equal 'Something'
159
+
160
+ user2 = DummyUser.create
161
+ user2.can_read = true
162
+ user2.can_edit = true
163
+ user2.is_admin = true
164
+ sign_in user2
165
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
166
+ assert_response 403
167
+ assigns(:comment).body.must_equal 'Something'
168
+
169
+ @user.can_read = true
170
+ @user.can_edit = true
171
+ @user.is_admin = true
172
+ sign_in @user
173
+ comment2 = Comment.new
174
+ comment2.thread = @thread
175
+ comment2.creator = @user
176
+ comment2.body = 'Something else'
177
+ comment2.save!
178
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
179
+ assert_response 403
180
+ assigns(:comment).body.must_equal 'Something'
181
+ end
182
+
183
+ it 'must update if authorized' do
184
+ sign_in @user
185
+ attributes = Hash.new
186
+ attributes[:body] = 'Something else'
187
+
188
+ @user.can_read = true
189
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
190
+ assert_redirected_to @thread
191
+ assigns(:comment).errors.must_be_empty
192
+
193
+ @user.can_read = false
194
+ @user.can_edit = true
195
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
196
+ assert_redirected_to @thread
197
+ assigns(:comment).errors.must_be_empty
198
+
199
+ @user.can_edit = false
200
+ @user.is_admin = true
201
+ put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
202
+ assert_redirected_to @thread
203
+ assigns(:comment).errors.must_be_empty
204
+ end
205
+
206
+ it 'wont delete unless authorized and not deleted' do
207
+ put :delete, :id => @comment.id, :use_route => :commontator
208
+ assert_response 403
209
+ assigns(:comment).is_deleted?.must_equal false
210
+
211
+ sign_in @user
212
+
213
+ put :delete, :id => @comment.id, :use_route => :commontator
214
+ assert_response 403
215
+ assigns(:comment).is_deleted?.must_equal false
216
+
217
+ @user.can_read = true
218
+ @comment.delete(@user).must_equal true
219
+ put :delete, :id => @comment.id, :use_route => :commontator
220
+ assert_redirected_to @thread
221
+ assigns(:comment).errors.wont_be_empty
222
+
223
+ comment2 = Comment.new
224
+ comment2.thread = @thread
225
+ comment2.creator = @user
226
+ comment2.body = 'Something else'
227
+ comment2.save!
228
+ @comment.undelete.must_equal true
229
+ put :delete, :id => @comment.id, :use_route => :commontator
230
+ assert_response 403
231
+ assigns(:comment).is_deleted?.must_equal false
232
+ end
233
+
234
+ it 'must delete if authorized and not deleted' do
235
+ sign_in @user
236
+
237
+ @user.can_read = true
238
+ put :delete, :id => @comment.id, :use_route => :commontator
239
+ assert_redirected_to @thread
240
+ assigns(:comment).errors.must_be_empty
241
+ assigns(:comment).is_deleted?.must_equal true
242
+ assigns(:comment).deleter.must_equal @user
243
+
244
+ user2 = DummyUser.create
245
+ sign_in user2
246
+ comment2 = Comment.new
247
+ comment2.thread = @thread
248
+ comment2.creator = @user
249
+ comment2.body = 'Something else'
250
+ comment2.save!
251
+
252
+ assigns(:comment).undelete.must_equal true
253
+ user2.can_edit = true
254
+ put :delete, :id => @comment.id, :use_route => :commontator
255
+ assert_redirected_to @thread
256
+ assigns(:comment).errors.must_be_empty
257
+ assigns(:comment).is_deleted?.must_equal true
258
+ assigns(:comment).deleter.must_equal user2
259
+
260
+ assigns(:comment).undelete.must_equal true
261
+ user2.can_edit = false
262
+ user2.is_admin = true
263
+ put :delete, :id => @comment.id, :use_route => :commontator
264
+ assert_redirected_to @thread
265
+ assigns(:comment).errors.must_be_empty
266
+ assigns(:comment).is_deleted?.must_equal true
267
+ assigns(:comment).deleter.must_equal user2
268
+ end
269
+
270
+ it 'wont undelete unless authorized and deleted' do
271
+ @comment.delete(@user).must_equal true
272
+ put :undelete, :id => @comment.id, :use_route => :commontator
273
+ assert_response 403
274
+ assigns(:comment).is_deleted?.must_equal true
275
+
276
+ sign_in @user
277
+
278
+ put :undelete, :id => @comment.id, :use_route => :commontator
279
+ assert_response 403
280
+ assigns(:comment).is_deleted?.must_equal true
281
+
282
+ @user.can_read = true
283
+ @comment.undelete.must_equal true
284
+ put :undelete, :id => @comment.id, :use_route => :commontator
285
+ assert_redirected_to @thread
286
+ assigns(:comment).errors.wont_be_empty
287
+
288
+ @comment.delete.must_equal true
289
+ put :undelete, :id => @comment.id, :use_route => :commontator
290
+ assert_response 403
291
+ assigns(:comment).is_deleted?.must_equal true
292
+
293
+ comment2 = Comment.new
294
+ comment2.thread = @thread
295
+ comment2.creator = @user
296
+ comment2.body = 'Something else'
297
+ comment2.save!
298
+ @comment.undelete.must_equal true
299
+ @comment.delete(@user).must_equal true
300
+ put :undelete, :id => @comment.id, :use_route => :commontator
301
+ assert_response 403
302
+ assigns(:comment).is_deleted?.must_equal true
303
+ end
304
+
305
+ it 'must undelete if authorized and deleted' do
306
+ sign_in @user
307
+
308
+ @comment.delete(@user).must_equal true
309
+ @user.can_read = true
310
+ put :undelete, :id => @comment.id, :use_route => :commontator
311
+ assert_redirected_to @thread
312
+ assigns(:comment).errors.must_be_empty
313
+ assigns(:comment).is_deleted?.must_equal false
314
+
315
+ user2 = DummyUser.create
316
+ sign_in user2
317
+ comment2 = Comment.new
318
+ comment2.thread = @thread
319
+ comment2.creator = @user
320
+ comment2.body = 'Something else'
321
+ comment2.save!
322
+
323
+ assigns(:comment).delete(@user).must_equal true
324
+ user2.can_edit = true
325
+ put :undelete, :id => @comment.id, :use_route => :commontator
326
+ assert_redirected_to @thread
327
+ assigns(:comment).errors.must_be_empty
328
+ assigns(:comment).is_deleted?.must_equal false
329
+
330
+ assigns(:comment).delete(@user).must_equal true
331
+ user2.can_edit = false
332
+ user2.is_admin = true
333
+ put :undelete, :id => @comment.id, :use_route => :commontator
334
+ assert_redirected_to @thread
335
+ assigns(:comment).errors.must_be_empty
336
+ assigns(:comment).is_deleted?.must_equal false
337
+ end
338
+
339
+ it 'wont upvote if not authorized' do
340
+ put :upvote, :id => @comment.id, :use_route => :commontator
341
+ assert_response 403
342
+ assigns(:comment).upvotes.must_be_empty
343
+ assigns(:comment).downvotes.must_be_empty
344
+
345
+ sign_in @user
346
+ @user.can_read = true
347
+ put :upvote, :id => @comment.id, :use_route => :commontator
348
+ assert_response 403
349
+ assigns(:comment).upvotes.must_be_empty
350
+ assigns(:comment).downvotes.must_be_empty
351
+
352
+ user2 = DummyUser.create
353
+ sign_in user2
354
+ put :upvote, :id => @comment.id, :use_route => :commontator
355
+ assert_response 403
356
+ assigns(:comment).upvotes.must_be_empty
357
+ assigns(:comment).downvotes.must_be_empty
358
+ end
359
+
360
+ it 'must upvote if authorized' do
361
+ user2 = DummyUser.create
362
+ user2.can_read = true
363
+ sign_in user2
364
+
365
+ put :upvote, :id => @comment.id, :use_route => :commontator
366
+ assert_redirected_to @thread
367
+ assigns(:comment).upvotes.count.must_equal 1
368
+ assigns(:comment).downvotes.must_be_empty
369
+
370
+ put :upvote, :id => @comment.id, :use_route => :commontator
371
+ assert_redirected_to @thread
372
+ assigns(:comment).upvotes.count.must_equal 1
373
+ assigns(:comment).downvotes.must_be_empty
374
+
375
+ @comment.downvote_from(user2).must_equal true
376
+
377
+ put :upvote, :id => @comment.id, :use_route => :commontator
378
+ assert_redirected_to @thread
379
+ assigns(:comment).upvotes.count.must_equal 1
380
+ assigns(:comment).downvotes.must_be_empty
381
+ end
382
+
383
+ it 'wont downvote if not authorized' do
384
+ put :downvote, :id => @comment.id, :use_route => :commontator
385
+ assert_response 403
386
+ assigns(:comment).upvotes.must_be_empty
387
+ assigns(:comment).downvotes.must_be_empty
388
+
389
+ sign_in @user
390
+ @user.can_read = true
391
+ put :downvote, :id => @comment.id, :use_route => :commontator
392
+ assert_response 403
393
+ assigns(:comment).upvotes.must_be_empty
394
+ assigns(:comment).downvotes.must_be_empty
395
+
396
+ user2 = DummyUser.create
397
+ sign_in user2
398
+ put :downvote, :id => @comment.id, :use_route => :commontator
399
+ assert_response 403
400
+ assigns(:comment).upvotes.must_be_empty
401
+ assigns(:comment).downvotes.must_be_empty
402
+ end
403
+
404
+ it 'must downvote if authorized' do
405
+ user2 = DummyUser.create
406
+ user2.can_read = true
407
+ sign_in user2
408
+
409
+ put :downvote, :id => @comment.id, :use_route => :commontator
410
+ assert_redirected_to @thread
411
+ assigns(:comment).upvotes.must_be_empty
412
+ assigns(:comment).downvotes.count.must_equal 1
413
+
414
+ put :downvote, :id => @comment.id, :use_route => :commontator
415
+ assert_redirected_to @thread
416
+ assigns(:comment).upvotes.must_be_empty
417
+ assigns(:comment).downvotes.count.must_equal 1
418
+
419
+ @comment.upvote_from(user2).must_equal true
420
+
421
+ put :downvote, :id => @comment.id, :use_route => :commontator
422
+ assert_redirected_to @thread
423
+ assigns(:comment).upvotes.must_be_empty
424
+ assigns(:comment).downvotes.count.must_equal 1
425
+ end
426
+
427
+ it 'wont unvote if not authorized' do
428
+ @comment.upvote_from(@user).must_equal true
429
+
430
+ put :unvote, :id => @comment.id, :use_route => :commontator
431
+ assert_response 403
432
+ assigns(:comment).upvotes.count.must_equal 1
433
+ assigns(:comment).downvotes.must_be_empty
434
+
435
+ sign_in @user
436
+ @user.can_read = true
437
+ put :unvote, :id => @comment.id, :use_route => :commontator
438
+ assert_response 403
439
+ assigns(:comment).upvotes.count.must_equal 1
440
+ assigns(:comment).downvotes.must_be_empty
441
+
442
+ user2 = DummyUser.create
443
+ sign_in user2
444
+ put :unvote, :id => @comment.id, :use_route => :commontator
445
+ assert_response 403
446
+ assigns(:comment).upvotes.count.must_equal 1
447
+ assigns(:comment).downvotes.must_be_empty
448
+ end
449
+
450
+ it 'must unvote if authorized' do
451
+ user2 = DummyUser.create
452
+ user2.can_read = true
453
+ sign_in user2
454
+
455
+ @comment.upvote_from(user2).must_equal true
456
+ put :unvote, :id => @comment.id, :use_route => :commontator
457
+ assert_redirected_to @thread
458
+ assigns(:comment).upvotes.must_be_empty
459
+ assigns(:comment).downvotes.must_be_empty
460
+
461
+ put :unvote, :id => @comment.id, :use_route => :commontator
462
+ assert_redirected_to @thread
463
+ assigns(:comment).upvotes.must_be_empty
464
+ assigns(:comment).downvotes.must_be_empty
465
+
466
+ @comment.downvote_from(user2).must_equal true
467
+ put :unvote, :id => @comment.id, :use_route => :commontator
468
+ assert_redirected_to @thread
469
+ assigns(:comment).upvotes.must_be_empty
470
+ assigns(:comment).downvotes.must_be_empty
471
+ end
472
+ end
473
+ end