activity_notification 1.0.2 → 1.1.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 (105) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +33 -0
  3. data/.rubocop.yml +1157 -0
  4. data/.yardopts +3 -0
  5. data/CHANGELOG.md +25 -0
  6. data/Gemfile.lock +15 -17
  7. data/README.md +154 -27
  8. data/activity_notification.gemspec +1 -1
  9. data/app/controllers/activity_notification/notifications_controller.rb +30 -104
  10. data/app/controllers/activity_notification/notifications_with_devise_controller.rb +1 -33
  11. data/app/controllers/activity_notification/subscriptions_controller.rb +184 -0
  12. data/app/controllers/activity_notification/subscriptions_with_devise_controller.rb +6 -0
  13. data/app/mailers/activity_notification/mailer.rb +3 -3
  14. data/app/views/activity_notification/notifications/default/_index.html.erb +3 -0
  15. data/app/views/activity_notification/notifications/default/index.html.erb +8 -10
  16. data/app/views/activity_notification/notifications/default/show.html.erb +24 -2
  17. data/app/views/activity_notification/subscriptions/default/_form.html.erb +52 -0
  18. data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +89 -0
  19. data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +73 -0
  20. data/app/views/activity_notification/subscriptions/default/_subscriptions.html.erb +13 -0
  21. data/app/views/activity_notification/subscriptions/default/create.js.erb +5 -0
  22. data/app/views/activity_notification/subscriptions/default/destroy.js.erb +5 -0
  23. data/app/views/activity_notification/subscriptions/default/index.html.erb +197 -0
  24. data/app/views/activity_notification/subscriptions/default/show.html.erb +177 -0
  25. data/app/views/activity_notification/subscriptions/default/subscribe.js.erb +8 -0
  26. data/app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb +6 -0
  27. data/app/views/activity_notification/subscriptions/default/unsubscribe.js.erb +8 -0
  28. data/app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb +6 -0
  29. data/gemfiles/Gemfile.rails-4.2.lock +18 -20
  30. data/gemfiles/Gemfile.rails-5.0.lock +18 -20
  31. data/lib/activity_notification.rb +7 -3
  32. data/lib/activity_notification/apis/notification_api.rb +95 -61
  33. data/lib/activity_notification/apis/subscription_api.rb +51 -0
  34. data/lib/activity_notification/common.rb +1 -1
  35. data/lib/activity_notification/config.rb +65 -17
  36. data/lib/activity_notification/controllers/common_controller.rb +118 -0
  37. data/lib/activity_notification/controllers/devise_authentication_controller.rb +41 -0
  38. data/lib/activity_notification/helpers/view_helpers.rb +131 -3
  39. data/lib/activity_notification/mailers/helpers.rb +6 -8
  40. data/lib/activity_notification/models/concerns/notifiable.rb +45 -27
  41. data/lib/activity_notification/models/concerns/subscriber.rb +149 -0
  42. data/lib/activity_notification/models/concerns/target.rb +100 -66
  43. data/lib/activity_notification/models/notification.rb +7 -5
  44. data/lib/activity_notification/models/subscription.rb +93 -0
  45. data/lib/activity_notification/rails/routes.rb +148 -33
  46. data/lib/activity_notification/renderable.rb +3 -4
  47. data/lib/activity_notification/roles/acts_as_notifiable.rb +14 -1
  48. data/lib/activity_notification/roles/acts_as_target.rb +11 -8
  49. data/lib/activity_notification/version.rb +1 -1
  50. data/lib/generators/activity_notification/controllers_generator.rb +2 -2
  51. data/lib/generators/activity_notification/install_generator.rb +0 -1
  52. data/lib/generators/activity_notification/migration/migration_generator.rb +8 -2
  53. data/lib/generators/activity_notification/models_generator.rb +53 -0
  54. data/lib/generators/activity_notification/views_generator.rb +7 -7
  55. data/lib/generators/templates/activity_notification.rb +17 -3
  56. data/lib/generators/templates/controllers/notifications_controller.rb +18 -17
  57. data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +18 -17
  58. data/lib/generators/templates/controllers/subscriptions_controller.rb +79 -0
  59. data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +87 -0
  60. data/lib/generators/templates/migrations/migration.rb +57 -0
  61. data/lib/generators/templates/models/README +10 -0
  62. data/lib/generators/templates/{notification → models}/notification.rb +1 -3
  63. data/lib/generators/templates/models/subscription.rb +4 -0
  64. data/spec/concerns/apis/notification_api_spec.rb +48 -11
  65. data/spec/concerns/apis/subscription_api_spec.rb +167 -0
  66. data/spec/concerns/models/notifiable_spec.rb +60 -0
  67. data/spec/concerns/models/subscriber_spec.rb +525 -0
  68. data/spec/concerns/models/target_spec.rb +271 -42
  69. data/spec/controllers/common_controller_spec.rb +25 -0
  70. data/spec/controllers/dummy_common_controller.rb +5 -0
  71. data/spec/controllers/notifications_controller_shared_examples.rb +2 -6
  72. data/spec/controllers/subscriptions_controller_shared_examples.rb +735 -0
  73. data/spec/controllers/subscriptions_controller_spec.rb +12 -0
  74. data/spec/controllers/subscriptions_with_devise_controller_spec.rb +91 -0
  75. data/spec/factories/dummy/dummy_subscriber.rb +4 -0
  76. data/spec/factories/subscriptions.rb +8 -0
  77. data/spec/generators/controllers_generator_spec.rb +25 -2
  78. data/spec/generators/migration/migration_generator_spec.rb +3 -3
  79. data/spec/generators/models_generator_spec.rb +96 -0
  80. data/spec/generators/views_generator_spec.rb +84 -0
  81. data/spec/helpers/view_helpers_spec.rb +143 -0
  82. data/spec/mailers/mailer_spec.rb +5 -4
  83. data/spec/models/dummy/dummy_subscriber_spec.rb +5 -0
  84. data/spec/models/notification_spec.rb +7 -7
  85. data/spec/models/subscription_spec.rb +158 -0
  86. data/spec/rails_app/app/controllers/users/notifications_controller.rb +67 -0
  87. data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +75 -0
  88. data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +79 -0
  89. data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +87 -0
  90. data/spec/rails_app/app/models/admin.rb +1 -0
  91. data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +4 -0
  92. data/spec/rails_app/app/models/user.rb +2 -1
  93. data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +1 -0
  94. data/spec/rails_app/app/views/articles/index.html.erb +6 -0
  95. data/spec/rails_app/config/initializers/activity_notification.rb +17 -3
  96. data/spec/rails_app/config/routes.rb +2 -2
  97. data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +33 -0
  98. data/spec/rails_app/db/schema.rb +18 -0
  99. data/spec/roles/acts_as_notifiable_spec.rb +1 -1
  100. data/spec/roles/acts_as_target_spec.rb +1 -1
  101. metadata +70 -11
  102. data/lib/generators/activity_notification/notification/notification_generator.rb +0 -20
  103. data/lib/generators/templates/active_record/migration.rb +0 -18
  104. data/spec/generators/notification/notification_generator_spec.rb +0 -41
  105. data/spec/rails_app/db/migrate/20160715050420_create_notifications.rb +0 -18
@@ -0,0 +1,525 @@
1
+ shared_examples_for :subscriber do
2
+ include ActiveJob::TestHelper
3
+ let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
4
+ let(:test_instance) { create(test_class_name) }
5
+ before do
6
+ ActiveJob::Base.queue_adapter = :test
7
+ ActivityNotification::Mailer.deliveries.clear
8
+ expect(ActivityNotification::Mailer.deliveries.size).to eq(0)
9
+ end
10
+
11
+ describe "with association" do
12
+ it "has many subscriptions" do
13
+ subscription_1 = create(:subscription, target: test_instance, key: 'subscription_key_1')
14
+ subscription_2 = create(:subscription, target: test_instance, key: 'subscription_key_2')
15
+ expect(test_instance.subscriptions.count).to eq(2)
16
+ expect(test_instance.subscriptions.earliest_order.first).to eq(subscription_1)
17
+ expect(test_instance.subscriptions.latest_order.first).to eq(subscription_2)
18
+ expect(test_instance.subscriptions).to eq(ActivityNotification::Subscription.filtered_by_target(test_instance))
19
+ end
20
+ end
21
+
22
+ describe "as public class methods" do
23
+ describe ".available_as_subscriber?" do
24
+ it "returns true" do
25
+ expect(described_class.available_as_subscriber?).to be_truthy
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "as public instance methods" do
31
+ before do
32
+ ActivityNotification::Subscription.delete_all
33
+ end
34
+
35
+ describe "#find_subscription" do
36
+ before do
37
+ expect(test_instance.subscriptions).to be_empty
38
+ end
39
+
40
+ context "when the cofigured subscription exists" do
41
+ it "returns subscription record" do
42
+ subscription = test_instance.create_subscription(key: 'test_key')
43
+ expect(test_instance.subscriptions.reload).not_to be_empty
44
+ expect(test_instance.find_subscription('test_key')).to eq(subscription)
45
+ end
46
+ end
47
+
48
+ context "when the cofigured subscription does not exist" do
49
+ it "returns nil" do
50
+ expect(test_instance.find_subscription('test_key')).to be_nil
51
+ end
52
+ end
53
+ end
54
+
55
+ describe "#find_or_create_subscription" do
56
+ before do
57
+ expect(test_instance.subscriptions).to be_empty
58
+ end
59
+
60
+ context "when the cofigured subscription exists" do
61
+ it "returns subscription record" do
62
+ subscription = test_instance.create_subscription(key: 'test_key')
63
+ expect(test_instance.subscriptions.reload).not_to be_empty
64
+ expect(test_instance.find_or_create_subscription('test_key')).to eq(subscription)
65
+ end
66
+ end
67
+
68
+ context "when the cofigured subscription does not exist" do
69
+ it "returns created subscription record" do
70
+ expect(test_instance.find_or_create_subscription('test_key').target).to eq(test_instance)
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "#create_subscription" do
76
+ before do
77
+ expect(test_instance.subscriptions).to be_empty
78
+ end
79
+
80
+ context "without params" do
81
+ it "does not create a new subscription since it is invalid" do
82
+ new_subscription = test_instance.create_subscription
83
+ expect(new_subscription).to be_nil
84
+ expect(test_instance.subscriptions.reload).to be_empty
85
+ end
86
+ end
87
+
88
+ context "with only key params" do
89
+ it "creates a new subscription" do
90
+ params = { key: 'key_1' }
91
+ new_subscription = test_instance.create_subscription(params)
92
+ expect(new_subscription.subscribing).to be_truthy
93
+ expect(new_subscription.subscribing_to_email).to be_truthy
94
+ expect(test_instance.subscriptions.reload.size).to eq(1)
95
+ end
96
+ end
97
+
98
+ context "with false as subscribing params" do
99
+ it "creates a new subscription" do
100
+ params = { key: 'key_1', subscribing: false }
101
+ new_subscription = test_instance.create_subscription(params)
102
+ expect(new_subscription.subscribing).to be_falsey
103
+ expect(new_subscription.subscribing_to_email).to be_falsey
104
+ expect(test_instance.subscriptions.reload.size).to eq(1)
105
+ end
106
+ end
107
+
108
+ context "with false as subscribing_to_email params" do
109
+ it "creates a new subscription" do
110
+ params = { key: 'key_1', subscribing_to_email: false }
111
+ new_subscription = test_instance.create_subscription(params)
112
+ expect(new_subscription.subscribing).to be_truthy
113
+ expect(new_subscription.subscribing_to_email).to be_falsey
114
+ expect(test_instance.subscriptions.reload.size).to eq(1)
115
+ end
116
+ end
117
+
118
+ context "with true as subscribing and false as subscribing_to_email params" do
119
+ it "creates a new subscription" do
120
+ params = { key: 'key_1', subscribing: true, subscribing_to_email: false }
121
+ new_subscription = test_instance.create_subscription(params)
122
+ expect(new_subscription.subscribing).to be_truthy
123
+ expect(new_subscription.subscribing_to_email).to be_falsey
124
+ expect(test_instance.subscriptions.reload.size).to eq(1)
125
+ end
126
+ end
127
+
128
+ context "with false as subscribing and true as subscribing_to_email params" do
129
+ it "does not create a new subscription since it is invalid" do
130
+ params = { key: 'key_1', subscribing: false, subscribing_to_email: true }
131
+ new_subscription = test_instance.create_subscription(params)
132
+ expect(new_subscription).to be_nil
133
+ expect(test_instance.subscriptions.reload).to be_empty
134
+ end
135
+ end
136
+ end
137
+
138
+ describe "#subscription_index" do
139
+ context "when the target has no subscriptions" do
140
+ it "returns empty records" do
141
+ expect(test_instance.subscription_index).to be_empty
142
+ end
143
+ end
144
+
145
+ context "when the target has subscriptions" do
146
+ before do
147
+ @subscription2 = create(:subscription, target: test_instance, key: 'subscription_key_2')
148
+ @subscription1 = create(:subscription, target: test_instance, key: 'subscription_key_1')
149
+ end
150
+
151
+ context "without any options" do
152
+ it "returns the array of subscriptions" do
153
+ expect(test_instance.subscription_index[0]).to eq(@subscription1)
154
+ expect(test_instance.subscription_index[1]).to eq(@subscription2)
155
+ expect(test_instance.subscription_index.size).to eq(2)
156
+ end
157
+ end
158
+
159
+ context "with limit" do
160
+ it "returns the same as subscriptions with limit" do
161
+ options = { limit: 1 }
162
+ expect(test_instance.subscription_index(options)[0]).to eq(@subscription1)
163
+ expect(test_instance.subscription_index(options).size).to eq(1)
164
+ end
165
+ end
166
+
167
+ context "with reverse" do
168
+ it "returns the earliest order" do
169
+ options = { reverse: true }
170
+ expect(test_instance.subscription_index(options)[0]).to eq(@subscription2)
171
+ expect(test_instance.subscription_index(options)[1]).to eq(@subscription1)
172
+ expect(test_instance.subscription_index(options).size).to eq(2)
173
+ end
174
+ end
175
+
176
+ context 'with filtered_by_key options' do
177
+ it "returns filtered notifications only" do
178
+ options = { filtered_by_key: 'subscription_key_2' }
179
+ expect(test_instance.subscription_index(options)[0]).to eq(@subscription2)
180
+ expect(test_instance.subscription_index(options).size).to eq(1)
181
+ end
182
+ end
183
+
184
+ context 'with custom_filter options' do
185
+ it "returns filtered notifications only" do
186
+ options = { custom_filter: ["key = ?", 'subscription_key_2'] }
187
+ expect(test_instance.subscription_index(options)[0]).to eq(@subscription2)
188
+ expect(test_instance.subscription_index(options).size).to eq(1)
189
+
190
+ options = { custom_filter: { key: 'subscription_key_1' } }
191
+ expect(test_instance.subscription_index(options)[0]).to eq(@subscription1)
192
+ expect(test_instance.subscription_index(options).size).to eq(1)
193
+ end
194
+ end
195
+
196
+ #TODO
197
+ # context 'with with_target options' do
198
+ # it "calls includes(:target)" do
199
+ # expect(ActiveRecord::Base).to receive(:includes).with(:target)
200
+ # test_instance.subscription_index(with_target: true)
201
+ # end
202
+ # end
203
+
204
+ context 'without with_target options' do
205
+ it "does not call includes(:target)" do
206
+ expect(ActiveRecord::Base).not_to receive(:includes).with(:target)
207
+ test_instance.subscription_index
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ describe "#notification_keys" do
214
+ context "when the target has no notifications" do
215
+ it "returns empty records" do
216
+ expect(test_instance.notification_keys).to be_empty
217
+ end
218
+ end
219
+
220
+ context "when the target has notifications" do
221
+ before do
222
+ create(:notification, target: test_instance, key: 'notification_key_2')
223
+ create(:notification, target: test_instance, key: 'notification_key_1')
224
+ create(:subscription, target: test_instance, key: 'notification_key_1')
225
+ end
226
+
227
+ context "without any options" do
228
+ it "returns the array of notification keys" do
229
+ expect(test_instance.notification_keys[0]).to eq('notification_key_1')
230
+ expect(test_instance.notification_keys[1]).to eq('notification_key_2')
231
+ expect(test_instance.notification_keys.size).to eq(2)
232
+ end
233
+ end
234
+
235
+ context "with limit" do
236
+ it "returns the same as subscriptions with limit" do
237
+ options = { limit: 1 }
238
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_1')
239
+ expect(test_instance.notification_keys(options).size).to eq(1)
240
+ end
241
+ end
242
+
243
+ context "with reverse" do
244
+ it "returns the earliest order" do
245
+ options = { reverse: true }
246
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_2')
247
+ expect(test_instance.notification_keys(options)[1]).to eq('notification_key_1')
248
+ expect(test_instance.notification_keys(options).size).to eq(2)
249
+ end
250
+ end
251
+
252
+ context 'with filter' do
253
+ context 'as :configured' do
254
+ it "returns notification keys of configured subscriptions only" do
255
+ options = { filter: :configured }
256
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_1')
257
+ expect(test_instance.notification_keys(options).size).to eq(1)
258
+ options = { filter: 'configured' }
259
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_1')
260
+ expect(test_instance.notification_keys(options).size).to eq(1)
261
+ end
262
+ end
263
+
264
+ context 'as :unconfigured' do
265
+ it "returns unconfigured notification keys only" do
266
+ options = { filter: :unconfigured }
267
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_2')
268
+ expect(test_instance.notification_keys(options).size).to eq(1)
269
+ options = { filter: 'unconfigured' }
270
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_2')
271
+ expect(test_instance.notification_keys(options).size).to eq(1)
272
+ end
273
+ end
274
+ end
275
+
276
+ context 'with filtered_by_key options' do
277
+ it "returns filtered notifications only" do
278
+ options = { filtered_by_key: 'notification_key_2' }
279
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_2')
280
+ expect(test_instance.notification_keys(options).size).to eq(1)
281
+ end
282
+ end
283
+
284
+ context 'with custom_filter options' do
285
+ it "returns filtered notifications only" do
286
+ options = { custom_filter: ["key = ?", 'notification_key_2'] }
287
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_2')
288
+ expect(test_instance.notification_keys(options).size).to eq(1)
289
+
290
+ options = { custom_filter: { key: 'notification_key_1' } }
291
+ expect(test_instance.notification_keys(options)[0]).to eq('notification_key_1')
292
+ expect(test_instance.notification_keys(options).size).to eq(1)
293
+ end
294
+ end
295
+ end
296
+ end
297
+
298
+ # Function test for subscriptions
299
+
300
+ describe "#notify_to" do
301
+ before do
302
+ @test_key = 'test_key'
303
+ Comment.acts_as_notifiable described_class.to_s.underscore.pluralize.to_sym, targets: [], email_allowed: true
304
+ @notifiable = create(:comment)
305
+ expect(@notifiable.notification_email_allowed?(test_instance, @test_key)).to be_truthy
306
+ end
307
+
308
+ context "subscribing to notification" do
309
+ before do
310
+ test_instance.create_subscription(key: @test_key)
311
+ expect(test_instance.subscribes_to_notification?(@test_key)).to be_truthy
312
+ end
313
+
314
+ it "returns created notification" do
315
+ notification = test_instance.notify_to(@notifiable, key: @test_key)
316
+ expect(notification).not_to be_nil
317
+ expect(notification.target).to eq(test_instance)
318
+ end
319
+
320
+ it "creates notification records" do
321
+ test_instance.notify_to(@notifiable, key: @test_key)
322
+ expect(test_instance.notifications.unopened_only.count).to eq(1)
323
+ end
324
+ end
325
+
326
+ context "subscribing to notification email" do
327
+ before do
328
+ test_instance.create_subscription(key: @test_key)
329
+ expect(test_instance.subscribes_to_notification_email?(@test_key)).to be_truthy
330
+ end
331
+
332
+ context "as default" do
333
+ it "sends notification email later" do
334
+ expect {
335
+ perform_enqueued_jobs do
336
+ test_instance.notify_to(@notifiable, key: @test_key)
337
+ end
338
+ }.to change { ActivityNotification::Mailer.deliveries.size }.by(1)
339
+ expect(ActivityNotification::Mailer.deliveries.size).to eq(1)
340
+ end
341
+
342
+ it "sends notification email with active job queue" do
343
+ expect {
344
+ test_instance.notify_to(@notifiable, key: @test_key)
345
+ }.to change(ActiveJob::Base.queue_adapter.enqueued_jobs, :size).by(1)
346
+ end
347
+ end
348
+
349
+ context "with send_later false" do
350
+ it "sends notification email now" do
351
+ test_instance.notify_to(@notifiable, key: @test_key, send_later: false)
352
+ expect(ActivityNotification::Mailer.deliveries.size).to eq(1)
353
+ end
354
+ end
355
+ end
356
+
357
+ context "unsubscribed to notification" do
358
+ before do
359
+ test_instance.create_subscription(key: @test_key, subscribing: false)
360
+ expect(test_instance.subscribes_to_notification?(@test_key)).to be_falsey
361
+ end
362
+
363
+ it "returns nil" do
364
+ notification = test_instance.notify_to(@notifiable, key: @test_key)
365
+ expect(notification).to be_nil
366
+ end
367
+
368
+ it "does not create notification records" do
369
+ test_instance.notify_to(@notifiable, key: @test_key)
370
+ expect(test_instance.notifications.unopened_only.count).to eq(0)
371
+ end
372
+ end
373
+
374
+ context "unsubscribed to notification email" do
375
+ before do
376
+ test_instance.create_subscription(key: @test_key, subscribing: true, subscribing_to_email: false)
377
+ expect(test_instance.subscribes_to_notification_email?(@test_key)).to be_falsey
378
+ end
379
+
380
+ context "as default" do
381
+ it "does not send notification email later" do
382
+ expect {
383
+ perform_enqueued_jobs do
384
+ test_instance.notify_to(@notifiable, key: @test_key)
385
+ end
386
+ }.to change { ActivityNotification::Mailer.deliveries.size }.by(0)
387
+ expect(ActivityNotification::Mailer.deliveries.size).to eq(0)
388
+ end
389
+
390
+ it "does not send notification email with active job queue" do
391
+ expect {
392
+ test_instance.notify_to(@notifiable, key: @test_key)
393
+ }.to change(ActiveJob::Base.queue_adapter.enqueued_jobs, :size).by(0)
394
+ end
395
+ end
396
+
397
+ context "with send_later false" do
398
+ it "does not send notification email now" do
399
+ test_instance.notify_to(@notifiable, key: @test_key, send_later: false)
400
+ expect(ActivityNotification::Mailer.deliveries.size).to eq(0)
401
+ end
402
+ end
403
+ end
404
+ end
405
+
406
+ describe "#subscribes_to_notification?" do
407
+ before do
408
+ @test_key = 'test_key'
409
+ end
410
+
411
+ context "when the subscription is not enabled for the target" do
412
+ it "returns true" do
413
+ described_class._notification_subscription_allowed = false
414
+ expect(test_instance.subscribes_to_notification?(@test_key)).to be_truthy
415
+ end
416
+ end
417
+
418
+ context "when the subscription is enabled for the target" do
419
+ before do
420
+ described_class._notification_subscription_allowed = true
421
+ end
422
+
423
+ context "without configured subscpriotion" do
424
+ context "without subscribe_as_default argument" do
425
+ context "with true as ActivityNotification.config.subscribe_as_default" do
426
+ it "returns true" do
427
+ subscribe_as_default = ActivityNotification.config.subscribe_as_default
428
+ ActivityNotification.config.subscribe_as_default = true
429
+ expect(test_instance.subscribes_to_notification?(@test_key)).to be_truthy
430
+ ActivityNotification.config.subscribe_as_default = subscribe_as_default
431
+ end
432
+ end
433
+
434
+ context "with false as ActivityNotification.config.subscribe_as_default" do
435
+ it "returns false" do
436
+ subscribe_as_default = ActivityNotification.config.subscribe_as_default
437
+ ActivityNotification.config.subscribe_as_default = false
438
+ expect(test_instance.subscribes_to_notification?(@test_key)).to be_falsey
439
+ ActivityNotification.config.subscribe_as_default = subscribe_as_default
440
+ end
441
+ end
442
+ end
443
+ end
444
+
445
+ context "with configured subscpriotion" do
446
+ context "subscribing to notification" do
447
+ it "returns true" do
448
+ subscription = test_instance.create_subscription(key: @test_key)
449
+ expect(subscription.subscribing).to be_truthy
450
+ expect(test_instance.subscribes_to_notification?(@test_key)).to be_truthy
451
+ end
452
+ end
453
+
454
+ context "unsubscribed to notification" do
455
+ it "returns false" do
456
+ subscription = test_instance.create_subscription(key: @test_key, subscribing: false)
457
+ expect(subscription.subscribing).to be_falsey
458
+ expect(test_instance.subscribes_to_notification?(@test_key)).to be_falsey
459
+ end
460
+ end
461
+ end
462
+ end
463
+ end
464
+
465
+ describe "#subscribes_to_notification_email?" do
466
+ before do
467
+ @test_key = 'test_key'
468
+ end
469
+
470
+ context "when the subscription is not enabled for the target" do
471
+ it "returns true" do
472
+ described_class._notification_subscription_allowed = false
473
+ expect(test_instance.subscribes_to_notification_email?(@test_key)).to be_truthy
474
+ end
475
+ end
476
+
477
+ context "when the subscription is enabled for the target" do
478
+ before do
479
+ described_class._notification_subscription_allowed = true
480
+ end
481
+
482
+ context "without configured subscpriotion" do
483
+ context "without subscribe_as_default argument" do
484
+ context "with true as ActivityNotification.config.subscribe_as_default" do
485
+ it "returns true" do
486
+ subscribe_as_default = ActivityNotification.config.subscribe_as_default
487
+ ActivityNotification.config.subscribe_as_default = true
488
+ expect(test_instance.subscribes_to_notification_email?(@test_key)).to be_truthy
489
+ ActivityNotification.config.subscribe_as_default = subscribe_as_default
490
+ end
491
+ end
492
+
493
+ context "with false as ActivityNotification.config.subscribe_as_default" do
494
+ it "returns false" do
495
+ subscribe_as_default = ActivityNotification.config.subscribe_as_default
496
+ ActivityNotification.config.subscribe_as_default = false
497
+ expect(test_instance.subscribes_to_notification_email?(@test_key)).to be_falsey
498
+ ActivityNotification.config.subscribe_as_default = subscribe_as_default
499
+ end
500
+ end
501
+ end
502
+ end
503
+
504
+ context "with configured subscpriotion" do
505
+ context "subscribing to notification email" do
506
+ it "returns true" do
507
+ subscription = test_instance.create_subscription(key: @test_key)
508
+ expect(subscription.subscribing_to_email).to be_truthy
509
+ expect(test_instance.subscribes_to_notification_email?(@test_key)).to be_truthy
510
+ end
511
+ end
512
+
513
+ context "unsubscribed to notification" do
514
+ it "returns false" do
515
+ subscription = test_instance.create_subscription(key: @test_key, subscribing: true, subscribing_to_email: false)
516
+ expect(subscription.subscribing_to_email).to be_falsey
517
+ expect(test_instance.subscribes_to_notification_email?(@test_key)).to be_falsey
518
+ end
519
+ end
520
+ end
521
+ end
522
+ end
523
+
524
+ end
525
+ end