activity_notification 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +11 -1
  3. data/README.md +63 -28
  4. data/activity_notification.gemspec +4 -2
  5. data/app/controllers/activity_notification/notifications_controller.rb +1 -1
  6. data/app/controllers/activity_notification/notifications_with_devise_controller.rb +10 -10
  7. data/app/views/activity_notification/notifications/default/_index.html.erb +9 -4
  8. data/lib/activity_notification.rb +7 -6
  9. data/lib/activity_notification/apis/notification_api.rb +14 -15
  10. data/lib/activity_notification/common.rb +15 -7
  11. data/lib/activity_notification/config.rb +2 -0
  12. data/lib/activity_notification/helpers/view_helpers.rb +5 -4
  13. data/lib/activity_notification/mailers/helpers.rb +9 -9
  14. data/lib/activity_notification/models.rb +16 -0
  15. data/lib/activity_notification/models/{notifiable.rb → concerns/notifiable.rb} +15 -10
  16. data/lib/activity_notification/models/{notifier.rb → concerns/notifier.rb} +6 -0
  17. data/lib/activity_notification/models/{target.rb → concerns/target.rb} +34 -17
  18. data/lib/activity_notification/renderable.rb +2 -1
  19. data/lib/activity_notification/roles/acts_as_notifiable.rb +38 -23
  20. data/lib/activity_notification/roles/acts_as_notifier.rb +11 -0
  21. data/lib/activity_notification/roles/acts_as_target.rb +9 -18
  22. data/lib/activity_notification/version.rb +1 -1
  23. data/lib/generators/activity_notification/{migration → active_record}/migration_generator.rb +5 -4
  24. data/lib/generators/activity_notification/controllers_generator.rb +1 -1
  25. data/lib/generators/activity_notification/install_generator.rb +3 -6
  26. data/lib/generators/activity_notification/{notification → models}/notification_generator.rb +5 -4
  27. data/lib/generators/activity_notification/views_generator.rb +20 -22
  28. data/lib/generators/templates/active_record/migration.rb +1 -1
  29. data/lib/generators/templates/activity_notification.rb +13 -3
  30. data/{config → lib/generators/templates}/locales/en.yml +0 -0
  31. data/lib/generators/templates/notification/notification.rb +4 -1
  32. data/spec/concerns/{notification_api_spec.rb → apis/notification_api_spec.rb} +169 -45
  33. data/spec/concerns/common_spec.rb +150 -0
  34. data/spec/concerns/models/notifiable_spec.rb +435 -0
  35. data/spec/concerns/models/notifier_spec.rb +23 -0
  36. data/spec/concerns/models/target_spec.rb +579 -0
  37. data/spec/concerns/renderable_spec.rb +110 -0
  38. data/spec/controllers/notifications_controller_shared_examples.rb +457 -0
  39. data/spec/controllers/notifications_controller_spec.rb +12 -0
  40. data/spec/controllers/notifications_with_devise_controller_spec.rb +81 -0
  41. data/spec/factories/admins.rb +5 -0
  42. data/spec/factories/articles.rb +1 -1
  43. data/spec/factories/comments.rb +1 -1
  44. data/spec/factories/dummy/dummy_notifiable.rb +4 -0
  45. data/spec/factories/dummy/dummy_notifier.rb +4 -0
  46. data/spec/factories/dummy/dummy_target.rb +4 -0
  47. data/spec/factories/notifications.rb +1 -1
  48. data/spec/factories/users.rb +7 -1
  49. data/spec/generators/active_record/migration_generator_spec.rb +41 -0
  50. data/spec/generators/controllers_generator_spec.rb +62 -0
  51. data/spec/generators/install_generator_spec.rb +43 -0
  52. data/spec/generators/models/notification_generator_spec.rb +41 -0
  53. data/spec/generators/views_generator_spec.rb +111 -0
  54. data/spec/helpers/polymorphic_helpers_spec.rb +89 -0
  55. data/spec/helpers/view_helpers_spec.rb +258 -0
  56. data/spec/mailers/mailer_spec.rb +98 -0
  57. data/spec/models/dummy/dummy_notifiable_spec.rb +6 -0
  58. data/spec/models/dummy/dummy_notifier_spec.rb +6 -0
  59. data/spec/models/dummy/dummy_target_spec.rb +6 -0
  60. data/spec/models/notification_spec.rb +5 -4
  61. data/spec/rails_app/app/assets/javascripts/application.js +2 -0
  62. data/spec/rails_app/app/controllers/articles_controller.rb +62 -0
  63. data/spec/rails_app/app/controllers/comments_controller.rb +34 -0
  64. data/spec/rails_app/app/models/admin.rb +8 -0
  65. data/spec/rails_app/app/models/article.rb +6 -6
  66. data/spec/rails_app/app/models/comment.rb +2 -2
  67. data/spec/rails_app/app/models/dummy/dummy_base.rb +2 -0
  68. data/spec/rails_app/app/models/dummy/dummy_notifiable.rb +4 -0
  69. data/spec/rails_app/app/models/dummy/dummy_notifier.rb +4 -0
  70. data/spec/rails_app/app/models/dummy/dummy_target.rb +4 -0
  71. data/spec/rails_app/app/models/user.rb +5 -5
  72. data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_path_test.html.erb +1 -0
  73. data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_test.html.erb +1 -0
  74. data/spec/rails_app/app/views/activity_notification/notifications/users/_custom_index.html.erb +1 -0
  75. data/spec/rails_app/app/views/activity_notification/notifications/users/custom/_test.html.erb +1 -0
  76. data/spec/rails_app/app/views/articles/_form.html.erb +20 -0
  77. data/spec/rails_app/app/views/articles/edit.html.erb +6 -0
  78. data/spec/rails_app/app/views/articles/index.html.erb +67 -0
  79. data/spec/rails_app/app/views/articles/new.html.erb +5 -0
  80. data/spec/rails_app/app/views/articles/show.html.erb +38 -0
  81. data/spec/rails_app/app/views/layouts/_header.html.erb +8 -0
  82. data/spec/rails_app/app/views/layouts/application.html.erb +3 -4
  83. data/spec/rails_app/config/initializers/activity_notification.rb +13 -3
  84. data/spec/rails_app/config/initializers/devise.rb +274 -274
  85. data/spec/rails_app/config/locales/activity_notification.en.yml +20 -0
  86. data/spec/rails_app/config/locales/devise.en.yml +62 -0
  87. data/spec/rails_app/config/routes.rb +6 -2
  88. data/spec/rails_app/db/migrate/20160715050433_create_test_tables.rb +6 -2
  89. data/spec/rails_app/db/schema.rb +8 -0
  90. data/spec/rails_app/db/seeds.rb +43 -0
  91. data/spec/roles/acts_as_notifiable_spec.rb +32 -0
  92. data/spec/roles/acts_as_notifier_spec.rb +17 -0
  93. data/spec/roles/acts_as_target_spec.rb +40 -0
  94. data/spec/spec_helper.rb +18 -14
  95. metadata +136 -12
@@ -0,0 +1,150 @@
1
+ shared_examples_for :common do
2
+ let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
3
+ let(:test_instance) { create(test_class_name) }
4
+
5
+ describe "as public ActivityNotification methods with described class" do
6
+ describe "#resolve_value" do
7
+ before do
8
+ allow(ActivityNotification).to receive(:get_controller).and_return('StubController')
9
+ end
10
+
11
+ context "with value" do
12
+ it "returns specified value" do
13
+ expect(ActivityNotification.resolve_value(test_instance, 1)).to eq(1)
14
+ end
15
+ end
16
+
17
+ context "with Symbol" do
18
+ it "returns specified symbol without arguments" do
19
+ module AdditionalMethods
20
+ def custom_method
21
+ 1
22
+ end
23
+ end
24
+ test_instance.extend(AdditionalMethods)
25
+ expect(ActivityNotification.resolve_value(test_instance, :custom_method)).to eq(1)
26
+ end
27
+
28
+ it "returns specified symbol with controller arguments" do
29
+ module AdditionalMethods
30
+ def custom_method(controller)
31
+ controller == 'StubController' ? 1 : 0
32
+ end
33
+ end
34
+ test_instance.extend(AdditionalMethods)
35
+ expect(ActivityNotification.resolve_value(test_instance, :custom_method)).to eq(1)
36
+ end
37
+
38
+ it "returns specified symbol with controller and additional arguments" do
39
+ module AdditionalMethods
40
+ def custom_method(controller, key)
41
+ controller == 'StubController' and key == 'test1.key' ? 1 : 0
42
+ end
43
+ end
44
+ test_instance.extend(AdditionalMethods)
45
+ expect(ActivityNotification.resolve_value(test_instance, :custom_method, 'test1.key')).to eq(1)
46
+ expect(ActivityNotification.resolve_value(test_instance, :custom_method, 'test2.key')).to eq(0)
47
+ end
48
+ end
49
+
50
+ context "with Proc" do
51
+ it "returns specified lambda with context(model) arguments" do
52
+ test_proc = ->(model){ model == test_instance ? 1 : 0 }
53
+ expect(ActivityNotification.resolve_value(test_instance, test_proc)).to eq(1)
54
+ end
55
+
56
+ it "returns specified lambda with controller and context(model) arguments" do
57
+ test_proc = ->(controller, model){ controller == 'StubController' and model == test_instance ? 1 : 0 }
58
+ expect(ActivityNotification.resolve_value(test_instance, test_proc)).to eq(1)
59
+ end
60
+
61
+ it "returns specified lambda with controller, context(model) and additional arguments" do
62
+ test_proc = ->(controller, model, key){ controller == 'StubController' and model == test_instance and key == 'test1.key' ? 1 : 0 }
63
+ expect(ActivityNotification.resolve_value(test_instance, test_proc, 'test1.key')).to eq(1)
64
+ expect(ActivityNotification.resolve_value(test_instance, test_proc, 'test2.key')).to eq(0)
65
+ end
66
+ end
67
+
68
+ context "with Hash" do
69
+ it "returns resolve_value for each entry of hash" do
70
+ module AdditionalMethods
71
+ def custom_method(controller)
72
+ controller == 'StubController' ? 2 : 0
73
+ end
74
+ end
75
+ test_instance.extend(AdditionalMethods)
76
+ test_hash = {
77
+ key1: 1,
78
+ key2: :custom_method,
79
+ key3: ->(controller, model){ 3 }
80
+ }
81
+ expect(ActivityNotification.resolve_value(test_instance, test_hash)).to eq({ key1: 1, key2: 2, key3: 3 })
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ describe "as public instance methods" do
88
+ describe "#resolve_value" do
89
+ context "with value" do
90
+ it "returns specified value" do
91
+ expect(test_instance.resolve_value(1)).to eq(1)
92
+ end
93
+ end
94
+
95
+ context "with Symbol" do
96
+ it "returns specified symbol without arguments" do
97
+ module AdditionalMethods
98
+ def custom_method
99
+ 1
100
+ end
101
+ end
102
+ test_instance.extend(AdditionalMethods)
103
+ expect(test_instance.resolve_value(:custom_method)).to eq(1)
104
+ end
105
+
106
+ it "returns specified symbol with additional arguments" do
107
+ module AdditionalMethods
108
+ def custom_method(key)
109
+ key == 'test1.key' ? 1 : 0
110
+ end
111
+ end
112
+ test_instance.extend(AdditionalMethods)
113
+ expect(test_instance.resolve_value(:custom_method, 'test1.key')).to eq(1)
114
+ expect(test_instance.resolve_value(:custom_method, 'test2.key')).to eq(0)
115
+ end
116
+ end
117
+
118
+ context "with Proc" do
119
+ it "returns specified lambda with context(model) argument" do
120
+ test_proc = ->(model){ model == test_instance ? 1 : 0 }
121
+ expect(test_instance.resolve_value(test_proc)).to eq(1)
122
+ end
123
+
124
+ it "returns specified lambda with context(model) and additional arguments" do
125
+ test_proc = ->(model, key){ model == test_instance and key == 'test1.key' ? 1 : 0 }
126
+ expect(test_instance.resolve_value(test_proc, 'test1.key')).to eq(1)
127
+ expect(test_instance.resolve_value(test_proc, 'test2.key')).to eq(0)
128
+ end
129
+ end
130
+
131
+ context "with Hash" do
132
+ it "returns resolve_value for each entry of hash" do
133
+ module AdditionalMethods
134
+ def custom_method
135
+ 2
136
+ end
137
+ end
138
+ test_instance.extend(AdditionalMethods)
139
+ test_hash = {
140
+ key1: 1,
141
+ key2: :custom_method,
142
+ key3: ->(model){ model == test_instance ? 3 : 0 }
143
+ }
144
+ expect(test_instance.resolve_value(test_hash)).to eq({ key1: 1, key2: 2, key3: 3 })
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ end
@@ -0,0 +1,435 @@
1
+ shared_examples_for :notifiable do
2
+ let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
3
+ let(:test_instance) { create(test_class_name) }
4
+ let(:test_target) { create(:user) }
5
+
6
+ include Rails.application.routes.url_helpers
7
+
8
+ describe "as public class methods" do
9
+ describe "#available_as_notifiable?" do
10
+ it "returns true" do
11
+ expect(described_class.available_as_notifiable?).to be_truthy
12
+ end
13
+ end
14
+
15
+ describe "#set_notifiable_class_defaults" do
16
+ it "set parameter fields as default" do
17
+ described_class.set_notifiable_class_defaults
18
+ expect(described_class._notification_targets).to eq({})
19
+ expect(described_class._notification_group).to eq({})
20
+ expect(described_class._notifier).to eq({})
21
+ expect(described_class._notification_parameters).to eq({})
22
+ expect(described_class._notification_email_allowed).to eq({})
23
+ expect(described_class._notifiable_path).to eq({})
24
+ end
25
+ end
26
+ end
27
+
28
+ describe "as public instance methods" do
29
+ before do
30
+ User.delete_all
31
+ described_class.set_notifiable_class_defaults
32
+ create(:user)
33
+ create(:user)
34
+ expect(User.all.count).to eq(2)
35
+ expect(User.all.first).to be_an_instance_of(User)
36
+ end
37
+
38
+ describe "#notification_targets" do
39
+ context "without any configuration" do
40
+ it "raises NotImplementedError" do
41
+ expect { test_instance.notification_targets(User, 'dummy_key') }
42
+ .to raise_error(NotImplementedError, /You have to implement .+ or set :targets in acts_as_notifiable/)
43
+ end
44
+ end
45
+
46
+ context "configured with overriden method" do
47
+ it "returns specified value" do
48
+ module AdditionalMethods
49
+ def notification_users(key)
50
+ User.all
51
+ end
52
+ end
53
+ test_instance.extend(AdditionalMethods)
54
+ expect(test_instance.notification_targets(User, 'dummy_key')).to eq(User.all)
55
+ end
56
+ end
57
+
58
+ context "configured with a field" do
59
+ it "returns specified value" do
60
+ described_class._notification_targets[:users] = User.all
61
+ expect(test_instance.notification_targets(User, 'dummy_key')).to eq(User.all)
62
+ end
63
+
64
+ it "returns specified symbol without argumentss" do
65
+ module AdditionalMethods
66
+ def custom_notification_users
67
+ User.all
68
+ end
69
+ end
70
+ test_instance.extend(AdditionalMethods)
71
+ described_class._notification_targets[:users] = :custom_notification_users
72
+ expect(test_instance.notification_targets(User, 'dummy_key')).to eq(User.all)
73
+ end
74
+
75
+ it "returns specified symbol with key argument" do
76
+ module AdditionalMethods
77
+ def custom_notification_users(key)
78
+ User.all
79
+ end
80
+ end
81
+ test_instance.extend(AdditionalMethods)
82
+ described_class._notification_targets[:users] = :custom_notification_users
83
+ expect(test_instance.notification_targets(User, 'dummy_key')).to eq(User.all)
84
+ end
85
+
86
+ it "returns specified lambda with single notifiable argument" do
87
+ described_class._notification_targets[:users] = ->(notifiable){ User.all }
88
+ expect(test_instance.notification_targets(User, 'dummy_key')).to eq(User.all)
89
+ end
90
+
91
+ it "returns specified lambda with notifiable and key arguments" do
92
+ described_class._notification_targets[:users] = ->(notifiable, key){ User.all }
93
+ expect(test_instance.notification_targets(User, 'dummy_key')).to eq(User.all)
94
+ end
95
+ end
96
+ end
97
+
98
+ describe "#notification_group" do
99
+ context "without any configuration" do
100
+ it "returns nil" do
101
+ expect(test_instance.notification_group(User, 'dummy_key')).to be_nil
102
+ end
103
+ end
104
+
105
+ context "configured with overriden method" do
106
+ it "returns specified value" do
107
+ module AdditionalMethods
108
+ def notification_group_for_users(key)
109
+ User.all.first
110
+ end
111
+ end
112
+ test_instance.extend(AdditionalMethods)
113
+ expect(test_instance.notification_group(User, 'dummy_key')).to eq(User.all.first)
114
+ end
115
+ end
116
+
117
+ context "configured with a field" do
118
+ it "returns specified value" do
119
+ described_class._notification_group[:users] = User.all.first
120
+ expect(test_instance.notification_group(User, 'dummy_key')).to eq(User.all.first)
121
+ end
122
+
123
+ it "returns specified symbol without argumentss" do
124
+ module AdditionalMethods
125
+ def custom_notification_group
126
+ User.all.first
127
+ end
128
+ end
129
+ test_instance.extend(AdditionalMethods)
130
+ described_class._notification_group[:users] = :custom_notification_group
131
+ expect(test_instance.notification_group(User, 'dummy_key')).to eq(User.all.first)
132
+ end
133
+
134
+ it "returns specified symbol with key argument" do
135
+ module AdditionalMethods
136
+ def custom_notification_group(key)
137
+ User.all.first
138
+ end
139
+ end
140
+ test_instance.extend(AdditionalMethods)
141
+ described_class._notification_group[:users] = :custom_notification_group
142
+ expect(test_instance.notification_group(User, 'dummy_key')).to eq(User.all.first)
143
+ end
144
+
145
+ it "returns specified lambda with single notifiable argument" do
146
+ described_class._notification_group[:users] = ->(notifiable){ User.all.first }
147
+ expect(test_instance.notification_group(User, 'dummy_key')).to eq(User.all.first)
148
+ end
149
+
150
+ it "returns specified lambda with notifiable and key arguments" do
151
+ described_class._notification_group[:users] = ->(notifiable, key){ User.all.first }
152
+ expect(test_instance.notification_group(User, 'dummy_key')).to eq(User.all.first)
153
+ end
154
+ end
155
+ end
156
+
157
+ describe "#notification_parameters" do
158
+ context "without any configuration" do
159
+ it "returns blank hash" do
160
+ expect(test_instance.notification_parameters(User, 'dummy_key')).to eq({})
161
+ end
162
+ end
163
+
164
+ context "configured with overriden method" do
165
+ it "returns specified value" do
166
+ module AdditionalMethods
167
+ def notification_parameters_for_users(key)
168
+ { hoge: 'fuga', foo: 'bar' }
169
+ end
170
+ end
171
+ test_instance.extend(AdditionalMethods)
172
+ expect(test_instance.notification_parameters(User, 'dummy_key')).to eq({ hoge: 'fuga', foo: 'bar' })
173
+ end
174
+ end
175
+
176
+ context "configured with a field" do
177
+ it "returns specified value" do
178
+ described_class._notification_parameters[:users] = { hoge: 'fuga', foo: 'bar' }
179
+ expect(test_instance.notification_parameters(User, 'dummy_key')).to eq({ hoge: 'fuga', foo: 'bar' })
180
+ end
181
+
182
+ it "returns specified symbol without arguments" do
183
+ module AdditionalMethods
184
+ def custom_notification_parameters
185
+ { hoge: 'fuga', foo: 'bar' }
186
+ end
187
+ end
188
+ test_instance.extend(AdditionalMethods)
189
+ described_class._notification_parameters[:users] = :custom_notification_parameters
190
+ expect(test_instance.notification_parameters(User, 'dummy_key')).to eq({ hoge: 'fuga', foo: 'bar' })
191
+ end
192
+
193
+ it "returns specified symbol with key argument" do
194
+ module AdditionalMethods
195
+ def custom_notification_parameters(key)
196
+ { hoge: 'fuga', foo: 'bar' }
197
+ end
198
+ end
199
+ test_instance.extend(AdditionalMethods)
200
+ described_class._notification_parameters[:users] = :custom_notification_parameters
201
+ expect(test_instance.notification_parameters(User, 'dummy_key')).to eq({ hoge: 'fuga', foo: 'bar' })
202
+ end
203
+
204
+ it "returns specified lambda with single notifiable argument" do
205
+ described_class._notification_parameters[:users] = ->(notifiable){ { hoge: 'fuga', foo: 'bar' } }
206
+ expect(test_instance.notification_parameters(User, 'dummy_key')).to eq({ hoge: 'fuga', foo: 'bar' })
207
+ end
208
+
209
+ it "returns specified lambda with notifiable and key arguments" do
210
+ described_class._notification_parameters[:users] = ->(notifiable, key){ { hoge: 'fuga', foo: 'bar' } }
211
+ expect(test_instance.notification_parameters(User, 'dummy_key')).to eq({ hoge: 'fuga', foo: 'bar' })
212
+ end
213
+ end
214
+ end
215
+
216
+ describe "#notifier" do
217
+ context "without any configuration" do
218
+ it "returns nil" do
219
+ expect(test_instance.notifier(User, 'dummy_key')).to be_nil
220
+ end
221
+ end
222
+
223
+ context "configured with overriden method" do
224
+ it "returns specified value" do
225
+ module AdditionalMethods
226
+ def notifier_for_users(key)
227
+ User.all.first
228
+ end
229
+ end
230
+ test_instance.extend(AdditionalMethods)
231
+ expect(test_instance.notifier(User, 'dummy_key')).to eq(User.all.first)
232
+ end
233
+ end
234
+
235
+ context "configured with a field" do
236
+ it "returns specified value" do
237
+ described_class._notifier[:users] = User.all.first
238
+ expect(test_instance.notifier(User, 'dummy_key')).to eq(User.all.first)
239
+ end
240
+
241
+ it "returns specified symbol without arguments" do
242
+ module AdditionalMethods
243
+ def custom_notifier
244
+ User.all.first
245
+ end
246
+ end
247
+ test_instance.extend(AdditionalMethods)
248
+ described_class._notifier[:users] = :custom_notifier
249
+ expect(test_instance.notifier(User, 'dummy_key')).to eq(User.all.first)
250
+ end
251
+
252
+ it "returns specified symbol with key argument" do
253
+ module AdditionalMethods
254
+ def custom_notifier(key)
255
+ User.all.first
256
+ end
257
+ end
258
+ test_instance.extend(AdditionalMethods)
259
+ described_class._notifier[:users] = :custom_notifier
260
+ expect(test_instance.notifier(User, 'dummy_key')).to eq(User.all.first)
261
+ end
262
+
263
+ it "returns specified lambda with single notifiable argument" do
264
+ described_class._notifier[:users] = ->(notifiable){ User.all.first }
265
+ expect(test_instance.notifier(User, 'dummy_key')).to eq(User.all.first)
266
+ end
267
+
268
+ it "returns specified lambda with notifiable and key arguments" do
269
+ described_class._notifier[:users] = ->(notifiable, key){ User.all.first }
270
+ expect(test_instance.notifier(User, 'dummy_key')).to eq(User.all.first)
271
+ end
272
+ end
273
+ end
274
+
275
+ describe "#notification_email_allowed?" do
276
+ context "without any configuration" do
277
+ it "returns ActivityNotification.config.email_enabled" do
278
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key'))
279
+ .to eq(ActivityNotification.config.email_enabled)
280
+ end
281
+
282
+ it "returns false as default" do
283
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key')).to be_falsey
284
+ end
285
+ end
286
+
287
+ context "configured with overriden method" do
288
+ it "returns specified value" do
289
+ module AdditionalMethods
290
+ def notification_email_allowed_for_users?(target, key)
291
+ true
292
+ end
293
+ end
294
+ test_instance.extend(AdditionalMethods)
295
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key')).to eq(true)
296
+ end
297
+ end
298
+
299
+ context "configured with a field" do
300
+ it "returns specified value" do
301
+ described_class._notification_email_allowed[:users] = true
302
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key')).to eq(true)
303
+ end
304
+
305
+ it "returns specified symbol without arguments" do
306
+ module AdditionalMethods
307
+ def custom_notification_email_allowed?
308
+ true
309
+ end
310
+ end
311
+ test_instance.extend(AdditionalMethods)
312
+ described_class._notification_email_allowed[:users] = :custom_notification_email_allowed?
313
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key')).to eq(true)
314
+ end
315
+
316
+ it "returns specified symbol with target and key arguments" do
317
+ module AdditionalMethods
318
+ def custom_notification_email_allowed?(target, key)
319
+ true
320
+ end
321
+ end
322
+ test_instance.extend(AdditionalMethods)
323
+ described_class._notification_email_allowed[:users] = :custom_notification_email_allowed?
324
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key')).to eq(true)
325
+ end
326
+
327
+ it "returns specified lambda with single notifiable argument" do
328
+ described_class._notification_email_allowed[:users] = ->(notifiable){ true }
329
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key')).to eq(true)
330
+ end
331
+
332
+ it "returns specified lambda with notifiable, target and key arguments" do
333
+ described_class._notification_email_allowed[:users] = ->(notifiable, target, key){ true }
334
+ expect(test_instance.notification_email_allowed?(test_target, 'dummy_key')).to eq(true)
335
+ end
336
+ end
337
+ end
338
+
339
+ describe "#notifiable_path" do
340
+ context "without any configuration" do
341
+ it "raises NotImplementedError" do
342
+ expect { test_instance.notifiable_path(User, 'dummy_key') }
343
+ .to raise_error(NotImplementedError, /You have to implement .+, set :notifiable_path in acts_as_notifiable or set polymorphic_path routing for/)
344
+ end
345
+ end
346
+
347
+ context "configured with polymorphic_path" do
348
+ it "returns polymorphic_path" do
349
+ article = create(:article)
350
+ expect(article.notifiable_path(User, 'dummy_key')).to eq(article_path(article))
351
+ end
352
+ end
353
+
354
+ context "configured with overriden method" do
355
+ it "returns specified value" do
356
+ module AdditionalMethods
357
+ def notifiable_path_for_users(key)
358
+ article_path(1)
359
+ end
360
+ end
361
+ test_instance.extend(AdditionalMethods)
362
+ expect(test_instance.notifiable_path(User, 'dummy_key')).to eq(article_path(1))
363
+ end
364
+ end
365
+
366
+ context "configured with a field" do
367
+ it "returns specified value" do
368
+ described_class._notifiable_path[:users] = article_path(1)
369
+ expect(test_instance.notifiable_path(User, 'dummy_key')).to eq(article_path(1))
370
+ end
371
+
372
+ it "returns specified symbol without arguments" do
373
+ module AdditionalMethods
374
+ def custom_notifiable_path
375
+ article_path(1)
376
+ end
377
+ end
378
+ test_instance.extend(AdditionalMethods)
379
+ described_class._notifiable_path[:users] = :custom_notifiable_path
380
+ expect(test_instance.notifiable_path(User, 'dummy_key')).to eq(article_path(1))
381
+ end
382
+
383
+ it "returns specified symbol with key argument" do
384
+ module AdditionalMethods
385
+ def custom_notifiable_path(key)
386
+ article_path(1)
387
+ end
388
+ end
389
+ test_instance.extend(AdditionalMethods)
390
+ described_class._notifiable_path[:users] = :custom_notifiable_path
391
+ expect(test_instance.notifiable_path(User, 'dummy_key')).to eq(article_path(1))
392
+ end
393
+
394
+ it "returns specified lambda with single notifiable argument" do
395
+ described_class._notifiable_path[:users] = ->(notifiable){ article_path(1) }
396
+ expect(test_instance.notifiable_path(User, 'dummy_key')).to eq(article_path(1))
397
+ end
398
+
399
+ it "returns specified lambda with notifiable and key arguments" do
400
+ described_class._notifiable_path[:users] = ->(notifiable, key){ article_path(1) }
401
+ expect(test_instance.notifiable_path(User, 'dummy_key')).to eq(article_path(1))
402
+ end
403
+ end
404
+ end
405
+
406
+ describe "#notify" do
407
+ it "is an alias of ActivityNotification::Notification.notify" do
408
+ expect(ActivityNotification::Notification).to receive(:notify)
409
+ test_instance.notify :users
410
+ end
411
+ end
412
+
413
+ describe "#notify_to" do
414
+ it "is an alias of ActivityNotification::Notification.notify_to" do
415
+ expect(ActivityNotification::Notification).to receive(:notify_to)
416
+ test_instance.notify_to create(:user)
417
+ end
418
+ end
419
+
420
+ describe "#notify_all" do
421
+ it "is an alias of ActivityNotification::Notification.notify_all" do
422
+ expect(ActivityNotification::Notification).to receive(:notify_all)
423
+ test_instance.notify_all [create(:user)]
424
+ end
425
+ end
426
+
427
+ describe "#default_notification_key" do
428
+ it "returns '#to_resource_name.default'" do
429
+ expect(test_instance.default_notification_key).to eq("#{test_instance.to_resource_name}.default")
430
+ end
431
+ end
432
+
433
+ end
434
+
435
+ end