activity_notification 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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