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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +33 -0
- data/.rubocop.yml +1157 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile.lock +15 -17
- data/README.md +154 -27
- data/activity_notification.gemspec +1 -1
- data/app/controllers/activity_notification/notifications_controller.rb +30 -104
- data/app/controllers/activity_notification/notifications_with_devise_controller.rb +1 -33
- data/app/controllers/activity_notification/subscriptions_controller.rb +184 -0
- data/app/controllers/activity_notification/subscriptions_with_devise_controller.rb +6 -0
- data/app/mailers/activity_notification/mailer.rb +3 -3
- data/app/views/activity_notification/notifications/default/_index.html.erb +3 -0
- data/app/views/activity_notification/notifications/default/index.html.erb +8 -10
- data/app/views/activity_notification/notifications/default/show.html.erb +24 -2
- data/app/views/activity_notification/subscriptions/default/_form.html.erb +52 -0
- data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +89 -0
- data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +73 -0
- data/app/views/activity_notification/subscriptions/default/_subscriptions.html.erb +13 -0
- data/app/views/activity_notification/subscriptions/default/create.js.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/destroy.js.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/index.html.erb +197 -0
- data/app/views/activity_notification/subscriptions/default/show.html.erb +177 -0
- data/app/views/activity_notification/subscriptions/default/subscribe.js.erb +8 -0
- data/app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb +6 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe.js.erb +8 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb +6 -0
- data/gemfiles/Gemfile.rails-4.2.lock +18 -20
- data/gemfiles/Gemfile.rails-5.0.lock +18 -20
- data/lib/activity_notification.rb +7 -3
- data/lib/activity_notification/apis/notification_api.rb +95 -61
- data/lib/activity_notification/apis/subscription_api.rb +51 -0
- data/lib/activity_notification/common.rb +1 -1
- data/lib/activity_notification/config.rb +65 -17
- data/lib/activity_notification/controllers/common_controller.rb +118 -0
- data/lib/activity_notification/controllers/devise_authentication_controller.rb +41 -0
- data/lib/activity_notification/helpers/view_helpers.rb +131 -3
- data/lib/activity_notification/mailers/helpers.rb +6 -8
- data/lib/activity_notification/models/concerns/notifiable.rb +45 -27
- data/lib/activity_notification/models/concerns/subscriber.rb +149 -0
- data/lib/activity_notification/models/concerns/target.rb +100 -66
- data/lib/activity_notification/models/notification.rb +7 -5
- data/lib/activity_notification/models/subscription.rb +93 -0
- data/lib/activity_notification/rails/routes.rb +148 -33
- data/lib/activity_notification/renderable.rb +3 -4
- data/lib/activity_notification/roles/acts_as_notifiable.rb +14 -1
- data/lib/activity_notification/roles/acts_as_target.rb +11 -8
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/activity_notification/controllers_generator.rb +2 -2
- data/lib/generators/activity_notification/install_generator.rb +0 -1
- data/lib/generators/activity_notification/migration/migration_generator.rb +8 -2
- data/lib/generators/activity_notification/models_generator.rb +53 -0
- data/lib/generators/activity_notification/views_generator.rb +7 -7
- data/lib/generators/templates/activity_notification.rb +17 -3
- data/lib/generators/templates/controllers/notifications_controller.rb +18 -17
- data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +18 -17
- data/lib/generators/templates/controllers/subscriptions_controller.rb +79 -0
- data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +87 -0
- data/lib/generators/templates/migrations/migration.rb +57 -0
- data/lib/generators/templates/models/README +10 -0
- data/lib/generators/templates/{notification → models}/notification.rb +1 -3
- data/lib/generators/templates/models/subscription.rb +4 -0
- data/spec/concerns/apis/notification_api_spec.rb +48 -11
- data/spec/concerns/apis/subscription_api_spec.rb +167 -0
- data/spec/concerns/models/notifiable_spec.rb +60 -0
- data/spec/concerns/models/subscriber_spec.rb +525 -0
- data/spec/concerns/models/target_spec.rb +271 -42
- data/spec/controllers/common_controller_spec.rb +25 -0
- data/spec/controllers/dummy_common_controller.rb +5 -0
- data/spec/controllers/notifications_controller_shared_examples.rb +2 -6
- data/spec/controllers/subscriptions_controller_shared_examples.rb +735 -0
- data/spec/controllers/subscriptions_controller_spec.rb +12 -0
- data/spec/controllers/subscriptions_with_devise_controller_spec.rb +91 -0
- data/spec/factories/dummy/dummy_subscriber.rb +4 -0
- data/spec/factories/subscriptions.rb +8 -0
- data/spec/generators/controllers_generator_spec.rb +25 -2
- data/spec/generators/migration/migration_generator_spec.rb +3 -3
- data/spec/generators/models_generator_spec.rb +96 -0
- data/spec/generators/views_generator_spec.rb +84 -0
- data/spec/helpers/view_helpers_spec.rb +143 -0
- data/spec/mailers/mailer_spec.rb +5 -4
- data/spec/models/dummy/dummy_subscriber_spec.rb +5 -0
- data/spec/models/notification_spec.rb +7 -7
- data/spec/models/subscription_spec.rb +158 -0
- data/spec/rails_app/app/controllers/users/notifications_controller.rb +67 -0
- data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +75 -0
- data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +79 -0
- data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +87 -0
- data/spec/rails_app/app/models/admin.rb +1 -0
- data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +4 -0
- data/spec/rails_app/app/models/user.rb +2 -1
- data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +1 -0
- data/spec/rails_app/app/views/articles/index.html.erb +6 -0
- data/spec/rails_app/config/initializers/activity_notification.rb +17 -3
- data/spec/rails_app/config/routes.rb +2 -2
- data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +33 -0
- data/spec/rails_app/db/schema.rb +18 -0
- data/spec/roles/acts_as_notifiable_spec.rb +1 -1
- data/spec/roles/acts_as_target_spec.rb +1 -1
- metadata +70 -11
- data/lib/generators/activity_notification/notification/notification_generator.rb +0 -20
- data/lib/generators/templates/active_record/migration.rb +0 -18
- data/spec/generators/notification/notification_generator_spec.rb +0 -41
- data/spec/rails_app/db/migrate/20160715050420_create_notifications.rb +0 -18
@@ -10,7 +10,7 @@ shared_examples_for :target do
|
|
10
10
|
expect(test_instance.notifications.count).to eq(2)
|
11
11
|
expect(test_instance.notifications.earliest).to eq(notification_1)
|
12
12
|
expect(test_instance.notifications.latest).to eq(notification_2)
|
13
|
-
expect(test_instance.notifications).to eq
|
13
|
+
expect(test_instance.notifications).to eq(ActivityNotification::Notification.filtered_by_target(test_instance))
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -43,34 +43,103 @@ shared_examples_for :target do
|
|
43
43
|
notification_5 = create(:notification, target: target_2)
|
44
44
|
notification_6 = create(:notification, target: test_notifiable)
|
45
45
|
|
46
|
-
|
47
|
-
expect(
|
46
|
+
index_map = described_class.notification_index_map
|
47
|
+
expect(index_map.size).to eq(2)
|
48
|
+
expect(index_map[target_1].size).to eq(3)
|
48
49
|
expect(described_class.notification_index_map[target_2].size).to eq(2)
|
49
50
|
end
|
50
|
-
end
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
52
|
+
context "with :filtered_by_status" do
|
53
|
+
context "as :opened" do
|
54
|
+
it "returns opened notifications of this target type group by target" do
|
55
|
+
ActivityNotification::Notification.delete_all
|
56
|
+
target_1 = create(test_class_name)
|
57
|
+
target_2 = create(test_class_name)
|
58
|
+
target_3 = create(test_class_name)
|
59
|
+
notification_1 = create(:notification, target: target_1)
|
60
|
+
notification_2 = create(:notification, target: target_1)
|
61
|
+
notification_2.open!
|
62
|
+
notification_3 = create(:notification, target: target_1)
|
63
|
+
notification_3.open!
|
64
|
+
notification_4 = create(:notification, target: target_2)
|
65
|
+
notification_5 = create(:notification, target: target_2)
|
66
|
+
notification_5.open!
|
67
|
+
notification_6 = create(:notification, target: target_3)
|
68
|
+
notification_7 = create(:notification, target: test_notifiable)
|
69
|
+
|
70
|
+
index_map = described_class.notification_index_map(filtered_by_status: :opened)
|
71
|
+
expect(index_map.size).to eq(2)
|
72
|
+
expect(index_map[target_1].size).to eq(2)
|
73
|
+
expect(index_map[target_2].size).to eq(1)
|
74
|
+
expect(index_map.has_key?(target_3)).to be_falsey
|
75
|
+
end
|
76
|
+
end
|
68
77
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
78
|
+
context "as :unopened" do
|
79
|
+
it "returns unopened notifications of this target type group by target" do
|
80
|
+
ActivityNotification::Notification.delete_all
|
81
|
+
target_1 = create(test_class_name)
|
82
|
+
target_2 = create(test_class_name)
|
83
|
+
target_3 = create(test_class_name)
|
84
|
+
notification_1 = create(:notification, target: target_1)
|
85
|
+
notification_2 = create(:notification, target: target_1)
|
86
|
+
notification_3 = create(:notification, target: target_1)
|
87
|
+
notification_3.open!
|
88
|
+
notification_4 = create(:notification, target: target_2)
|
89
|
+
notification_5 = create(:notification, target: target_2)
|
90
|
+
notification_5.open!
|
91
|
+
notification_6 = create(:notification, target: target_3)
|
92
|
+
notification_6.open!
|
93
|
+
notification_7 = create(:notification, target: test_notifiable)
|
94
|
+
|
95
|
+
index_map = described_class.notification_index_map(filtered_by_status: :unopened)
|
96
|
+
expect(index_map.size).to eq(2)
|
97
|
+
expect(index_map[target_1].size).to eq(2)
|
98
|
+
expect(index_map[target_2].size).to eq(1)
|
99
|
+
expect(index_map.has_key?(target_3)).to be_falsey
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "with :as_latest_group_member" do
|
105
|
+
before do
|
106
|
+
ActivityNotification::Notification.delete_all
|
107
|
+
@target_1 = create(test_class_name)
|
108
|
+
@target_2 = create(test_class_name)
|
109
|
+
@target_3 = create(test_class_name)
|
110
|
+
notification_1 = create(:notification, target: @target_1)
|
111
|
+
@notification_2 = create(:notification, target: @target_1)
|
112
|
+
notification_3 = create(:notification, target: @target_1, group_owner: @notification_2)
|
113
|
+
@notification_4 = create(:notification, target: @target_1, group_owner: @notification_2)
|
114
|
+
notification_5 = create(:notification, target: @target_2)
|
115
|
+
notification_6 = create(:notification, target: @target_2)
|
116
|
+
notification_6.open!
|
117
|
+
notification_7 = create(:notification, target: @target_3)
|
118
|
+
notification_7.open!
|
119
|
+
notification_8 = create(:notification, target: test_notifiable)
|
120
|
+
end
|
121
|
+
|
122
|
+
context "as default" do
|
123
|
+
it "returns earliest group members" do
|
124
|
+
index_map = described_class.notification_index_map(filtered_by_status: :unopened)
|
125
|
+
expect(index_map.size).to eq(2)
|
126
|
+
expect(index_map[@target_1].size).to eq(2)
|
127
|
+
expect(index_map[@target_1].first).to eq(@notification_2)
|
128
|
+
expect(index_map[@target_2].size).to eq(1)
|
129
|
+
expect(index_map.has_key?(@target_3)).to be_falsey
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
context "as true" do
|
134
|
+
it "returns latest group members" do
|
135
|
+
index_map = described_class.notification_index_map(filtered_by_status: :unopened, as_latest_group_member: true)
|
136
|
+
expect(index_map.size).to eq(2)
|
137
|
+
expect(index_map[@target_1].size).to eq(2)
|
138
|
+
expect(index_map[@target_1].first).to eq(@notification_4)
|
139
|
+
expect(index_map[@target_2].size).to eq(1)
|
140
|
+
expect(index_map.has_key?(@target_3)).to be_falsey
|
141
|
+
end
|
142
|
+
end
|
74
143
|
end
|
75
144
|
end
|
76
145
|
|
@@ -99,6 +168,29 @@ shared_examples_for :target do
|
|
99
168
|
expect(sent_email_map.has_key?(target_3)).to be_falsey
|
100
169
|
end
|
101
170
|
end
|
171
|
+
|
172
|
+
describe "subscription_enabled?" do
|
173
|
+
context "with true as _notification_subscription_allowed" do
|
174
|
+
it "returns true" do
|
175
|
+
described_class._notification_subscription_allowed = true
|
176
|
+
expect(described_class.subscription_enabled?).to eq(true)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context "with false as _notification_subscription_allowed" do
|
181
|
+
it "returns false" do
|
182
|
+
described_class._notification_subscription_allowed = false
|
183
|
+
expect(described_class.subscription_enabled?).to eq(false)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
context "with lambda configuration as _notification_subscription_allowed" do
|
188
|
+
it "returns true (even if configured lambda function returns false)" do
|
189
|
+
described_class._notification_subscription_allowed = ->(target, key){ false }
|
190
|
+
expect(described_class.subscription_enabled?).to eq(true)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
102
194
|
end
|
103
195
|
|
104
196
|
describe "as public instance methods" do
|
@@ -195,6 +287,110 @@ shared_examples_for :target do
|
|
195
287
|
end
|
196
288
|
end
|
197
289
|
|
290
|
+
describe "#batch_notification_email_allowed?" do
|
291
|
+
context "without any configuration" do
|
292
|
+
it "returns ActivityNotification.config.email_enabled" do
|
293
|
+
expect(test_instance.batch_notification_email_allowed?('dummy_key'))
|
294
|
+
.to eq(ActivityNotification.config.email_enabled)
|
295
|
+
end
|
296
|
+
|
297
|
+
it "returns false as default" do
|
298
|
+
expect(test_instance.batch_notification_email_allowed?('dummy_key')).to be_falsey
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
context "configured with a field" do
|
303
|
+
it "returns specified value" do
|
304
|
+
described_class._batch_notification_email_allowed = true
|
305
|
+
expect(test_instance.batch_notification_email_allowed?('dummy_key')).to eq(true)
|
306
|
+
end
|
307
|
+
|
308
|
+
it "returns specified symbol without argument" do
|
309
|
+
module AdditionalMethods
|
310
|
+
def custom_batch_notification_email_allowed?
|
311
|
+
true
|
312
|
+
end
|
313
|
+
end
|
314
|
+
test_instance.extend(AdditionalMethods)
|
315
|
+
described_class._batch_notification_email_allowed = :custom_batch_notification_email_allowed?
|
316
|
+
expect(test_instance.batch_notification_email_allowed?('dummy_key')).to eq(true)
|
317
|
+
end
|
318
|
+
|
319
|
+
it "returns specified symbol with target and key arguments" do
|
320
|
+
module AdditionalMethods
|
321
|
+
def custom_batch_notification_email_allowed?(key)
|
322
|
+
true
|
323
|
+
end
|
324
|
+
end
|
325
|
+
test_instance.extend(AdditionalMethods)
|
326
|
+
described_class._batch_notification_email_allowed = :custom_batch_notification_email_allowed?
|
327
|
+
expect(test_instance.batch_notification_email_allowed?('dummy_key')).to eq(true)
|
328
|
+
end
|
329
|
+
|
330
|
+
it "returns specified lambda with single target argument" do
|
331
|
+
described_class._batch_notification_email_allowed = ->(target){ true }
|
332
|
+
expect(test_instance.batch_notification_email_allowed?('dummy_key')).to eq(true)
|
333
|
+
end
|
334
|
+
|
335
|
+
it "returns specified lambda with target and key arguments" do
|
336
|
+
described_class._batch_notification_email_allowed = ->(target, key){ true }
|
337
|
+
expect(test_instance.batch_notification_email_allowed?('dummy_key')).to eq(true)
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
describe "#subscription_allowed?" do
|
343
|
+
context "without any configuration" do
|
344
|
+
it "returns ActivityNotification.config.subscription_enabled" do
|
345
|
+
expect(test_instance.subscription_allowed?('dummy_key'))
|
346
|
+
.to eq(ActivityNotification.config.subscription_enabled)
|
347
|
+
end
|
348
|
+
|
349
|
+
it "returns false as default" do
|
350
|
+
expect(test_instance.subscription_allowed?('dummy_key')).to be_falsey
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
context "configured with a field" do
|
355
|
+
it "returns specified value" do
|
356
|
+
described_class._notification_subscription_allowed = true
|
357
|
+
expect(test_instance.subscription_allowed?('dummy_key')).to eq(true)
|
358
|
+
end
|
359
|
+
|
360
|
+
it "returns specified symbol without argument" do
|
361
|
+
module AdditionalMethods
|
362
|
+
def custom_subscription_allowed?
|
363
|
+
true
|
364
|
+
end
|
365
|
+
end
|
366
|
+
test_instance.extend(AdditionalMethods)
|
367
|
+
described_class._notification_subscription_allowed = :custom_subscription_allowed?
|
368
|
+
expect(test_instance.subscription_allowed?('dummy_key')).to eq(true)
|
369
|
+
end
|
370
|
+
|
371
|
+
it "returns specified symbol with key argument" do
|
372
|
+
module AdditionalMethods
|
373
|
+
def custom_subscription_allowed?(key)
|
374
|
+
true
|
375
|
+
end
|
376
|
+
end
|
377
|
+
test_instance.extend(AdditionalMethods)
|
378
|
+
described_class._notification_subscription_allowed = :custom_subscription_allowed?
|
379
|
+
expect(test_instance.subscription_allowed?('dummy_key')).to eq(true)
|
380
|
+
end
|
381
|
+
|
382
|
+
it "returns specified lambda with single target argument" do
|
383
|
+
described_class._notification_subscription_allowed = ->(target){ true }
|
384
|
+
expect(test_instance.subscription_allowed?('dummy_key')).to eq(true)
|
385
|
+
end
|
386
|
+
|
387
|
+
it "returns specified lambda with target and key arguments" do
|
388
|
+
described_class._notification_subscription_allowed = ->(target, key){ true }
|
389
|
+
expect(test_instance.subscription_allowed?('dummy_key')).to eq(true)
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
198
394
|
describe "#authenticated_with_devise?" do
|
199
395
|
context "without any configuration" do
|
200
396
|
context "when the current devise resource and called target are defferent class instance" do
|
@@ -431,8 +627,8 @@ shared_examples_for :target do
|
|
431
627
|
|
432
628
|
context "when the target has no unopened notifications" do
|
433
629
|
before do
|
434
|
-
create(:notification, target: test_instance, opened_at:
|
435
|
-
create(:notification, target: test_instance, opened_at:
|
630
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
631
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
436
632
|
end
|
437
633
|
|
438
634
|
it "calls unopened_notification_index" do
|
@@ -485,7 +681,7 @@ shared_examples_for :target do
|
|
485
681
|
end
|
486
682
|
|
487
683
|
it "returns unopened notification index (unopened only)" do
|
488
|
-
notification_3 = create(:notification, target: test_instance, opened_at:
|
684
|
+
notification_3 = create(:notification, target: test_instance, opened_at: Time.current)
|
489
685
|
expect(test_instance.unopened_notification_index.size).to eq(2)
|
490
686
|
expect(test_instance.unopened_notification_index.last).to eq(@notification_1)
|
491
687
|
expect(test_instance.unopened_notification_index.first).to eq(@notification_2)
|
@@ -503,8 +699,8 @@ shared_examples_for :target do
|
|
503
699
|
|
504
700
|
context "when the target has no unopened notifications" do
|
505
701
|
before do
|
506
|
-
create(:notification, target: test_instance, group_owner: nil, opened_at:
|
507
|
-
create(:notification, target: test_instance, group_owner: nil, opened_at:
|
702
|
+
create(:notification, target: test_instance, group_owner: nil, opened_at: Time.current)
|
703
|
+
create(:notification, target: test_instance, group_owner: nil, opened_at: Time.current)
|
508
704
|
end
|
509
705
|
|
510
706
|
it "returns empty records" do
|
@@ -522,8 +718,8 @@ shared_examples_for :target do
|
|
522
718
|
|
523
719
|
context "when the target has opened notifications" do
|
524
720
|
before do
|
525
|
-
@notification_1 = create(:notification, target: test_instance, opened_at:
|
526
|
-
@notification_2 = create(:notification, target: test_instance, opened_at:
|
721
|
+
@notification_1 = create(:notification, target: test_instance, opened_at: Time.current)
|
722
|
+
@notification_2 = create(:notification, target: test_instance, opened_at: Time.current)
|
527
723
|
end
|
528
724
|
|
529
725
|
context "without limit" do
|
@@ -542,7 +738,7 @@ shared_examples_for :target do
|
|
542
738
|
end
|
543
739
|
|
544
740
|
it "returns opened notification index (owner only)" do
|
545
|
-
group_member = create(:notification, target: test_instance, group_owner: @notification_1, opened_at:
|
741
|
+
group_member = create(:notification, target: test_instance, group_owner: @notification_1, opened_at: Time.current)
|
546
742
|
expect(test_instance.opened_notification_index.size).to eq(2)
|
547
743
|
expect(test_instance.opened_notification_index.last).to eq(@notification_1)
|
548
744
|
expect(test_instance.opened_notification_index.first).to eq(@notification_2)
|
@@ -686,8 +882,8 @@ shared_examples_for :target do
|
|
686
882
|
|
687
883
|
context "when the target has no unopened notifications" do
|
688
884
|
before do
|
689
|
-
create(:notification, target: test_instance, opened_at:
|
690
|
-
create(:notification, target: test_instance, opened_at:
|
885
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
886
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
691
887
|
end
|
692
888
|
|
693
889
|
it "calls unopened_notification_index_with_attributes" do
|
@@ -760,8 +956,8 @@ shared_examples_for :target do
|
|
760
956
|
|
761
957
|
context "when the target has no unopened notifications" do
|
762
958
|
before do
|
763
|
-
create(:notification, target: test_instance, opened_at:
|
764
|
-
create(:notification, target: test_instance, opened_at:
|
959
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
960
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
765
961
|
end
|
766
962
|
|
767
963
|
it "returns empty records" do
|
@@ -779,8 +975,8 @@ shared_examples_for :target do
|
|
779
975
|
context "when the target has opened notifications with no group members" do
|
780
976
|
context "with no group members" do
|
781
977
|
before do
|
782
|
-
create(:notification, target: test_instance, opened_at:
|
783
|
-
create(:notification, target: test_instance, opened_at:
|
978
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
979
|
+
create(:notification, target: test_instance, opened_at: Time.current)
|
784
980
|
end
|
785
981
|
|
786
982
|
it "calls with_target, with_notifiable and with_notifier" do
|
@@ -801,9 +997,9 @@ shared_examples_for :target do
|
|
801
997
|
|
802
998
|
context "with group members" do
|
803
999
|
before do
|
804
|
-
group_owner = create(:notification, target: test_instance, group_owner: nil, opened_at:
|
805
|
-
create(:notification, target: test_instance, group_owner: nil, opened_at:
|
806
|
-
group_member = create(:notification, target: test_instance, group_owner: group_owner, opened_at:
|
1000
|
+
group_owner = create(:notification, target: test_instance, group_owner: nil, opened_at: Time.current)
|
1001
|
+
create(:notification, target: test_instance, group_owner: nil, opened_at: Time.current)
|
1002
|
+
group_member = create(:notification, target: test_instance, group_owner: group_owner, opened_at: Time.current)
|
807
1003
|
end
|
808
1004
|
|
809
1005
|
it "calls with_group" do
|
@@ -884,6 +1080,39 @@ shared_examples_for :target do
|
|
884
1080
|
end
|
885
1081
|
end
|
886
1082
|
|
1083
|
+
describe "#subscribes_to_notification?" do
|
1084
|
+
context "when the subscription is not enabled for the target" do
|
1085
|
+
it "returns true" do
|
1086
|
+
described_class._notification_subscription_allowed = false
|
1087
|
+
expect(test_instance.subscribes_to_notification?('test_key')).to be_truthy
|
1088
|
+
end
|
1089
|
+
end
|
1090
|
+
|
1091
|
+
context "when the subscription is enabled for the target" do
|
1092
|
+
it "calls Subscriber#_subscribes_to_notification?" do
|
1093
|
+
described_class._notification_subscription_allowed = true
|
1094
|
+
expect(test_instance).to receive(:_subscribes_to_notification?)
|
1095
|
+
test_instance.subscribes_to_notification?('test_key')
|
1096
|
+
end
|
1097
|
+
end
|
1098
|
+
end
|
1099
|
+
|
1100
|
+
describe "#subscribes_to_notification_email?" do
|
1101
|
+
context "when the subscription is not enabled for the target" do
|
1102
|
+
it "returns true" do
|
1103
|
+
described_class._notification_subscription_allowed = false
|
1104
|
+
expect(test_instance.subscribes_to_notification_email?('test_key')).to be_truthy
|
1105
|
+
end
|
1106
|
+
end
|
1107
|
+
|
1108
|
+
context "when the subscription is enabled for the target" do
|
1109
|
+
it "calls Subscriber#_subscribes_to_notification_email?" do
|
1110
|
+
described_class._notification_subscription_allowed = true
|
1111
|
+
expect(test_instance).to receive(:_subscribes_to_notification_email?)
|
1112
|
+
test_instance.subscribes_to_notification_email?('test_key')
|
1113
|
+
end
|
1114
|
+
end
|
1115
|
+
end
|
887
1116
|
end
|
888
1117
|
|
889
1118
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'controllers/dummy_common_controller'
|
2
|
+
|
3
|
+
describe ActivityNotification::DummyCommonController, type: :controller do
|
4
|
+
|
5
|
+
describe "#set_index_options" do
|
6
|
+
it "raises NotImplementedError" do
|
7
|
+
expect { controller.send(:set_index_options) }
|
8
|
+
.to raise_error(NotImplementedError, /You have to implement .+#set_index_options/)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#load_index" do
|
13
|
+
it "raises NotImplementedError" do
|
14
|
+
expect { controller.send(:load_index) }
|
15
|
+
.to raise_error(NotImplementedError, /You have to implement .+#load_index/)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#controller_path" do
|
20
|
+
it "raises NotImplementedError" do
|
21
|
+
expect { controller.send(:controller_path) }
|
22
|
+
.to raise_error(NotImplementedError, /You have to implement .+#controller_path/)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -240,12 +240,8 @@ shared_examples_for :notification_controller do
|
|
240
240
|
expect(response.status).to eq(302)
|
241
241
|
end
|
242
242
|
|
243
|
-
it "assigns notification index as @notifications" do
|
244
|
-
expect(assigns(:notifications)).to eq([@notification])
|
245
|
-
end
|
246
|
-
|
247
243
|
it "opens all notifications of the target" do
|
248
|
-
expect(
|
244
|
+
expect(@notification.reload.opened?).to be_truthy
|
249
245
|
end
|
250
246
|
|
251
247
|
it "redirects to :index" do
|
@@ -266,7 +262,7 @@ shared_examples_for :notification_controller do
|
|
266
262
|
end
|
267
263
|
|
268
264
|
it "opens all notifications of the target" do
|
269
|
-
expect(
|
265
|
+
expect(@notification.reload.opened?).to be_truthy
|
270
266
|
end
|
271
267
|
|
272
268
|
it "redirects to root_path as request.referer" do
|