activity_notification 1.1.0 → 1.2.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/.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
|