activity_notification 0.0.10 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -0
  3. data/Gemfile +6 -3
  4. data/Gemfile.lock +74 -58
  5. data/README.md +53 -26
  6. data/activity_notification.gemspec +2 -0
  7. data/app/controllers/activity_notification/notifications_controller.rb +4 -4
  8. data/app/mailers/activity_notification/mailer.rb +9 -3
  9. data/app/views/activity_notification/mailer/default/default.html.erb +9 -4
  10. data/app/views/activity_notification/mailer/default/default.text.erb +10 -0
  11. data/app/views/activity_notification/notifications/default/_default.html.erb +173 -34
  12. data/app/views/activity_notification/notifications/default/_index.html.erb +119 -11
  13. data/app/views/activity_notification/notifications/default/destroy.js.erb +2 -2
  14. data/app/views/activity_notification/notifications/default/index.html.erb +25 -14
  15. data/app/views/activity_notification/notifications/default/open.js.erb +2 -2
  16. data/app/views/activity_notification/notifications/default/open_all.js.erb +2 -2
  17. data/app/views/activity_notification/notifications/default/show.html.erb +1 -1
  18. data/gemfiles/Gemfile.rails-4.2 +0 -2
  19. data/gemfiles/Gemfile.rails-4.2.lock +3 -3
  20. data/gemfiles/Gemfile.rails-5.0 +1 -3
  21. data/lib/activity_notification.rb +10 -9
  22. data/lib/activity_notification/apis/notification_api.rb +108 -14
  23. data/lib/activity_notification/common.rb +11 -2
  24. data/lib/activity_notification/config.rb +13 -13
  25. data/lib/activity_notification/helpers/view_helpers.rb +26 -4
  26. data/lib/activity_notification/mailers/helpers.rb +8 -4
  27. data/lib/activity_notification/models.rb +4 -0
  28. data/lib/activity_notification/models/concerns/group.rb +32 -0
  29. data/lib/activity_notification/models/concerns/notifiable.rb +60 -32
  30. data/lib/activity_notification/models/concerns/notifier.rb +17 -1
  31. data/lib/activity_notification/models/concerns/target.rb +114 -55
  32. data/lib/activity_notification/models/notification.rb +26 -25
  33. data/lib/activity_notification/rails.rb +1 -0
  34. data/lib/activity_notification/renderable.rb +8 -3
  35. data/lib/activity_notification/roles/acts_as_common.rb +28 -0
  36. data/lib/activity_notification/roles/acts_as_group.rb +38 -0
  37. data/lib/activity_notification/roles/acts_as_notifiable.rb +56 -22
  38. data/lib/activity_notification/roles/acts_as_notifier.rb +25 -2
  39. data/lib/activity_notification/roles/acts_as_target.rb +27 -9
  40. data/lib/activity_notification/version.rb +1 -1
  41. data/lib/generators/templates/activity_notification.rb +1 -1
  42. data/spec/concerns/apis/notification_api_spec.rb +361 -2
  43. data/spec/concerns/common_spec.rb +36 -0
  44. data/spec/concerns/models/group_spec.rb +61 -0
  45. data/spec/concerns/models/notifiable_spec.rb +37 -0
  46. data/spec/concerns/models/notifier_spec.rb +48 -0
  47. data/spec/concerns/models/target_spec.rb +81 -31
  48. data/spec/factories/dummy/dummy_group.rb +4 -0
  49. data/spec/helpers/view_helpers_spec.rb +13 -0
  50. data/spec/mailers/mailer_spec.rb +8 -1
  51. data/spec/models/dummy/dummy_group_spec.rb +6 -0
  52. data/spec/rails_app/app/assets/stylesheets/application.css +15 -0
  53. data/spec/rails_app/app/assets/stylesheets/reset.css +85 -0
  54. data/spec/rails_app/app/assets/stylesheets/style.css +244 -0
  55. data/spec/rails_app/app/controllers/articles_controller.rb +1 -1
  56. data/spec/rails_app/app/models/admin.rb +2 -1
  57. data/spec/rails_app/app/models/article.rb +9 -2
  58. data/spec/rails_app/app/models/comment.rb +8 -2
  59. data/spec/rails_app/app/models/dummy/dummy_group.rb +4 -0
  60. data/spec/rails_app/app/models/user.rb +8 -3
  61. data/spec/rails_app/app/views/articles/_form.html.erb +14 -10
  62. data/spec/rails_app/app/views/articles/edit.html.erb +8 -6
  63. data/spec/rails_app/app/views/articles/index.html.erb +59 -67
  64. data/spec/rails_app/app/views/articles/new.html.erb +7 -5
  65. data/spec/rails_app/app/views/articles/show.html.erb +47 -36
  66. data/spec/rails_app/app/views/layouts/_header.html.erb +36 -9
  67. data/spec/rails_app/app/views/layouts/application.html.erb +8 -6
  68. data/spec/rails_app/config/environments/development.rb +9 -0
  69. data/spec/rails_app/config/initializers/activity_notification.rb +1 -1
  70. data/spec/rails_app/db/schema.rb +14 -20
  71. data/spec/rails_app/db/seeds.rb +5 -5
  72. data/spec/rails_app/lib/mailer_previews/mailer_preview.rb +13 -0
  73. data/spec/roles/acts_as_group_spec.rb +32 -0
  74. data/spec/roles/acts_as_notifiable_spec.rb +1 -1
  75. data/spec/roles/acts_as_notifier_spec.rb +15 -0
  76. data/spec/roles/acts_as_target_spec.rb +1 -1
  77. metadata +52 -2
@@ -145,6 +145,42 @@ shared_examples_for :common do
145
145
  end
146
146
  end
147
147
  end
148
+
149
+ describe "#to_class_name" do
150
+ it "returns resource name" do
151
+ expect(create(:user).to_class_name).to eq 'User'
152
+ expect(test_instance.to_class_name).to eq test_instance.class.name
153
+ end
154
+ end
155
+
156
+ describe "#to_resource_name" do
157
+ it "returns singularized model name (resource name)" do
158
+ expect(create(:user).to_resource_name).to eq 'user'
159
+ expect(test_instance.to_resource_name).to eq test_instance.class.name.demodulize.singularize.underscore
160
+ end
161
+ end
162
+
163
+ describe "#to_resources_name" do
164
+ it "returns pluralized model name (resources name)" do
165
+ expect(create(:user).to_resources_name).to eq 'users'
166
+ expect(test_instance.to_resources_name).to eq test_instance.class.name.demodulize.pluralize.underscore
167
+ end
168
+ end
169
+
170
+ describe "#printable_type" do
171
+ it "returns printable model type name to be humanized" do
172
+ expect(create(:user).printable_type).to eq 'User'
173
+ expect(test_instance.printable_type).to eq test_instance.class.name.demodulize.humanize
174
+ end
175
+ end
176
+
177
+ describe "#printable_name" do
178
+ it "returns printable model name to show in view or email" do
179
+ user = create(:user)
180
+ expect(user.printable_name).to eq "User (#{user.id})"
181
+ expect(test_instance.printable_name).to eq "#{test_instance.printable_type} (#{test_instance.id})"
182
+ end
183
+ end
148
184
  end
149
185
 
150
186
  end
@@ -0,0 +1,61 @@
1
+ shared_examples_for :group do
2
+ let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
3
+ let(:test_instance) { create(test_class_name) }
4
+
5
+ describe "as public class methods" do
6
+ describe ".available_as_group?" do
7
+ it "returns true" do
8
+ expect(described_class.available_as_group?).to be_truthy
9
+ end
10
+ end
11
+
12
+ describe ".set_group_class_defaults" do
13
+ it "set parameter fields as default" do
14
+ described_class.set_group_class_defaults
15
+ expect(described_class._printable_notification_group_name).to eq(:printable_name)
16
+ end
17
+ end
18
+ end
19
+
20
+ describe "as public instance methods" do
21
+ before do
22
+ described_class.set_group_class_defaults
23
+ end
24
+
25
+ describe "#printable_group_name" do
26
+ context "without any configuration" do
27
+ it "returns ActivityNotification::Common.printable_name" do
28
+ expect(test_instance.printable_group_name).to eq(test_instance.printable_name)
29
+ end
30
+ end
31
+
32
+ context "configured with a field" do
33
+ it "returns specified value" do
34
+ described_class._printable_notification_group_name = 'test_printable_name'
35
+ expect(test_instance.printable_group_name).to eq('test_printable_name')
36
+ end
37
+
38
+ it "returns specified symbol of field" do
39
+ described_class._printable_notification_group_name = :title
40
+ expect(test_instance.printable_group_name).to eq(test_instance.title)
41
+ end
42
+
43
+ it "returns specified symbol of method" do
44
+ module AdditionalMethods
45
+ def custom_printable_name
46
+ 'test_printable_name'
47
+ end
48
+ end
49
+ test_instance.extend(AdditionalMethods)
50
+ described_class._printable_notification_group_name = :custom_printable_name
51
+ expect(test_instance.printable_group_name).to eq('test_printable_name')
52
+ end
53
+
54
+ it "returns specified lambda with single target argument" do
55
+ described_class._printable_notification_group_name = ->(target){ 'test_printable_name' }
56
+ expect(test_instance.printable_group_name).to eq('test_printable_name')
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -21,6 +21,7 @@ shared_examples_for :notifiable do
21
21
  expect(described_class._notification_parameters).to eq({})
22
22
  expect(described_class._notification_email_allowed).to eq({})
23
23
  expect(described_class._notifiable_path).to eq({})
24
+ expect(described_class._printable_notifiable_name).to eq({})
24
25
  end
25
26
  end
26
27
  end
@@ -403,6 +404,42 @@ shared_examples_for :notifiable do
403
404
  end
404
405
  end
405
406
 
407
+ describe "#printable_notifiable_name" do
408
+ context "without any configuration" do
409
+ it "returns ActivityNotification::Common.printable_name" do
410
+ expect(test_instance.printable_notifiable_name(test_target, 'dummy_key')).to eq(test_instance.printable_name)
411
+ end
412
+ end
413
+
414
+ context "configured with a field" do
415
+ it "returns specified value" do
416
+ described_class._printable_notifiable_name[:users] = 'test_printable_name'
417
+ expect(test_instance.printable_notifiable_name(test_target, 'dummy_key')).to eq('test_printable_name')
418
+ end
419
+
420
+ it "returns specified symbol of field" do
421
+ described_class._printable_notifiable_name[:users] = :title
422
+ expect(test_instance.printable_notifiable_name(test_target, 'dummy_key')).to eq(test_instance.title)
423
+ end
424
+
425
+ it "returns specified symbol of method" do
426
+ module AdditionalMethods
427
+ def custom_printable_name
428
+ 'test_printable_name'
429
+ end
430
+ end
431
+ test_instance.extend(AdditionalMethods)
432
+ described_class._printable_notifiable_name[:users] = :custom_printable_name
433
+ expect(test_instance.printable_notifiable_name(test_target, 'dummy_key')).to eq('test_printable_name')
434
+ end
435
+
436
+ it "returns specified lambda with single target argument" do
437
+ described_class._printable_notifiable_name[:users] = ->(target){ 'test_printable_name' }
438
+ expect(test_instance.printable_notifiable_name(test_target, 'dummy_key')).to eq('test_printable_name')
439
+ end
440
+ end
441
+ end
442
+
406
443
  describe "#notify" do
407
444
  it "is an alias of ActivityNotification::Notification.notify" do
408
445
  expect(ActivityNotification::Notification).to receive(:notify)
@@ -18,6 +18,54 @@ shared_examples_for :notifier do
18
18
  expect(described_class.available_as_notifier?).to be_truthy
19
19
  end
20
20
  end
21
+
22
+ describe ".set_notifier_class_defaults" do
23
+ it "set parameter fields as default" do
24
+ described_class.set_notifier_class_defaults
25
+ expect(described_class._printable_notifier_name).to eq(:printable_name)
26
+ end
27
+ end
21
28
  end
22
29
 
30
+ describe "as public instance methods" do
31
+ before do
32
+ described_class.set_notifier_class_defaults
33
+ end
34
+
35
+ describe "#printable_notifier_name" do
36
+ context "without any configuration" do
37
+ it "returns ActivityNotification::Common.printable_name" do
38
+ expect(test_instance.printable_notifier_name).to eq(test_instance.printable_name)
39
+ end
40
+ end
41
+
42
+ context "configured with a field" do
43
+ it "returns specified value" do
44
+ described_class._printable_notifier_name = 'test_printable_name'
45
+ expect(test_instance.printable_notifier_name).to eq('test_printable_name')
46
+ end
47
+
48
+ it "returns specified symbol of field" do
49
+ described_class._printable_notifier_name = :name
50
+ expect(test_instance.printable_notifier_name).to eq(test_instance.name)
51
+ end
52
+
53
+ it "returns specified symbol of method" do
54
+ module AdditionalMethods
55
+ def custom_printable_name
56
+ 'test_printable_name'
57
+ end
58
+ end
59
+ test_instance.extend(AdditionalMethods)
60
+ described_class._printable_notifier_name = :custom_printable_name
61
+ expect(test_instance.printable_notifier_name).to eq('test_printable_name')
62
+ end
63
+
64
+ it "returns specified lambda with single target argument" do
65
+ described_class._printable_notifier_name = ->(target){ 'test_printable_name' }
66
+ expect(test_instance.printable_notifier_name).to eq('test_printable_name')
67
+ end
68
+ end
69
+ end
70
+ end
23
71
  end
@@ -24,8 +24,10 @@ shared_examples_for :target do
24
24
  describe ".set_target_class_defaults" do
25
25
  it "set parameter fields as default" do
26
26
  described_class.set_target_class_defaults
27
- expect(described_class._notification_email).to eq(nil)
28
- expect(described_class._notification_email_allowed).to eq(ActivityNotification.config.email_enabled)
27
+ expect(described_class._notification_email).to eq(nil)
28
+ expect(described_class._notification_email_allowed).to eq(ActivityNotification.config.email_enabled)
29
+ expect(described_class._notification_devise_resource).to be_a_kind_of(Proc)
30
+ expect(described_class._printable_notification_target_name).to eq(:printable_name)
29
31
  end
30
32
  end
31
33
  end
@@ -65,7 +67,7 @@ shared_examples_for :target do
65
67
  expect(test_instance.mailer_to).to eq('test@example.com')
66
68
  end
67
69
 
68
- it "returns specified lambda with single notifiable argument" do
70
+ it "returns specified lambda with single target argument" do
69
71
  described_class._notification_email = ->(target){ 'test@example.com' }
70
72
  expect(test_instance.mailer_to).to eq('test@example.com')
71
73
  end
@@ -171,6 +173,42 @@ shared_examples_for :target do
171
173
  end
172
174
  end
173
175
 
176
+ describe "#printable_target_name" do
177
+ context "without any configuration" do
178
+ it "returns ActivityNotification::Common.printable_name" do
179
+ expect(test_instance.printable_target_name).to eq(test_instance.printable_name)
180
+ end
181
+ end
182
+
183
+ context "configured with a field" do
184
+ it "returns specified value" do
185
+ described_class._printable_notification_target_name = 'test_printable_name'
186
+ expect(test_instance.printable_target_name).to eq('test_printable_name')
187
+ end
188
+
189
+ it "returns specified symbol of field" do
190
+ described_class._printable_notification_target_name = :name
191
+ expect(test_instance.printable_target_name).to eq(test_instance.name)
192
+ end
193
+
194
+ it "returns specified symbol of method" do
195
+ module AdditionalMethods
196
+ def custom_printable_name
197
+ 'test_printable_name'
198
+ end
199
+ end
200
+ test_instance.extend(AdditionalMethods)
201
+ described_class._printable_notification_target_name = :custom_printable_name
202
+ expect(test_instance.printable_target_name).to eq('test_printable_name')
203
+ end
204
+
205
+ it "returns specified lambda with single target argument" do
206
+ described_class._printable_notification_target_name = ->(target){ 'test_printable_name' }
207
+ expect(test_instance.printable_target_name).to eq('test_printable_name')
208
+ end
209
+ end
210
+ end
211
+
174
212
  describe "#unopened_notification_count" do
175
213
  it "returns count of unopened notification index" do
176
214
  create(:notification, target: test_instance)
@@ -212,24 +250,28 @@ shared_examples_for :target do
212
250
  before do
213
251
  create(:notification, target: test_instance)
214
252
  create(:notification, target: test_instance)
253
+ create(:notification, target: test_instance).open!
215
254
  end
216
255
 
217
256
  it "calls unopened_notification_index" do
218
- expect(test_instance).to receive(:unopened_notification_index)
257
+ expect(test_instance).to receive(:unopened_notification_index).at_least(:once)
219
258
  test_instance.notification_index
220
259
  end
221
260
 
222
261
  context "without limit" do
223
- it "returns the same as unopened_notification_index" do
224
- expect(test_instance.notification_index).to eq(test_instance.unopened_notification_index)
225
- expect(test_instance.notification_index.size).to eq(2)
262
+ it "returns the combined array of unopened_notification_index and opened_notification_index" do
263
+ expect(test_instance.notification_index[0]).to eq(test_instance.unopened_notification_index[0])
264
+ expect(test_instance.notification_index[1]).to eq(test_instance.unopened_notification_index[1])
265
+ expect(test_instance.notification_index[2]).to eq(test_instance.opened_notification_index[0])
266
+ expect(test_instance.notification_index.size).to eq(3)
226
267
  end
227
268
  end
228
269
 
229
270
  context "with limit" do
230
271
  it "returns the same as unopened_notification_index with limit" do
231
- expect(test_instance.notification_index(1)).to eq(test_instance.unopened_notification_index(1))
232
- expect(test_instance.notification_index(1).size).to eq(1)
272
+ options = { limit: 1 }
273
+ expect(test_instance.notification_index(options)).to eq(test_instance.unopened_notification_index(options))
274
+ expect(test_instance.notification_index(options).size).to eq(1)
233
275
  end
234
276
  end
235
277
  end
@@ -241,7 +283,7 @@ shared_examples_for :target do
241
283
  end
242
284
 
243
285
  it "calls unopened_notification_index" do
244
- expect(test_instance).to receive(:opened_notification_index)
286
+ expect(test_instance).to receive(:opened_notification_index).at_least(:once)
245
287
  test_instance.notification_index
246
288
  end
247
289
 
@@ -254,8 +296,9 @@ shared_examples_for :target do
254
296
 
255
297
  context "with limit" do
256
298
  it "returns the same as opened_notification_index with limit" do
257
- expect(test_instance.notification_index(1)).to eq(test_instance.opened_notification_index(1))
258
- expect(test_instance.notification_index(1).size).to eq(1)
299
+ options = { limit: 1 }
300
+ expect(test_instance.notification_index(options)).to eq(test_instance.opened_notification_index(options))
301
+ expect(test_instance.notification_index(options).size).to eq(1)
259
302
  end
260
303
  end
261
304
  end
@@ -298,8 +341,9 @@ shared_examples_for :target do
298
341
 
299
342
  context "with limit" do
300
343
  it "returns unopened notification index with limit" do
301
- expect(test_instance.unopened_notification_index(1).size).to eq(1)
302
- expect(test_instance.unopened_notification_index(1).first).to eq(@notification_2)
344
+ options = { limit: 1 }
345
+ expect(test_instance.unopened_notification_index(options).size).to eq(1)
346
+ expect(test_instance.unopened_notification_index(options).first).to eq(@notification_2)
303
347
  end
304
348
  end
305
349
  end
@@ -319,7 +363,7 @@ shared_examples_for :target do
319
363
  describe "#opened_notification_index" do
320
364
  context "when the target has no notifications" do
321
365
  it "returns empty records" do
322
- expect(test_instance.opened_notification_index(1)).to be_empty
366
+ expect(test_instance.opened_notification_index).to be_empty
323
367
  end
324
368
  end
325
369
 
@@ -330,12 +374,12 @@ shared_examples_for :target do
330
374
  end
331
375
 
332
376
  context "without limit" do
333
- it "uses ActivityNotification.config.opened_limit as limit" do
334
- configured_opened_limit = ActivityNotification.config.opened_limit
335
- ActivityNotification.config.opened_limit = 1
336
- expect(test_instance.opened_notification_index(1).size).to eq(1)
337
- expect(test_instance.opened_notification_index(1).first).to eq(@notification_2)
338
- ActivityNotification.config.opened_limit = configured_opened_limit
377
+ it "uses ActivityNotification.config.opened_index_limit as limit" do
378
+ configured_opened_index_limit = ActivityNotification.config.opened_index_limit
379
+ ActivityNotification.config.opened_index_limit = 1
380
+ expect(test_instance.opened_notification_index.size).to eq(1)
381
+ expect(test_instance.opened_notification_index.first).to eq(@notification_2)
382
+ ActivityNotification.config.opened_index_limit = configured_opened_index_limit
339
383
  end
340
384
 
341
385
  it "returns opened notification index" do
@@ -361,8 +405,9 @@ shared_examples_for :target do
361
405
 
362
406
  context "with limit" do
363
407
  it "returns opened notification index with limit" do
364
- expect(test_instance.opened_notification_index(1).size).to eq(1)
365
- expect(test_instance.opened_notification_index(1).first).to eq(@notification_2)
408
+ options = { limit: 1 }
409
+ expect(test_instance.opened_notification_index(options).size).to eq(1)
410
+ expect(test_instance.opened_notification_index(options).first).to eq(@notification_2)
366
411
  end
367
412
  end
368
413
  end
@@ -410,24 +455,28 @@ shared_examples_for :target do
410
455
  before do
411
456
  create(:notification, target: test_instance)
412
457
  create(:notification, target: test_instance)
458
+ create(:notification, target: test_instance).open!
413
459
  end
414
460
 
415
461
  it "calls unopened_notification_index_with_attributes" do
416
- expect(test_instance).to receive(:unopened_notification_index_with_attributes)
462
+ expect(test_instance).to receive(:unopened_notification_index_with_attributes).at_least(:once)
417
463
  test_instance.notification_index_with_attributes
418
464
  end
419
465
 
420
466
  context "without limit" do
421
- it "returns the same as unopened_notification_index_with_attributes" do
422
- expect(test_instance.notification_index_with_attributes).to eq(test_instance.unopened_notification_index_with_attributes)
423
- expect(test_instance.notification_index_with_attributes.size).to eq(2)
467
+ it "returns the combined array of unopened_notification_index and opened_notification_index" do
468
+ expect(test_instance.notification_index_with_attributes[0]).to eq(test_instance.unopened_notification_index[0])
469
+ expect(test_instance.notification_index_with_attributes[1]).to eq(test_instance.unopened_notification_index[1])
470
+ expect(test_instance.notification_index_with_attributes[2]).to eq(test_instance.opened_notification_index[0])
471
+ expect(test_instance.notification_index.size).to eq(3)
424
472
  end
425
473
  end
426
474
 
427
475
  context "with limit" do
428
476
  it "returns the same as unopened_notification_index_with_attributes with limit" do
429
- expect(test_instance.notification_index_with_attributes(1)).to eq(test_instance.unopened_notification_index_with_attributes(1))
430
- expect(test_instance.notification_index_with_attributes(1).size).to eq(1)
477
+ options = { limit: 1 }
478
+ expect(test_instance.notification_index_with_attributes(options)).to eq(test_instance.unopened_notification_index_with_attributes(options))
479
+ expect(test_instance.notification_index_with_attributes(options).size).to eq(1)
431
480
  end
432
481
  end
433
482
  end
@@ -452,8 +501,9 @@ shared_examples_for :target do
452
501
 
453
502
  context "with limit" do
454
503
  it "returns the same as opened_notification_index_with_attributes with limit" do
455
- expect(test_instance.notification_index_with_attributes(1)).to eq(test_instance.opened_notification_index_with_attributes(1))
456
- expect(test_instance.notification_index_with_attributes(1).size).to eq(1)
504
+ options = { limit: 1 }
505
+ expect(test_instance.notification_index_with_attributes(options)).to eq(test_instance.opened_notification_index_with_attributes(options))
506
+ expect(test_instance.notification_index_with_attributes(options).size).to eq(1)
457
507
  end
458
508
  end
459
509
  end
@@ -0,0 +1,4 @@
1
+ FactoryGirl.define do
2
+ factory :dummy_group, class: Dummy::DummyGroup do
3
+ end
4
+ end
@@ -198,6 +198,12 @@ describe ActivityNotification::ViewHelpers, type: :helper do
198
198
  end
199
199
  end
200
200
 
201
+ describe '#notifications_path_for' do
202
+ it "returns path for the notification target" do
203
+ expect(notifications_path_for(target_user))
204
+ .to eq(user_notifications_path(target_user))
205
+ end
206
+ end
201
207
 
202
208
  describe '#notification_path_for' do
203
209
  it "returns path for the notification target" do
@@ -227,6 +233,13 @@ describe ActivityNotification::ViewHelpers, type: :helper do
227
233
  end
228
234
  end
229
235
 
236
+ describe '#notifications_url_for' do
237
+ it "returns url for the notification target" do
238
+ expect(notifications_url_for(target_user))
239
+ .to eq(user_notifications_url(target_user))
240
+ end
241
+ end
242
+
230
243
  describe '#notification_url_for' do
231
244
  it "returns url for the notification target" do
232
245
  expect(notification_url_for(notification))