activity_notification 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +23 -11
- data/Gemfile.lock +52 -40
- data/README.md +177 -14
- data/activity_notification.gemspec +3 -1
- data/app/controllers/activity_notification/subscriptions_controller.rb +48 -2
- data/app/views/activity_notification/optional_targets/default/base/_default.text.erb +10 -0
- data/app/views/activity_notification/optional_targets/default/slack/_default.text.erb +6 -0
- data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +19 -0
- data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +32 -3
- data/app/views/activity_notification/subscriptions/default/index.html.erb +4 -0
- data/app/views/activity_notification/subscriptions/default/show.html.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/subscribe_to_optional_target.js.erb +6 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe_to_optional_target.js.erb +6 -0
- data/gemfiles/Gemfile.rails-4.2.lock +15 -3
- data/gemfiles/Gemfile.rails-5.0.lock +47 -35
- data/lib/activity_notification.rb +1 -0
- data/lib/activity_notification/apis/notification_api.rb +83 -26
- data/lib/activity_notification/apis/subscription_api.rb +93 -8
- data/lib/activity_notification/common.rb +6 -2
- data/lib/activity_notification/helpers/view_helpers.rb +43 -0
- data/lib/activity_notification/models/concerns/notifiable.rb +73 -28
- data/lib/activity_notification/models/concerns/subscriber.rb +34 -7
- data/lib/activity_notification/models/concerns/target.rb +25 -13
- data/lib/activity_notification/models/subscription.rb +13 -2
- data/lib/activity_notification/optional_targets/amazon_sns.rb +42 -0
- data/lib/activity_notification/optional_targets/base.rb +79 -0
- data/lib/activity_notification/optional_targets/slack.rb +33 -0
- data/lib/activity_notification/rails/routes.rb +30 -20
- data/lib/activity_notification/roles/acts_as_notifiable.rb +70 -11
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/activity_notification/views_generator.rb +2 -2
- data/lib/generators/templates/migrations/migration.rb +2 -2
- data/spec/concerns/apis/notification_api_spec.rb +97 -0
- data/spec/concerns/apis/subscription_api_spec.rb +206 -41
- data/spec/concerns/common_spec.rb +7 -2
- data/spec/concerns/models/notifiable_spec.rb +88 -2
- data/spec/concerns/models/subscriber_spec.rb +114 -13
- data/spec/concerns/models/target_spec.rb +17 -0
- data/spec/controllers/subscriptions_controller_shared_examples.rb +251 -28
- data/spec/helpers/view_helpers_spec.rb +56 -0
- data/spec/optional_targets/amazon_sns_spec.rb +46 -0
- data/spec/optional_targets/base_spec.rb +43 -0
- data/spec/optional_targets/slack_spec.rb +46 -0
- data/spec/rails_app/app/controllers/comments_controller.rb +1 -0
- data/spec/rails_app/app/models/admin.rb +1 -2
- data/spec/rails_app/app/models/article.rb +2 -3
- data/spec/rails_app/app/models/comment.rb +19 -7
- data/spec/rails_app/app/views/activity_notification/optional_targets/admins/amazon_sns/comment/_default.text.erb +8 -0
- data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +1 -1
- data/spec/rails_app/db/migrate/20160715050433_create_test_tables.rb +2 -0
- data/spec/rails_app/db/schema.rb +3 -1
- data/spec/rails_app/db/seeds.rb +1 -1
- data/spec/rails_app/lib/custom_optional_targets/console_output.rb +13 -0
- data/spec/rails_app/lib/custom_optional_targets/wrong_target.rb +10 -0
- data/spec/roles/acts_as_notifiable_spec.rb +124 -2
- metadata +49 -4
- data/spec/rails_app/app/models/notification.rb +0 -6
@@ -14,7 +14,7 @@ module ActivityNotification
|
|
14
14
|
# @example Run view generator to create only notification email views
|
15
15
|
# rails generate activity_notification:views -v mailer
|
16
16
|
class ViewsGenerator < Rails::Generators::Base
|
17
|
-
VIEWS = [:notifications, :mailer, :subscriptions].freeze
|
17
|
+
VIEWS = [:notifications, :mailer, :subscriptions, :optional_targets].freeze
|
18
18
|
|
19
19
|
source_root File.expand_path("../../../../app/views/activity_notification", __FILE__)
|
20
20
|
desc "Copies default ActivityNotification views to your application."
|
@@ -22,7 +22,7 @@ module ActivityNotification
|
|
22
22
|
argument :target, required: false, default: nil,
|
23
23
|
desc: "The target to copy views to"
|
24
24
|
class_option :views, aliases: "-v", type: :array,
|
25
|
-
desc: "Select specific view directories to generate (notifications, mailer, subscriptions)"
|
25
|
+
desc: "Select specific view directories to generate (notifications, mailer, subscriptions, optional_targets)"
|
26
26
|
public_task :copy_views
|
27
27
|
|
28
28
|
# Copies view files in application directory
|
@@ -35,7 +35,7 @@ class <%= @migration_name %> < ActiveRecord::Migration
|
|
35
35
|
t.datetime :unsubscribed_at
|
36
36
|
t.datetime :subscribed_to_email_at
|
37
37
|
t.datetime :unsubscribed_to_email_at
|
38
|
-
t.text :
|
38
|
+
t.text :optional_targets
|
39
39
|
|
40
40
|
t.timestamps
|
41
41
|
end
|
@@ -48,7 +48,7 @@ class <%= @migration_name %> < ActiveRecord::Migration
|
|
48
48
|
# t.datetime :unsubscribed_at
|
49
49
|
# t.datetime :subscribed_to_email_at
|
50
50
|
# t.datetime :unsubscribed_to_email_at
|
51
|
-
# t.text :
|
51
|
+
# t.text :optional_targets
|
52
52
|
#
|
53
53
|
# t.timestamps
|
54
54
|
# end
|
@@ -2,6 +2,7 @@ shared_examples_for :notification_api do
|
|
2
2
|
include ActiveJob::TestHelper
|
3
3
|
let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
|
4
4
|
let(:test_instance) { create(test_class_name) }
|
5
|
+
let(:notifiable_class) { test_instance.notifiable.class }
|
5
6
|
before do
|
6
7
|
ActiveJob::Base.queue_adapter = :test
|
7
8
|
ActivityNotification::Mailer.deliveries.clear
|
@@ -513,6 +514,47 @@ shared_examples_for :notification_api do
|
|
513
514
|
end
|
514
515
|
end
|
515
516
|
|
517
|
+
describe "#publish_to_optional_targets" do
|
518
|
+
before do
|
519
|
+
require 'custom_optional_targets/console_output'
|
520
|
+
@optional_target = CustomOptionalTarget::ConsoleOutput.new
|
521
|
+
notifiable_class.acts_as_notifiable test_instance.target.to_resources_name.to_sym, optional_targets: ->{ [@optional_target] }
|
522
|
+
expect(test_instance.notifiable.optional_targets(test_instance.target.to_resources_name, test_instance.key)).to eq([@optional_target])
|
523
|
+
end
|
524
|
+
|
525
|
+
context "subscribed by target" do
|
526
|
+
before do
|
527
|
+
test_instance.target.create_subscription(key: test_instance.key, optional_targets: { subscribing_to_console_output: true })
|
528
|
+
expect(test_instance.optional_target_subscribed?(:console_output)).to be_truthy
|
529
|
+
end
|
530
|
+
|
531
|
+
it "calls OptionalTarget#notify" do
|
532
|
+
expect(@optional_target).to receive(:notify)
|
533
|
+
test_instance.publish_to_optional_targets
|
534
|
+
end
|
535
|
+
|
536
|
+
it "returns truthy result hash" do
|
537
|
+
expect(test_instance.publish_to_optional_targets).to eq({ console_output: true })
|
538
|
+
end
|
539
|
+
end
|
540
|
+
|
541
|
+
context "unsubscribed by target" do
|
542
|
+
before do
|
543
|
+
test_instance.target.create_subscription(key: test_instance.key, optional_targets: { subscribing_to_console_output: false })
|
544
|
+
expect(test_instance.optional_target_subscribed?(:console_output)).to be_falsey
|
545
|
+
end
|
546
|
+
|
547
|
+
it "does not call OptionalTarget#notify" do
|
548
|
+
expect(@optional_target).not_to receive(:notify)
|
549
|
+
test_instance.publish_to_optional_targets
|
550
|
+
end
|
551
|
+
|
552
|
+
it "returns truthy result hash" do
|
553
|
+
expect(test_instance.publish_to_optional_targets).to eq({ console_output: false })
|
554
|
+
end
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
516
558
|
describe "#open!" do
|
517
559
|
before do
|
518
560
|
described_class.delete_all
|
@@ -1104,6 +1146,30 @@ shared_examples_for :notification_api do
|
|
1104
1146
|
end
|
1105
1147
|
end
|
1106
1148
|
|
1149
|
+
describe "#remove_from_group" do
|
1150
|
+
before do
|
1151
|
+
@member1 = create(test_class_name, target: test_instance.target, group_owner: test_instance)
|
1152
|
+
@member2 = create(test_class_name, target: test_instance.target, group_owner: test_instance)
|
1153
|
+
expect(test_instance.group_member_count).to eq(2)
|
1154
|
+
expect(@member1.group_owner?).to be_falsey
|
1155
|
+
end
|
1156
|
+
|
1157
|
+
it "removes from notification group" do
|
1158
|
+
test_instance.remove_from_group
|
1159
|
+
expect(test_instance.group_member_count).to eq(0)
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
it "makes a new group owner" do
|
1163
|
+
test_instance.remove_from_group
|
1164
|
+
expect(@member1.reload.group_owner?).to be_truthy
|
1165
|
+
expect(@member1.group_members).to eq([@member2])
|
1166
|
+
end
|
1167
|
+
|
1168
|
+
it "returns new group owner instance" do
|
1169
|
+
expect(test_instance.remove_from_group).to eq(@member1)
|
1170
|
+
end
|
1171
|
+
end
|
1172
|
+
|
1107
1173
|
describe "#notifiable_path" do
|
1108
1174
|
it "returns notifiable.notifiable_path" do
|
1109
1175
|
expect(test_instance.notifiable_path)
|
@@ -1124,6 +1190,37 @@ shared_examples_for :notification_api do
|
|
1124
1190
|
.to eq(test_instance.target.subscribes_to_notification_email?(test_instance.key))
|
1125
1191
|
end
|
1126
1192
|
end
|
1193
|
+
|
1194
|
+
describe "#optional_target_subscribed?" do
|
1195
|
+
it "returns target.subscribes_to_optional_target?" do
|
1196
|
+
test_instance.target.create_subscription(key: test_instance.key, optional_targets: { subscribing_to_console_output: false })
|
1197
|
+
expect(test_instance.optional_target_subscribed?(:console_output)).to be_falsey
|
1198
|
+
expect(test_instance.optional_target_subscribed?(:console_output))
|
1199
|
+
.to eq(test_instance.target.subscribes_to_optional_target?(test_instance.key, :console_output))
|
1200
|
+
end
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
describe "#optional_targets" do
|
1204
|
+
it "returns notifiable.optional_targets" do
|
1205
|
+
require 'custom_optional_targets/console_output'
|
1206
|
+
@optional_target = CustomOptionalTarget::ConsoleOutput.new
|
1207
|
+
notifiable_class.acts_as_notifiable test_instance.target.to_resources_name.to_sym, optional_targets: ->{ [@optional_target] }
|
1208
|
+
expect(test_instance.optional_targets).to eq([@optional_target])
|
1209
|
+
expect(test_instance.optional_targets)
|
1210
|
+
.to eq(test_instance.notifiable.optional_targets(test_instance.target.to_resources_name, test_instance.key))
|
1211
|
+
end
|
1212
|
+
end
|
1213
|
+
|
1214
|
+
describe "#optional_target_names" do
|
1215
|
+
it "returns notifiable.optional_target_names" do
|
1216
|
+
require 'custom_optional_targets/console_output'
|
1217
|
+
@optional_target = CustomOptionalTarget::ConsoleOutput.new
|
1218
|
+
notifiable_class.acts_as_notifiable test_instance.target.to_resources_name.to_sym, optional_targets: ->{ [@optional_target] }
|
1219
|
+
expect(test_instance.optional_target_names).to eq([:console_output])
|
1220
|
+
expect(test_instance.optional_target_names)
|
1221
|
+
.to eq(test_instance.notifiable.optional_target_names(test_instance.target.to_resources_name, test_instance.key))
|
1222
|
+
end
|
1223
|
+
end
|
1127
1224
|
end
|
1128
1225
|
|
1129
1226
|
describe "as protected instance methods" do
|
@@ -3,6 +3,26 @@ shared_examples_for :subscription_api do
|
|
3
3
|
let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
|
4
4
|
let(:test_instance) { create(test_class_name) }
|
5
5
|
|
6
|
+
describe "as public class methods" do
|
7
|
+
describe ".to_optional_target_key" do
|
8
|
+
it "returns optional target key" do
|
9
|
+
expect(described_class.to_optional_target_key(:console_output)).to eq(:subscribing_to_console_output)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".to_optional_target_subscribed_at_key" do
|
14
|
+
it "returns optional target subscribed_at key" do
|
15
|
+
expect(described_class.to_optional_target_subscribed_at_key(:console_output)).to eq(:subscribed_to_console_output_at)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ".to_optional_target_unsubscribed_at_key" do
|
20
|
+
it "returns optional target unsubscribed_at key" do
|
21
|
+
expect(described_class.to_optional_target_unsubscribed_at_key(:console_output)).to eq(:unsubscribed_to_console_output_at)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
6
26
|
describe "as public instance methods" do
|
7
27
|
describe "#subscribe" do
|
8
28
|
before do
|
@@ -15,12 +35,12 @@ shared_examples_for :subscription_api do
|
|
15
35
|
|
16
36
|
context "as default" do
|
17
37
|
it "subscribe with current time" do
|
18
|
-
expect(test_instance.subscribing).to eq(false)
|
19
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
38
|
+
expect(test_instance.subscribing?).to eq(false)
|
39
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
20
40
|
Timecop.freeze(Time.current)
|
21
41
|
test_instance.subscribe
|
22
|
-
expect(test_instance.subscribing).to eq(true)
|
23
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
42
|
+
expect(test_instance.subscribing?).to eq(true)
|
43
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
24
44
|
expect(test_instance.subscribed_at).to eq(Time.current)
|
25
45
|
expect(test_instance.subscribed_to_email_at).to eq(Time.current)
|
26
46
|
Timecop.return
|
@@ -29,12 +49,12 @@ shared_examples_for :subscription_api do
|
|
29
49
|
|
30
50
|
context "with subscribed_at option" do
|
31
51
|
it "subscribe with specified time" do
|
32
|
-
expect(test_instance.subscribing).to eq(false)
|
33
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
52
|
+
expect(test_instance.subscribing?).to eq(false)
|
53
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
34
54
|
subscribed_at = Time.current - 1.months
|
35
55
|
test_instance.subscribe(subscribed_at: subscribed_at)
|
36
|
-
expect(test_instance.subscribing).to eq(true)
|
37
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
56
|
+
expect(test_instance.subscribing?).to eq(true)
|
57
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
38
58
|
expect(test_instance.subscribed_at).to eq(subscribed_at)
|
39
59
|
expect(test_instance.subscribed_to_email_at).to eq(subscribed_at)
|
40
60
|
end
|
@@ -42,11 +62,33 @@ shared_examples_for :subscription_api do
|
|
42
62
|
|
43
63
|
context "with false as with_email_subscription" do
|
44
64
|
it "does not subscribe to email" do
|
45
|
-
expect(test_instance.subscribing).to eq(false)
|
46
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
65
|
+
expect(test_instance.subscribing?).to eq(false)
|
66
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
47
67
|
test_instance.subscribe(with_email_subscription: false)
|
48
|
-
expect(test_instance.subscribing).to eq(true)
|
49
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
68
|
+
expect(test_instance.subscribing?).to eq(true)
|
69
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "with optional targets" do
|
74
|
+
it "also subscribes to optional targets" do
|
75
|
+
test_instance.unsubscribe_to_optional_target(:console_output)
|
76
|
+
expect(test_instance.subscribing?).to eq(false)
|
77
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
78
|
+
test_instance.subscribe
|
79
|
+
expect(test_instance.subscribing?).to eq(true)
|
80
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "with false as with_optional_targets" do
|
85
|
+
it "does not subscribe to optional targets" do
|
86
|
+
test_instance.unsubscribe_to_optional_target(:console_output)
|
87
|
+
expect(test_instance.subscribing?).to eq(false)
|
88
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
89
|
+
test_instance.subscribe(with_optional_targets: false)
|
90
|
+
expect(test_instance.subscribing?).to eq(true)
|
91
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
50
92
|
end
|
51
93
|
end
|
52
94
|
end
|
@@ -58,12 +100,12 @@ shared_examples_for :subscription_api do
|
|
58
100
|
|
59
101
|
context "as default" do
|
60
102
|
it "unsubscribe with current time" do
|
61
|
-
expect(test_instance.subscribing).to eq(true)
|
62
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
103
|
+
expect(test_instance.subscribing?).to eq(true)
|
104
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
63
105
|
Timecop.freeze(Time.current)
|
64
106
|
test_instance.unsubscribe
|
65
|
-
expect(test_instance.subscribing).to eq(false)
|
66
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
107
|
+
expect(test_instance.subscribing?).to eq(false)
|
108
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
67
109
|
expect(test_instance.unsubscribed_at).to eq(Time.current)
|
68
110
|
expect(test_instance.unsubscribed_to_email_at).to eq(Time.current)
|
69
111
|
Timecop.return
|
@@ -72,12 +114,12 @@ shared_examples_for :subscription_api do
|
|
72
114
|
|
73
115
|
context "with unsubscribed_at option" do
|
74
116
|
it "unsubscribe with specified time" do
|
75
|
-
expect(test_instance.subscribing).to eq(true)
|
76
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
117
|
+
expect(test_instance.subscribing?).to eq(true)
|
118
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
77
119
|
unsubscribed_at = Time.current - 1.months
|
78
120
|
test_instance.unsubscribe(unsubscribed_at: unsubscribed_at)
|
79
|
-
expect(test_instance.subscribing).to eq(false)
|
80
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
121
|
+
expect(test_instance.subscribing?).to eq(false)
|
122
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
81
123
|
expect(test_instance.unsubscribed_at).to eq(unsubscribed_at)
|
82
124
|
expect(test_instance.unsubscribed_to_email_at).to eq(unsubscribed_at)
|
83
125
|
end
|
@@ -91,29 +133,29 @@ shared_examples_for :subscription_api do
|
|
91
133
|
|
92
134
|
context "for subscribing instance" do
|
93
135
|
it "returns true as successfully updated subscription instance" do
|
94
|
-
expect(test_instance.subscribing).to eq(true)
|
95
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
136
|
+
expect(test_instance.subscribing?).to eq(true)
|
137
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
96
138
|
expect(test_instance.subscribe_to_email).to be_truthy
|
97
139
|
end
|
98
140
|
end
|
99
141
|
|
100
142
|
context "for not subscribing instance" do
|
101
|
-
it "returns false as
|
143
|
+
it "returns false as failure to update subscription instance" do
|
102
144
|
test_instance.unsubscribe
|
103
|
-
expect(test_instance.subscribing).to eq(false)
|
104
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
145
|
+
expect(test_instance.subscribing?).to eq(false)
|
146
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
105
147
|
expect(test_instance.subscribe_to_email).to be_falsey
|
106
148
|
end
|
107
149
|
end
|
108
150
|
|
109
151
|
context "as default" do
|
110
152
|
it "subscribe_to_email with current time" do
|
111
|
-
expect(test_instance.subscribing).to eq(true)
|
112
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
153
|
+
expect(test_instance.subscribing?).to eq(true)
|
154
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
113
155
|
Timecop.freeze(Time.current)
|
114
156
|
test_instance.subscribe_to_email
|
115
|
-
expect(test_instance.subscribing).to eq(true)
|
116
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
157
|
+
expect(test_instance.subscribing?).to eq(true)
|
158
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
117
159
|
expect(test_instance.subscribed_to_email_at).to eq(Time.current)
|
118
160
|
Timecop.return
|
119
161
|
end
|
@@ -121,12 +163,12 @@ shared_examples_for :subscription_api do
|
|
121
163
|
|
122
164
|
context "with subscribed_to_email_at option" do
|
123
165
|
it "subscribe with specified time" do
|
124
|
-
expect(test_instance.subscribing).to eq(true)
|
125
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
166
|
+
expect(test_instance.subscribing?).to eq(true)
|
167
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
126
168
|
subscribed_to_email_at = Time.current - 1.months
|
127
169
|
test_instance.subscribe_to_email(subscribed_to_email_at: subscribed_to_email_at)
|
128
|
-
expect(test_instance.subscribing).to eq(true)
|
129
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
170
|
+
expect(test_instance.subscribing?).to eq(true)
|
171
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
130
172
|
expect(test_instance.subscribed_to_email_at).to eq(subscribed_to_email_at)
|
131
173
|
end
|
132
174
|
end
|
@@ -139,12 +181,12 @@ shared_examples_for :subscription_api do
|
|
139
181
|
|
140
182
|
context "as default" do
|
141
183
|
it "unsubscribe_to_email with current time" do
|
142
|
-
expect(test_instance.subscribing).to eq(true)
|
143
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
184
|
+
expect(test_instance.subscribing?).to eq(true)
|
185
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
144
186
|
Timecop.freeze(Time.current)
|
145
187
|
test_instance.unsubscribe_to_email
|
146
|
-
expect(test_instance.subscribing).to eq(true)
|
147
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
188
|
+
expect(test_instance.subscribing?).to eq(true)
|
189
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
148
190
|
expect(test_instance.unsubscribed_to_email_at).to eq(Time.current)
|
149
191
|
Timecop.return
|
150
192
|
end
|
@@ -152,16 +194,139 @@ shared_examples_for :subscription_api do
|
|
152
194
|
|
153
195
|
context "with unsubscribed_to_email_at option" do
|
154
196
|
it "unsubscribe with specified time" do
|
155
|
-
expect(test_instance.subscribing).to eq(true)
|
156
|
-
expect(test_instance.subscribing_to_email).to eq(true)
|
197
|
+
expect(test_instance.subscribing?).to eq(true)
|
198
|
+
expect(test_instance.subscribing_to_email?).to eq(true)
|
157
199
|
unsubscribed_to_email_at = Time.current - 1.months
|
158
200
|
test_instance.unsubscribe_to_email(unsubscribed_to_email_at: unsubscribed_to_email_at)
|
159
|
-
expect(test_instance.subscribing).to eq(true)
|
160
|
-
expect(test_instance.subscribing_to_email).to eq(false)
|
201
|
+
expect(test_instance.subscribing?).to eq(true)
|
202
|
+
expect(test_instance.subscribing_to_email?).to eq(false)
|
161
203
|
expect(test_instance.unsubscribed_to_email_at).to eq(unsubscribed_to_email_at)
|
162
204
|
end
|
163
205
|
end
|
164
206
|
end
|
165
207
|
|
208
|
+
describe "#subscribing_to_optional_target?" do
|
209
|
+
before do
|
210
|
+
test_instance.update(optional_targets: {})
|
211
|
+
end
|
212
|
+
|
213
|
+
context "without configured optional target subscpriotion" do
|
214
|
+
context "without subscribe_as_default argument" do
|
215
|
+
context "with true as ActivityNotification.config.subscribe_as_default" do
|
216
|
+
it "returns true" do
|
217
|
+
subscribe_as_default = ActivityNotification.config.subscribe_as_default
|
218
|
+
ActivityNotification.config.subscribe_as_default = true
|
219
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_truthy
|
220
|
+
ActivityNotification.config.subscribe_as_default = subscribe_as_default
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
context "with false as ActivityNotification.config.subscribe_as_default" do
|
225
|
+
it "returns false" do
|
226
|
+
subscribe_as_default = ActivityNotification.config.subscribe_as_default
|
227
|
+
ActivityNotification.config.subscribe_as_default = false
|
228
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_falsey
|
229
|
+
ActivityNotification.config.subscribe_as_default = subscribe_as_default
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
context "with configured subscpriotion" do
|
236
|
+
context "subscribing to optional target" do
|
237
|
+
it "returns true" do
|
238
|
+
test_instance.subscribe_to_optional_target(:console_output)
|
239
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_truthy
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
context "unsubscribed to optional target" do
|
244
|
+
it "returns false" do
|
245
|
+
test_instance.unsubscribe_to_optional_target(:console_output)
|
246
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_falsey
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
describe "#subscribe_to_optional_target" do
|
253
|
+
before do
|
254
|
+
test_instance.unsubscribe_to_optional_target(:console_output)
|
255
|
+
end
|
256
|
+
|
257
|
+
context "for subscribing instance" do
|
258
|
+
it "returns true as successfully updated subscription instance" do
|
259
|
+
expect(test_instance.subscribing?).to eq(true)
|
260
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
261
|
+
expect(test_instance.subscribe_to_optional_target(:console_output)).to be_truthy
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
context "for not subscribing instance" do
|
266
|
+
it "returns false as failure to update subscription instance" do
|
267
|
+
test_instance.unsubscribe
|
268
|
+
expect(test_instance.subscribing?).to eq(false)
|
269
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
270
|
+
expect(test_instance.subscribe_to_optional_target(:console_output)).to be_falsey
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
context "as default" do
|
275
|
+
it "subscribe_to_optional_target with current time" do
|
276
|
+
expect(test_instance.subscribing?).to eq(true)
|
277
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
278
|
+
Timecop.freeze(Time.current)
|
279
|
+
test_instance.subscribe_to_optional_target(:console_output)
|
280
|
+
expect(test_instance.subscribing?).to eq(true)
|
281
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
|
282
|
+
expect(test_instance.optional_targets[:subscribed_to_console_output_at]).to eq(Time.current)
|
283
|
+
Timecop.return
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
context "with subscribed_at option" do
|
288
|
+
it "subscribe with specified time" do
|
289
|
+
expect(test_instance.subscribing?).to eq(true)
|
290
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
291
|
+
subscribed_at = Time.current - 1.months
|
292
|
+
test_instance.subscribe_to_optional_target(:console_output, subscribed_at: subscribed_at)
|
293
|
+
expect(test_instance.subscribing?).to eq(true)
|
294
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
|
295
|
+
expect(test_instance.optional_targets[:subscribed_to_console_output_at]).to eq(subscribed_at)
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
describe "#unsubscribe_to_optional_target" do
|
301
|
+
it "returns if successfully updated subscription instance" do
|
302
|
+
expect(test_instance.unsubscribe_to_optional_target(:console_output)).to be_truthy
|
303
|
+
end
|
304
|
+
|
305
|
+
context "as default" do
|
306
|
+
it "unsubscribe_to_optional_target with current time" do
|
307
|
+
expect(test_instance.subscribing?).to eq(true)
|
308
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
|
309
|
+
Timecop.freeze(Time.current)
|
310
|
+
test_instance.unsubscribe_to_optional_target(:console_output)
|
311
|
+
expect(test_instance.subscribing?).to eq(true)
|
312
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
313
|
+
expect(test_instance.optional_targets[:unsubscribed_to_console_output_at]).to eq(Time.current)
|
314
|
+
Timecop.return
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
context "with unsubscribed_at option" do
|
319
|
+
it "unsubscribe with specified time" do
|
320
|
+
expect(test_instance.subscribing?).to eq(true)
|
321
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
|
322
|
+
unsubscribed_at = Time.current - 1.months
|
323
|
+
test_instance.unsubscribe_to_optional_target(:console_output, unsubscribed_at: unsubscribed_at)
|
324
|
+
expect(test_instance.subscribing?).to eq(true)
|
325
|
+
expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
|
326
|
+
expect(test_instance.optional_targets[:unsubscribed_to_console_output_at]).to eq(unsubscribed_at)
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
166
331
|
end
|
167
332
|
end
|