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
@@ -0,0 +1,735 @@
|
|
1
|
+
shared_examples_for :subscription_controller do
|
2
|
+
let(:target_params) { { target_type: target_type }.merge(extra_params || {}) }
|
3
|
+
|
4
|
+
describe "GET #index" do
|
5
|
+
context "with target_type and target_id parameters" do
|
6
|
+
before do
|
7
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
8
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
9
|
+
get_with_compatibility :index, target_params.merge({ target_id: test_target, typed_target_param => 'dummy' }), valid_session
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns 200 as http status code" do
|
13
|
+
expect(response.status).to eq(200)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "assigns configured subscription index as @subscriptions" do
|
17
|
+
expect(assigns(:subscriptions)).to eq([@subscription])
|
18
|
+
end
|
19
|
+
|
20
|
+
it "assigns unconfigured notification keys as @notification_keys" do
|
21
|
+
expect(assigns(:notification_keys)).to eq([@notification.key])
|
22
|
+
end
|
23
|
+
|
24
|
+
it "renders the :index template" do
|
25
|
+
expect(response).to render_template :index
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "with target_type and (typed_target)_id parameters" do
|
30
|
+
before do
|
31
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
32
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
33
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target }), valid_session
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns 200 as http status code" do
|
37
|
+
expect(response.status).to eq(200)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "assigns subscription index as @subscriptions" do
|
41
|
+
expect(assigns(:subscriptions)).to eq([@subscription])
|
42
|
+
end
|
43
|
+
|
44
|
+
it "assigns unconfigured notification keys as @notification_keys" do
|
45
|
+
expect(assigns(:notification_keys)).to eq([@notification.key])
|
46
|
+
end
|
47
|
+
|
48
|
+
it "renders the :index template" do
|
49
|
+
expect(response).to render_template :index
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "without target_type parameters" do
|
54
|
+
before do
|
55
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
56
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
57
|
+
get_with_compatibility :index, { typed_target_param => test_target }, valid_session
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns 400 as http status code" do
|
61
|
+
expect(response.status).to eq(400)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "with not found (typed_target)_id parameter" do
|
66
|
+
before do
|
67
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
68
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "raises ActiveRecord::RecordNotFound" do
|
72
|
+
expect {
|
73
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => 0 }), valid_session
|
74
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "with json as format parameter" do
|
79
|
+
before do
|
80
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
81
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
82
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, format: :json }), valid_session
|
83
|
+
end
|
84
|
+
|
85
|
+
it "returns 200 as http status code" do
|
86
|
+
expect(response.status).to eq(200)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "returns json format" do
|
90
|
+
expect(JSON.parse(response.body)["subscriptions"].first)
|
91
|
+
.to include("target_id" => test_target.id, "target_type" => test_target.to_class_name)
|
92
|
+
expect(JSON.parse(response.body)["unconfigured_notification_keys"].first)
|
93
|
+
.to eq('test_notification_key')
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context "with filter parameter" do
|
98
|
+
context "with configured as filter" do
|
99
|
+
before do
|
100
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
101
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
102
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, filter: 'configured' }), valid_session
|
103
|
+
end
|
104
|
+
|
105
|
+
it "assigns configured subscription index as @subscriptions" do
|
106
|
+
expect(assigns(:subscriptions)).to eq([@subscription])
|
107
|
+
end
|
108
|
+
|
109
|
+
it "does not assign unconfigured notification keys as @notification_keys" do
|
110
|
+
expect(assigns(:notification_keys)).to be_nil
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "with unconfigured as filter" do
|
115
|
+
before do
|
116
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
117
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
118
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, filter: 'unconfigured' }), valid_session
|
119
|
+
end
|
120
|
+
|
121
|
+
it "does not assign configured subscription index as @subscriptions" do
|
122
|
+
expect(assigns(:subscriptions)).to be_nil
|
123
|
+
end
|
124
|
+
|
125
|
+
it "assigns unconfigured notification keys as @notification_keys" do
|
126
|
+
expect(assigns(:notification_keys)).to eq([@notification.key])
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context "with limit parameter" do
|
132
|
+
before do
|
133
|
+
create(:subscription, target: test_target, key: 'test_subscription_key_1')
|
134
|
+
create(:subscription, target: test_target, key: 'test_subscription_key_2')
|
135
|
+
create(:notification, target: test_target, key: 'test_notification_key_1')
|
136
|
+
create(:notification, target: test_target, key: 'test_notification_key_2')
|
137
|
+
end
|
138
|
+
context "with 2 as limit" do
|
139
|
+
before do
|
140
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, limit: 2 }), valid_session
|
141
|
+
end
|
142
|
+
|
143
|
+
it "assigns subscription index of size 2 as @subscriptions" do
|
144
|
+
expect(assigns(:subscriptions).size).to eq(2)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "assigns notification key index of size 2 as @notification_keys" do
|
148
|
+
expect(assigns(:notification_keys).size).to eq(2)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context "with 1 as limit" do
|
153
|
+
before do
|
154
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, limit: 1 }), valid_session
|
155
|
+
end
|
156
|
+
|
157
|
+
it "assigns subscription index of size 1 as @subscriptions" do
|
158
|
+
expect(assigns(:subscriptions).size).to eq(1)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "assigns notification key index of size 1 as @notification_keys" do
|
162
|
+
expect(assigns(:notification_keys).size).to eq(1)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context "with reload parameter" do
|
168
|
+
context "with false as reload" do
|
169
|
+
before do
|
170
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
171
|
+
@notification = create(:notification, target: test_target, key: 'test_notification_key')
|
172
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, reload: false }), valid_session
|
173
|
+
end
|
174
|
+
|
175
|
+
it "returns 200 as http status code" do
|
176
|
+
expect(response.status).to eq(200)
|
177
|
+
end
|
178
|
+
|
179
|
+
it "does not assign subscription index as @subscriptions" do
|
180
|
+
expect(assigns(:subscriptions)).to be_nil
|
181
|
+
end
|
182
|
+
|
183
|
+
it "does not assign unconfigured notification keys as @notification_keys" do
|
184
|
+
expect(assigns(:notification_keys)).to be_nil
|
185
|
+
end
|
186
|
+
|
187
|
+
it "renders the :index template" do
|
188
|
+
expect(response).to render_template :index
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context "with options filter parameters" do
|
194
|
+
before do
|
195
|
+
@subscription1 = create(:subscription, target: test_target, key: 'test_subscription_key_1')
|
196
|
+
@subscription2 = create(:subscription, target: test_target, key: 'test_subscription_key_2')
|
197
|
+
@notification1 = create(:notification, target: test_target, key: 'test_notification_key_1')
|
198
|
+
@notification2 = create(:notification, target: test_target, key: 'test_notification_key_2')
|
199
|
+
end
|
200
|
+
|
201
|
+
context 'with filtered_by_key parameter' do
|
202
|
+
it "returns filtered subscriptions only" do
|
203
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, filtered_by_key: 'test_subscription_key_2' }), valid_session
|
204
|
+
expect(assigns(:subscriptions)[0]).to eq(@subscription2)
|
205
|
+
expect(assigns(:subscriptions).size).to eq(1)
|
206
|
+
end
|
207
|
+
|
208
|
+
it "returns filtered notification keys only" do
|
209
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, filtered_by_key: 'test_notification_key_2' }), valid_session
|
210
|
+
expect(assigns(:notification_keys)[0]).to eq(@notification2.key)
|
211
|
+
expect(assigns(:notification_keys).size).to eq(1)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
describe "POST #create" do
|
218
|
+
before do
|
219
|
+
test_target.subscriptions.delete_all
|
220
|
+
expect(test_target.subscriptions.size).to eq(0)
|
221
|
+
end
|
222
|
+
|
223
|
+
context "http direct POST request" do
|
224
|
+
before do
|
225
|
+
post_with_compatibility :create, target_params.merge({
|
226
|
+
typed_target_param => test_target,
|
227
|
+
"subscription" => { "key" => "new_subscription_key",
|
228
|
+
"subscribing"=> "true",
|
229
|
+
"subscribing_to_email"=>"true"
|
230
|
+
}
|
231
|
+
}), valid_session
|
232
|
+
end
|
233
|
+
|
234
|
+
it "returns 302 as http status code" do
|
235
|
+
expect(response.status).to eq(302)
|
236
|
+
end
|
237
|
+
|
238
|
+
it "creates new subscription of the target" do
|
239
|
+
expect(test_target.subscriptions.reload.size).to eq(1)
|
240
|
+
expect(test_target.subscriptions.reload.first.key).to eq("new_subscription_key")
|
241
|
+
end
|
242
|
+
|
243
|
+
it "redirects to :index" do
|
244
|
+
expect(response).to redirect_to action: :index
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
context "http POST request from root_path" do
|
249
|
+
before do
|
250
|
+
request.env["HTTP_REFERER"] = root_path
|
251
|
+
post_with_compatibility :create, target_params.merge({
|
252
|
+
typed_target_param => test_target,
|
253
|
+
"subscription" => { "key" => "new_subscription_key",
|
254
|
+
"subscribing"=> "true",
|
255
|
+
"subscribing_to_email"=>"true"
|
256
|
+
}
|
257
|
+
}), valid_session
|
258
|
+
end
|
259
|
+
|
260
|
+
it "returns 302 as http status code" do
|
261
|
+
expect(response.status).to eq(302)
|
262
|
+
end
|
263
|
+
|
264
|
+
it "creates new subscription of the target" do
|
265
|
+
expect(test_target.subscriptions.reload.size).to eq(1)
|
266
|
+
expect(test_target.subscriptions.reload.first.key).to eq("new_subscription_key")
|
267
|
+
end
|
268
|
+
|
269
|
+
it "redirects to root_path as request.referer" do
|
270
|
+
expect(response).to redirect_to root_path
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
context "Ajax POST request" do
|
275
|
+
before do
|
276
|
+
request.env["HTTP_REFERER"] = root_path
|
277
|
+
xhr_with_compatibility :post, :create, target_params.merge({
|
278
|
+
typed_target_param => test_target,
|
279
|
+
"subscription" => { "key" => "new_subscription_key",
|
280
|
+
"subscribing"=> "true",
|
281
|
+
"subscribing_to_email"=>"true"
|
282
|
+
}
|
283
|
+
}), valid_session
|
284
|
+
end
|
285
|
+
|
286
|
+
it "returns 200 as http status code" do
|
287
|
+
expect(response.status).to eq(200)
|
288
|
+
end
|
289
|
+
|
290
|
+
it "assigns subscription index as @subscriptions" do
|
291
|
+
expect(assigns(:subscriptions)).to eq([test_target.subscriptions.reload.first])
|
292
|
+
end
|
293
|
+
|
294
|
+
it "creates new subscription of the target" do
|
295
|
+
expect(test_target.subscriptions.reload.size).to eq(1)
|
296
|
+
expect(test_target.subscriptions.reload.first.key).to eq("new_subscription_key")
|
297
|
+
end
|
298
|
+
|
299
|
+
it "renders the :create template as format js" do
|
300
|
+
expect(response).to render_template :create, format: :js
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
describe "GET #show" do
|
306
|
+
context "with id, target_type and (typed_target)_id parameters" do
|
307
|
+
before do
|
308
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
309
|
+
get_with_compatibility :show, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
310
|
+
end
|
311
|
+
|
312
|
+
it "returns 200 as http status code" do
|
313
|
+
expect(response.status).to eq(200)
|
314
|
+
end
|
315
|
+
|
316
|
+
it "assigns the requested subscription as @subscription" do
|
317
|
+
expect(assigns(:subscription)).to eq(@subscription)
|
318
|
+
end
|
319
|
+
|
320
|
+
it "renders the :index template" do
|
321
|
+
expect(response).to render_template :show
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
context "with wrong id and (typed_target)_id parameters" do
|
326
|
+
before do
|
327
|
+
@subscription = create(:subscription, target: create(:user))
|
328
|
+
get_with_compatibility :show, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
329
|
+
end
|
330
|
+
|
331
|
+
it "returns 403 as http status code" do
|
332
|
+
expect(response.status).to eq(403)
|
333
|
+
end
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
describe "DELETE #destroy" do
|
338
|
+
context "http direct DELETE request" do
|
339
|
+
before do
|
340
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
341
|
+
delete_with_compatibility :destroy, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
342
|
+
end
|
343
|
+
|
344
|
+
it "returns 302 as http status code" do
|
345
|
+
expect(response.status).to eq(302)
|
346
|
+
end
|
347
|
+
|
348
|
+
it "deletes the subscription" do
|
349
|
+
expect(assigns(test_target.subscriptions.where(id: @subscription.id).exists?)).to be_falsey
|
350
|
+
end
|
351
|
+
|
352
|
+
it "redirects to :index" do
|
353
|
+
expect(response).to redirect_to action: :index
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
context "http DELETE request from root_path" do
|
358
|
+
before do
|
359
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
360
|
+
request.env["HTTP_REFERER"] = root_path
|
361
|
+
delete_with_compatibility :destroy, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
362
|
+
end
|
363
|
+
|
364
|
+
it "returns 302 as http status code" do
|
365
|
+
expect(response.status).to eq(302)
|
366
|
+
end
|
367
|
+
|
368
|
+
it "deletes the subscription" do
|
369
|
+
expect(assigns(test_target.subscriptions.where(id: @subscription.id).exists?)).to be_falsey
|
370
|
+
end
|
371
|
+
|
372
|
+
it "redirects to root_path as request.referer" do
|
373
|
+
expect(response).to redirect_to root_path
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
context "Ajax DELETE request" do
|
378
|
+
before do
|
379
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
380
|
+
xhr_with_compatibility :delete, :destroy, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
381
|
+
end
|
382
|
+
|
383
|
+
it "returns 200 as http status code" do
|
384
|
+
expect(response.status).to eq(200)
|
385
|
+
end
|
386
|
+
|
387
|
+
it "assigns subscription index as @subscriptions" do
|
388
|
+
expect(assigns(:subscriptions)).to eq([])
|
389
|
+
end
|
390
|
+
|
391
|
+
it "deletes the subscription" do
|
392
|
+
expect(assigns(test_target.subscriptions.where(id: @subscription.id).exists?)).to be_falsey
|
393
|
+
end
|
394
|
+
|
395
|
+
it "renders the :destroy template as format js" do
|
396
|
+
expect(response).to render_template :destroy, format: :js
|
397
|
+
end
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
describe "POST #subscribe" do
|
402
|
+
context "http direct POST request" do
|
403
|
+
before do
|
404
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
405
|
+
@subscription.unsubscribe
|
406
|
+
expect(@subscription.subscribing).to be_falsey
|
407
|
+
post_with_compatibility :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
408
|
+
end
|
409
|
+
|
410
|
+
it "returns 302 as http status code" do
|
411
|
+
expect(response.status).to eq(302)
|
412
|
+
end
|
413
|
+
|
414
|
+
it "updates subscribing to true" do
|
415
|
+
expect(@subscription.reload.subscribing).to be_truthy
|
416
|
+
end
|
417
|
+
|
418
|
+
it "redirects to :index" do
|
419
|
+
expect(response).to redirect_to action: :index
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
context "http POST request from root_path" do
|
424
|
+
before do
|
425
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
426
|
+
@subscription.unsubscribe
|
427
|
+
expect(@subscription.subscribing).to be_falsey
|
428
|
+
request.env["HTTP_REFERER"] = root_path
|
429
|
+
post_with_compatibility :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
430
|
+
end
|
431
|
+
|
432
|
+
it "returns 302 as http status code" do
|
433
|
+
expect(response.status).to eq(302)
|
434
|
+
end
|
435
|
+
|
436
|
+
it "updates subscribing to true" do
|
437
|
+
expect(@subscription.reload.subscribing).to be_truthy
|
438
|
+
end
|
439
|
+
|
440
|
+
it "redirects to root_path as request.referer" do
|
441
|
+
expect(response).to redirect_to root_path
|
442
|
+
end
|
443
|
+
end
|
444
|
+
|
445
|
+
context "Ajax POST request" do
|
446
|
+
before do
|
447
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
448
|
+
@subscription.unsubscribe
|
449
|
+
expect(@subscription.subscribing).to be_falsey
|
450
|
+
request.env["HTTP_REFERER"] = root_path
|
451
|
+
xhr_with_compatibility :post, :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
452
|
+
end
|
453
|
+
|
454
|
+
it "returns 200 as http status code" do
|
455
|
+
expect(response.status).to eq(200)
|
456
|
+
end
|
457
|
+
|
458
|
+
it "assigns subscription index as @subscriptions" do
|
459
|
+
expect(assigns(:subscriptions)).to eq([@subscription])
|
460
|
+
end
|
461
|
+
|
462
|
+
it "updates subscribing to true" do
|
463
|
+
expect(@subscription.reload.subscribing).to be_truthy
|
464
|
+
end
|
465
|
+
|
466
|
+
it "renders the :open template as format js" do
|
467
|
+
expect(response).to render_template :subscribe, format: :js
|
468
|
+
end
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
describe "POST #unsubscribe" do
|
473
|
+
context "http direct POST request" do
|
474
|
+
before do
|
475
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
476
|
+
expect(@subscription.subscribing).to be_truthy
|
477
|
+
post_with_compatibility :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
478
|
+
end
|
479
|
+
|
480
|
+
it "returns 302 as http status code" do
|
481
|
+
expect(response.status).to eq(302)
|
482
|
+
end
|
483
|
+
|
484
|
+
it "updates subscribing to false" do
|
485
|
+
expect(@subscription.reload.subscribing).to be_falsey
|
486
|
+
end
|
487
|
+
|
488
|
+
it "redirects to :index" do
|
489
|
+
expect(response).to redirect_to action: :index
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
context "http POST request from root_path" do
|
494
|
+
before do
|
495
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
496
|
+
expect(@subscription.subscribing).to be_truthy
|
497
|
+
request.env["HTTP_REFERER"] = root_path
|
498
|
+
post_with_compatibility :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
499
|
+
end
|
500
|
+
|
501
|
+
it "returns 302 as http status code" do
|
502
|
+
expect(response.status).to eq(302)
|
503
|
+
end
|
504
|
+
|
505
|
+
it "updates subscribing to false" do
|
506
|
+
expect(@subscription.reload.subscribing).to be_falsey
|
507
|
+
end
|
508
|
+
|
509
|
+
it "redirects to root_path as request.referer" do
|
510
|
+
expect(response).to redirect_to root_path
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
514
|
+
context "Ajax POST request" do
|
515
|
+
before do
|
516
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
517
|
+
expect(@subscription.subscribing).to be_truthy
|
518
|
+
request.env["HTTP_REFERER"] = root_path
|
519
|
+
xhr_with_compatibility :post, :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
520
|
+
end
|
521
|
+
|
522
|
+
it "returns 200 as http status code" do
|
523
|
+
expect(response.status).to eq(200)
|
524
|
+
end
|
525
|
+
|
526
|
+
it "assigns subscription index as @subscriptions" do
|
527
|
+
expect(assigns(:subscriptions)).to eq([@subscription])
|
528
|
+
end
|
529
|
+
|
530
|
+
it "updates subscribing to false" do
|
531
|
+
expect(@subscription.reload.subscribing).to be_falsey
|
532
|
+
end
|
533
|
+
|
534
|
+
it "renders the :open template as format js" do
|
535
|
+
expect(response).to render_template :unsubscribe, format: :js
|
536
|
+
end
|
537
|
+
end
|
538
|
+
end
|
539
|
+
|
540
|
+
describe "POST #subscribe_to_email" do
|
541
|
+
context "http direct POST request" do
|
542
|
+
before do
|
543
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
544
|
+
@subscription.unsubscribe_to_email
|
545
|
+
expect(@subscription.subscribing_to_email).to be_falsey
|
546
|
+
post_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
547
|
+
end
|
548
|
+
|
549
|
+
it "returns 302 as http status code" do
|
550
|
+
expect(response.status).to eq(302)
|
551
|
+
end
|
552
|
+
|
553
|
+
it "updates subscribing_to_email to true" do
|
554
|
+
expect(@subscription.reload.subscribing_to_email).to be_truthy
|
555
|
+
end
|
556
|
+
|
557
|
+
it "redirects to :index" do
|
558
|
+
expect(response).to redirect_to action: :index
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
context "http POST request from root_path" do
|
563
|
+
before do
|
564
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
565
|
+
@subscription.unsubscribe_to_email
|
566
|
+
expect(@subscription.subscribing_to_email).to be_falsey
|
567
|
+
request.env["HTTP_REFERER"] = root_path
|
568
|
+
post_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
569
|
+
end
|
570
|
+
|
571
|
+
it "returns 302 as http status code" do
|
572
|
+
expect(response.status).to eq(302)
|
573
|
+
end
|
574
|
+
|
575
|
+
it "updates subscribing_to_email to true" do
|
576
|
+
expect(@subscription.reload.subscribing_to_email).to be_truthy
|
577
|
+
end
|
578
|
+
|
579
|
+
it "redirects to root_path as request.referer" do
|
580
|
+
expect(response).to redirect_to root_path
|
581
|
+
end
|
582
|
+
end
|
583
|
+
|
584
|
+
context "Ajax POST request" do
|
585
|
+
before do
|
586
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
587
|
+
@subscription.unsubscribe_to_email
|
588
|
+
expect(@subscription.subscribing_to_email).to be_falsey
|
589
|
+
request.env["HTTP_REFERER"] = root_path
|
590
|
+
xhr_with_compatibility :post, :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
591
|
+
end
|
592
|
+
|
593
|
+
it "returns 200 as http status code" do
|
594
|
+
expect(response.status).to eq(200)
|
595
|
+
end
|
596
|
+
|
597
|
+
it "assigns subscription index as @subscriptions" do
|
598
|
+
expect(assigns(:subscriptions)).to eq([@subscription])
|
599
|
+
end
|
600
|
+
|
601
|
+
it "updates subscribing_to_email to true" do
|
602
|
+
expect(@subscription.reload.subscribing_to_email).to be_truthy
|
603
|
+
end
|
604
|
+
|
605
|
+
it "renders the :open template as format js" do
|
606
|
+
expect(response).to render_template :subscribe_to_email, format: :js
|
607
|
+
end
|
608
|
+
end
|
609
|
+
|
610
|
+
context "with unsubscribed target" do
|
611
|
+
before do
|
612
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
613
|
+
@subscription.unsubscribe
|
614
|
+
expect(@subscription.subscribing).to be_falsey
|
615
|
+
expect(@subscription.subscribing_to_email).to be_falsey
|
616
|
+
post_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
617
|
+
end
|
618
|
+
|
619
|
+
it "returns 302 as http status code" do
|
620
|
+
expect(response.status).to eq(302)
|
621
|
+
end
|
622
|
+
|
623
|
+
it "cannot update subscribing_to_email to true" do
|
624
|
+
expect(@subscription.reload.subscribing_to_email).to be_falsey
|
625
|
+
end
|
626
|
+
|
627
|
+
it "redirects to :index" do
|
628
|
+
expect(response).to redirect_to action: :index
|
629
|
+
end
|
630
|
+
end
|
631
|
+
end
|
632
|
+
|
633
|
+
describe "POST #unsubscribe_to_email" do
|
634
|
+
context "http direct POST request" do
|
635
|
+
before do
|
636
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
637
|
+
expect(@subscription.subscribing_to_email).to be_truthy
|
638
|
+
post_with_compatibility :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
639
|
+
end
|
640
|
+
|
641
|
+
it "returns 302 as http status code" do
|
642
|
+
expect(response.status).to eq(302)
|
643
|
+
end
|
644
|
+
|
645
|
+
it "updates subscribing_to_email to false" do
|
646
|
+
expect(@subscription.reload.subscribing_to_email).to be_falsey
|
647
|
+
end
|
648
|
+
|
649
|
+
it "redirects to :index" do
|
650
|
+
expect(response).to redirect_to action: :index
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
context "http POST request from root_path" do
|
655
|
+
before do
|
656
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
657
|
+
expect(@subscription.subscribing_to_email).to be_truthy
|
658
|
+
request.env["HTTP_REFERER"] = root_path
|
659
|
+
post_with_compatibility :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
660
|
+
end
|
661
|
+
|
662
|
+
it "returns 302 as http status code" do
|
663
|
+
expect(response.status).to eq(302)
|
664
|
+
end
|
665
|
+
|
666
|
+
it "updates subscribing_to_email to false" do
|
667
|
+
expect(@subscription.reload.subscribing_to_email).to be_falsey
|
668
|
+
end
|
669
|
+
|
670
|
+
it "redirects to root_path as request.referer" do
|
671
|
+
expect(response).to redirect_to root_path
|
672
|
+
end
|
673
|
+
end
|
674
|
+
|
675
|
+
context "Ajax POST request" do
|
676
|
+
before do
|
677
|
+
@subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
|
678
|
+
expect(@subscription.subscribing_to_email).to be_truthy
|
679
|
+
request.env["HTTP_REFERER"] = root_path
|
680
|
+
xhr_with_compatibility :post, :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
|
681
|
+
end
|
682
|
+
|
683
|
+
it "returns 200 as http status code" do
|
684
|
+
expect(response.status).to eq(200)
|
685
|
+
end
|
686
|
+
|
687
|
+
it "assigns subscription index as @subscriptions" do
|
688
|
+
expect(assigns(:subscriptions)).to eq([@subscription])
|
689
|
+
end
|
690
|
+
|
691
|
+
it "updates subscribing_to_email to false" do
|
692
|
+
expect(@subscription.reload.subscribing_to_email).to be_falsey
|
693
|
+
end
|
694
|
+
|
695
|
+
it "renders the :open template as format js" do
|
696
|
+
expect(response).to render_template :unsubscribe_to_email, format: :js
|
697
|
+
end
|
698
|
+
end
|
699
|
+
end
|
700
|
+
|
701
|
+
|
702
|
+
private
|
703
|
+
|
704
|
+
def get_with_compatibility action, params, session
|
705
|
+
if Rails::VERSION::MAJOR <= 4
|
706
|
+
get action, params, session
|
707
|
+
else
|
708
|
+
get action, params: params, session: session
|
709
|
+
end
|
710
|
+
end
|
711
|
+
|
712
|
+
def post_with_compatibility action, params, session
|
713
|
+
if Rails::VERSION::MAJOR <= 4
|
714
|
+
post action, params, session
|
715
|
+
else
|
716
|
+
post action, params: params, session: session
|
717
|
+
end
|
718
|
+
end
|
719
|
+
|
720
|
+
def delete_with_compatibility action, params, session
|
721
|
+
if Rails::VERSION::MAJOR <= 4
|
722
|
+
delete action, params, session
|
723
|
+
else
|
724
|
+
delete action, params: params, session: session
|
725
|
+
end
|
726
|
+
end
|
727
|
+
|
728
|
+
def xhr_with_compatibility method, action, params, session
|
729
|
+
if Rails::VERSION::MAJOR <= 4
|
730
|
+
xhr method, action, params, session
|
731
|
+
else
|
732
|
+
send method.to_s, action, xhr: true, params: params, session: session
|
733
|
+
end
|
734
|
+
end
|
735
|
+
end
|