activity_notification 2.0.0 → 2.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.
Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +22 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
  4. data/.github/pull_request_template.md +13 -0
  5. data/.gitignore +10 -3
  6. data/.travis.yml +6 -5
  7. data/CHANGELOG.md +22 -0
  8. data/Gemfile +8 -2
  9. data/Procfile +1 -1
  10. data/README.md +153 -1510
  11. data/activity_notification.gemspec +4 -1
  12. data/app/channels/activity_notification/notification_api_channel.rb +12 -0
  13. data/app/channels/activity_notification/notification_api_with_devise_channel.rb +46 -0
  14. data/app/channels/activity_notification/notification_channel.rb +1 -1
  15. data/app/channels/activity_notification/notification_with_devise_channel.rb +1 -1
  16. data/app/controllers/activity_notification/apidocs_controller.rb +75 -0
  17. data/app/controllers/activity_notification/notifications_api_controller.rb +143 -0
  18. data/app/controllers/activity_notification/notifications_api_with_devise_controller.rb +7 -0
  19. data/app/controllers/activity_notification/notifications_controller.rb +79 -53
  20. data/app/controllers/activity_notification/subscriptions_api_controller.rb +197 -0
  21. data/app/controllers/activity_notification/subscriptions_api_with_devise_controller.rb +7 -0
  22. data/app/controllers/activity_notification/subscriptions_controller.rb +78 -69
  23. data/app/views/activity_notification/notifications/default/_default.html.erb +18 -18
  24. data/app/views/activity_notification/notifications/default/_default_without_grouping.html.erb +14 -14
  25. data/app/views/activity_notification/notifications/default/index.html.erb +6 -6
  26. data/app/views/activity_notification/optional_targets/default/action_cable_channel/_default.html.erb +176 -0
  27. data/app/views/activity_notification/subscriptions/default/_form.html.erb +1 -1
  28. data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +3 -31
  29. data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +7 -7
  30. data/app/views/activity_notification/subscriptions/default/index.html.erb +11 -7
  31. data/bin/deploy_on_heroku.sh +3 -1
  32. data/docs/CODE_OF_CONDUCT.md +76 -0
  33. data/docs/CONTRIBUTING.md +36 -0
  34. data/docs/Functions.md +1130 -0
  35. data/docs/Setup.md +674 -0
  36. data/docs/Testing.md +148 -0
  37. data/gemfiles/Gemfile.rails-4.2 +3 -0
  38. data/gemfiles/Gemfile.rails-5.0 +3 -0
  39. data/gemfiles/Gemfile.rails-5.1 +3 -0
  40. data/gemfiles/Gemfile.rails-5.2 +3 -0
  41. data/gemfiles/{Gemfile.rails-6.0.rc → Gemfile.rails-6.0} +5 -3
  42. data/lib/activity_notification.rb +13 -1
  43. data/lib/activity_notification/apis/notification_api.rb +29 -92
  44. data/lib/activity_notification/apis/subscription_api.rb +20 -8
  45. data/lib/activity_notification/apis/swagger.rb +6 -0
  46. data/lib/activity_notification/config.rb +41 -21
  47. data/lib/activity_notification/controllers/common_api_controller.rb +30 -0
  48. data/lib/activity_notification/controllers/common_controller.rb +44 -20
  49. data/lib/activity_notification/controllers/concerns/swagger/error_responses.rb +55 -0
  50. data/lib/activity_notification/controllers/concerns/swagger/notifications_api.rb +273 -0
  51. data/lib/activity_notification/controllers/concerns/swagger/notifications_parameters.rb +92 -0
  52. data/lib/activity_notification/controllers/concerns/swagger/subscriptions_api.rb +405 -0
  53. data/lib/activity_notification/controllers/concerns/swagger/subscriptions_parameters.rb +50 -0
  54. data/lib/activity_notification/controllers/devise_authentication_controller.rb +7 -6
  55. data/lib/activity_notification/gem_version.rb +14 -0
  56. data/lib/activity_notification/helpers/errors.rb +2 -0
  57. data/lib/activity_notification/helpers/view_helpers.rb +4 -0
  58. data/lib/activity_notification/mailers/helpers.rb +17 -10
  59. data/lib/activity_notification/models/concerns/notifiable.rb +26 -10
  60. data/lib/activity_notification/models/concerns/subscriber.rb +12 -1
  61. data/lib/activity_notification/models/concerns/swagger/error_schema.rb +36 -0
  62. data/lib/activity_notification/models/concerns/swagger/notification_schema.rb +209 -0
  63. data/lib/activity_notification/models/concerns/swagger/subscription_schema.rb +162 -0
  64. data/lib/activity_notification/models/concerns/target.rb +36 -10
  65. data/lib/activity_notification/models/notification.rb +1 -0
  66. data/lib/activity_notification/models/subscription.rb +1 -0
  67. data/lib/activity_notification/optional_targets/action_cable_api_channel.rb +69 -0
  68. data/lib/activity_notification/optional_targets/action_cable_channel.rb +68 -0
  69. data/lib/activity_notification/optional_targets/base.rb +7 -13
  70. data/lib/activity_notification/orm/active_record/notification.rb +17 -1
  71. data/lib/activity_notification/orm/active_record/subscription.rb +1 -1
  72. data/lib/activity_notification/orm/dynamoid.rb +28 -0
  73. data/lib/activity_notification/orm/dynamoid/extension.rb +79 -1
  74. data/lib/activity_notification/orm/dynamoid/notification.rb +1 -1
  75. data/lib/activity_notification/orm/dynamoid/subscription.rb +1 -1
  76. data/lib/activity_notification/orm/mongoid.rb +22 -0
  77. data/lib/activity_notification/orm/mongoid/notification.rb +17 -1
  78. data/lib/activity_notification/orm/mongoid/subscription.rb +1 -1
  79. data/lib/activity_notification/rails/routes.rb +132 -48
  80. data/lib/activity_notification/renderable.rb +13 -2
  81. data/lib/activity_notification/roles/acts_as_notifiable.rb +38 -20
  82. data/lib/activity_notification/version.rb +1 -1
  83. data/lib/generators/activity_notification/controllers_generator.rb +2 -1
  84. data/lib/generators/templates/activity_notification.rb +8 -0
  85. data/lib/generators/templates/controllers/notifications_api_controller.rb +31 -0
  86. data/lib/generators/templates/controllers/notifications_api_with_devise_controller.rb +31 -0
  87. data/lib/generators/templates/controllers/notifications_controller.rb +1 -37
  88. data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +1 -45
  89. data/lib/generators/templates/controllers/subscriptions_api_controller.rb +61 -0
  90. data/lib/generators/templates/controllers/subscriptions_api_with_devise_controller.rb +61 -0
  91. data/lib/generators/templates/controllers/subscriptions_controller.rb +14 -37
  92. data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +14 -45
  93. data/lib/generators/templates/models/README +8 -4
  94. data/lib/generators/templates/models/notification.rb +1 -1
  95. data/lib/generators/templates/models/subscription.rb +1 -1
  96. data/package.json +8 -0
  97. data/spec/channels/notification_api_channel_shared_examples.rb +59 -0
  98. data/spec/channels/notification_api_channel_spec.rb +51 -0
  99. data/spec/channels/notification_api_with_devise_channel_spec.rb +78 -0
  100. data/spec/concerns/apis/notification_api_spec.rb +37 -2
  101. data/spec/concerns/models/notifiable_spec.rb +64 -0
  102. data/spec/concerns/models/subscriber_spec.rb +13 -16
  103. data/spec/concerns/models/target_spec.rb +32 -0
  104. data/spec/concerns/renderable_spec.rb +2 -2
  105. data/spec/controllers/controller_spec_utility.rb +136 -0
  106. data/spec/controllers/notifications_api_controller_shared_examples.rb +506 -0
  107. data/spec/controllers/notifications_api_controller_spec.rb +19 -0
  108. data/spec/controllers/notifications_api_with_devise_controller_spec.rb +60 -0
  109. data/spec/controllers/notifications_controller_shared_examples.rb +54 -79
  110. data/spec/controllers/notifications_controller_spec.rb +1 -2
  111. data/spec/controllers/notifications_with_devise_controller_spec.rb +3 -12
  112. data/spec/controllers/subscriptions_api_controller_shared_examples.rb +750 -0
  113. data/spec/controllers/subscriptions_api_controller_spec.rb +19 -0
  114. data/spec/controllers/subscriptions_api_with_devise_controller_spec.rb +60 -0
  115. data/spec/controllers/subscriptions_controller_shared_examples.rb +94 -121
  116. data/spec/controllers/subscriptions_controller_spec.rb +1 -2
  117. data/spec/controllers/subscriptions_with_devise_controller_spec.rb +3 -12
  118. data/spec/helpers/view_helpers_spec.rb +4 -11
  119. data/spec/mailers/mailer_spec.rb +41 -0
  120. data/spec/models/notification_spec.rb +17 -0
  121. data/spec/models/subscription_spec.rb +0 -13
  122. data/spec/optional_targets/action_cable_api_channel_spec.rb +37 -0
  123. data/spec/optional_targets/action_cable_channel_spec.rb +44 -0
  124. data/spec/optional_targets/amazon_sns_spec.rb +0 -2
  125. data/spec/optional_targets/slack_spec.rb +0 -2
  126. data/spec/rails_app/Rakefile +9 -0
  127. data/spec/rails_app/app/assets/config/manifest.js +3 -0
  128. data/spec/rails_app/app/assets/images/.keep +0 -0
  129. data/spec/rails_app/app/controllers/admins_controller.rb +21 -0
  130. data/spec/rails_app/app/controllers/application_controller.rb +1 -1
  131. data/spec/rails_app/app/controllers/articles_controller.rb +6 -3
  132. data/spec/rails_app/app/controllers/spa_controller.rb +7 -0
  133. data/spec/rails_app/app/controllers/users/notifications_controller.rb +0 -65
  134. data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +0 -73
  135. data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +0 -77
  136. data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +0 -85
  137. data/spec/rails_app/app/controllers/users_controller.rb +21 -0
  138. data/spec/rails_app/app/javascript/App.vue +104 -0
  139. data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +83 -0
  140. data/spec/rails_app/app/javascript/components/Top.vue +99 -0
  141. data/spec/rails_app/app/javascript/components/notifications/Index.vue +200 -0
  142. data/spec/rails_app/app/javascript/components/notifications/Notification.vue +133 -0
  143. data/spec/rails_app/app/javascript/components/notifications/NotificationContent.vue +122 -0
  144. data/spec/rails_app/app/javascript/components/subscriptions/Index.vue +279 -0
  145. data/spec/rails_app/app/javascript/components/subscriptions/NewSubscription.vue +112 -0
  146. data/spec/rails_app/app/javascript/components/subscriptions/NotificationKey.vue +141 -0
  147. data/spec/rails_app/app/javascript/components/subscriptions/Subscription.vue +226 -0
  148. data/spec/rails_app/app/javascript/config/development.js +5 -0
  149. data/spec/rails_app/app/javascript/config/environment.js +7 -0
  150. data/spec/rails_app/app/javascript/config/production.js +5 -0
  151. data/spec/rails_app/app/javascript/config/test.js +5 -0
  152. data/spec/rails_app/app/javascript/packs/application.js +18 -0
  153. data/spec/rails_app/app/javascript/packs/spa.js +11 -0
  154. data/spec/rails_app/app/javascript/store/auth.js +37 -0
  155. data/spec/rails_app/app/models/admin.rb +16 -15
  156. data/spec/rails_app/app/models/article.rb +26 -21
  157. data/spec/rails_app/app/models/comment.rb +24 -71
  158. data/spec/rails_app/app/models/user.rb +43 -20
  159. data/spec/rails_app/app/views/activity_notification/notifications/default/article/_update.html.erb +146 -0
  160. data/spec/rails_app/app/views/articles/index.html.erb +51 -7
  161. data/spec/rails_app/app/views/articles/show.html.erb +1 -1
  162. data/spec/rails_app/app/views/layouts/_header.html.erb +8 -10
  163. data/spec/rails_app/app/views/spa/index.html.erb +2 -0
  164. data/spec/rails_app/babel.config.js +72 -0
  165. data/spec/rails_app/bin/webpack +18 -0
  166. data/spec/rails_app/bin/webpack-dev-server +18 -0
  167. data/spec/rails_app/config/application.rb +15 -2
  168. data/spec/rails_app/config/environment.rb +2 -1
  169. data/spec/rails_app/config/environments/development.rb +5 -0
  170. data/spec/rails_app/config/environments/production.rb +3 -0
  171. data/spec/rails_app/config/environments/test.rb +5 -0
  172. data/spec/rails_app/config/initializers/activity_notification.rb +8 -0
  173. data/spec/rails_app/config/initializers/devise_token_auth.rb +55 -0
  174. data/spec/rails_app/config/initializers/mysql.rb +9 -0
  175. data/spec/rails_app/config/locales/activity_notification.en.yml +2 -2
  176. data/spec/rails_app/config/routes.rb +33 -1
  177. data/spec/rails_app/config/webpack/development.js +5 -0
  178. data/spec/rails_app/config/webpack/environment.js +7 -0
  179. data/spec/rails_app/config/webpack/loaders/vue.js +6 -0
  180. data/spec/rails_app/config/webpack/production.js +5 -0
  181. data/spec/rails_app/config/webpack/test.js +5 -0
  182. data/spec/rails_app/config/webpacker.yml +97 -0
  183. data/spec/rails_app/db/migrate/20191201000000_add_tokens_to_users.rb +10 -0
  184. data/spec/rails_app/db/schema.rb +4 -1
  185. data/spec/rails_app/db/seeds.rb +1 -0
  186. data/spec/rails_app/lib/custom_optional_targets/raise_error.rb +14 -0
  187. data/spec/rails_app/package.json +23 -0
  188. data/spec/rails_app/postcss.config.js +12 -0
  189. data/spec/roles/acts_as_group_spec.rb +0 -2
  190. data/spec/roles/acts_as_notifiable_spec.rb +1 -3
  191. data/spec/roles/acts_as_notifier_spec.rb +0 -2
  192. data/spec/roles/acts_as_target_spec.rb +0 -4
  193. data/spec/spec_helper.rb +7 -15
  194. data/spec/version_spec.rb +31 -0
  195. metadata +187 -13
@@ -0,0 +1,19 @@
1
+ require 'controllers/subscriptions_api_controller_shared_examples'
2
+
3
+ describe ActivityNotification::SubscriptionsApiController, type: :controller do
4
+ let(:test_target) { create(:user) }
5
+ let(:target_type) { :users }
6
+ let(:typed_target_param) { :user_id }
7
+ let(:extra_params) { {} }
8
+ let(:valid_session) {}
9
+
10
+ it_behaves_like :subscriptions_api_controller
11
+
12
+ describe "/api/v#{ActivityNotification::GEM_VERSION::MAJOR}", type: :request do
13
+ let(:root_path) { "/api/v#{ActivityNotification::GEM_VERSION::MAJOR}" }
14
+ let(:test_target) { create(:user) }
15
+ let(:target_type) { :users }
16
+
17
+ it_behaves_like :subscriptions_api_request
18
+ end
19
+ end
@@ -0,0 +1,60 @@
1
+ require 'controllers/subscriptions_api_controller_shared_examples'
2
+
3
+ context "ActivityNotification::NotificationsApiWithDeviseController" do
4
+ context "test admins API with associated users authentication" do
5
+
6
+ describe "/api/v#{ActivityNotification::GEM_VERSION::MAJOR}", type: :request do
7
+ include ActivityNotification::ControllerSpec::CommitteeUtility
8
+
9
+ let(:root_path) { "/api/v#{ActivityNotification::GEM_VERSION::MAJOR}" }
10
+ let(:test_user) { create(:confirmed_user) }
11
+ let(:unauthenticated_user) { create(:confirmed_user) }
12
+ let(:test_target) { create(:admin, user: test_user) }
13
+ let(:target_type) { :admins }
14
+
15
+ def sign_in_with_devise_token_auth(auth_user, status)
16
+ post_with_compatibility "#{root_path}/auth/sign_in", params: { email: auth_user.email, password: "password" }
17
+ expect(response).to have_http_status(status)
18
+ @headers = response.header.slice("access-token", "client", "uid")
19
+ end
20
+
21
+ context "signed in with devise as authenticated user" do
22
+ before do
23
+ sign_in_with_devise_token_auth(test_user, 200)
24
+ end
25
+
26
+ it_behaves_like :subscriptions_api_request
27
+ end
28
+
29
+ context "signed in with devise as unauthenticated user" do
30
+ let(:target_params) { { target_type: target_type, devise_type: :users } }
31
+
32
+ describe "GET #index" do
33
+ before do
34
+ sign_in_with_devise_token_auth(unauthenticated_user, 200)
35
+ get_with_compatibility "#{api_path}/subscriptions", headers: @headers
36
+ end
37
+
38
+ it "returns 403 as http status code" do
39
+ expect(response.status).to eq(403)
40
+ end
41
+ end
42
+ end
43
+
44
+ context "unsigned in with devise" do
45
+ let(:target_params) { { target_type: target_type, devise_type: :users } }
46
+
47
+ describe "GET #index" do
48
+ before do
49
+ get_with_compatibility "#{api_path}/subscriptions", headers: @headers
50
+ end
51
+
52
+ it "returns 401 as http status code" do
53
+ expect(response.status).to eq(401)
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -1,4 +1,8 @@
1
- shared_examples_for :subscription_controller do
1
+ require_relative 'controller_spec_utility'
2
+
3
+ shared_examples_for :subscriptions_controller do
4
+ include ActivityNotification::ControllerSpec::RequestUtility
5
+
2
6
  let(:target_params) { { target_type: target_type }.merge(extra_params || {}) }
3
7
 
4
8
  describe "GET #index" do
@@ -81,34 +85,6 @@ shared_examples_for :subscription_controller do
81
85
  end
82
86
  end
83
87
 
84
- context "with json as format parameter" do
85
- before do
86
- @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
87
- @notification = create(:notification, target: test_target, key: 'test_notification_key')
88
- get_with_compatibility :index, target_params.merge({ typed_target_param => test_target, format: :json }), valid_session
89
- end
90
-
91
- it "returns 200 as http status code" do
92
- expect(response.status).to eq(200)
93
- end
94
-
95
- it "returns json format" do
96
- case ActivityNotification.config.orm
97
- when :active_record
98
- expect(JSON.parse(response.body)["subscriptions"].first)
99
- .to include("target_id" => test_target.id, "target_type" => test_target.to_class_name)
100
- when :mongoid
101
- expect(JSON.parse(response.body)["subscriptions"].first)
102
- .to include("target_id" => test_target.id.to_s, "target_type" => test_target.to_class_name)
103
- when :dynamoid
104
- expect(JSON.parse(response.body)["subscriptions"].first)
105
- .to include("target_key" => "#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
106
- end
107
- expect(JSON.parse(response.body)["unconfigured_notification_keys"].first)
108
- .to eq('test_notification_key')
109
- end
110
- end
111
-
112
88
  context "with filter parameter" do
113
89
  context "with configured as filter" do
114
90
  before do
@@ -229,14 +205,14 @@ shared_examples_for :subscription_controller do
229
205
  end
230
206
  end
231
207
 
232
- describe "POST #create" do
208
+ describe "PUT #create" do
233
209
  before do
234
210
  expect(test_target.subscriptions.size).to eq(0)
235
211
  end
236
212
 
237
- context "http direct POST request without optional targets" do
213
+ context "http direct PUT request without optional targets" do
238
214
  before do
239
- post_with_compatibility :create, target_params.merge({
215
+ put_with_compatibility :create, target_params.merge({
240
216
  typed_target_param => test_target,
241
217
  "subscription" => { "key" => "new_subscription_key",
242
218
  "subscribing"=> "true",
@@ -259,9 +235,9 @@ shared_examples_for :subscription_controller do
259
235
  end
260
236
  end
261
237
 
262
- context "http direct POST request with optional targets" do
238
+ context "http direct PUT request with optional targets" do
263
239
  before do
264
- post_with_compatibility :create, target_params.merge({
240
+ put_with_compatibility :create, target_params.merge({
265
241
  typed_target_param => test_target,
266
242
  "subscription" => { "key" => "new_subscription_key",
267
243
  "subscribing"=> "true",
@@ -288,10 +264,10 @@ shared_examples_for :subscription_controller do
288
264
  end
289
265
  end
290
266
 
291
- context "http POST request from root_path" do
267
+ context "http PUT request from root_path" do
292
268
  before do
293
269
  request.env["HTTP_REFERER"] = root_path
294
- post_with_compatibility :create, target_params.merge({
270
+ put_with_compatibility :create, target_params.merge({
295
271
  typed_target_param => test_target,
296
272
  "subscription" => { "key" => "new_subscription_key",
297
273
  "subscribing"=> "true",
@@ -314,10 +290,10 @@ shared_examples_for :subscription_controller do
314
290
  end
315
291
  end
316
292
 
317
- context "Ajax POST request" do
293
+ context "Ajax PUT request" do
318
294
  before do
319
295
  request.env["HTTP_REFERER"] = root_path
320
- xhr_with_compatibility :post, :create, target_params.merge({
296
+ xhr_with_compatibility :put, :create, target_params.merge({
321
297
  typed_target_param => test_target,
322
298
  "subscription" => { "key" => "new_subscription_key",
323
299
  "subscribing"=> "true",
@@ -345,6 +321,38 @@ shared_examples_for :subscription_controller do
345
321
  end
346
322
  end
347
323
 
324
+ describe "GET #find" do
325
+ context "with key, target_type and (typed_target)_id parameters" do
326
+ before do
327
+ @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
328
+ get_with_compatibility :find, target_params.merge({ key: 'test_subscription_key', typed_target_param => test_target }), valid_session
329
+ end
330
+
331
+ it "returns 302 as http status code" do
332
+ expect(response.status).to eq(302)
333
+ end
334
+
335
+ it "assigns the requested subscription as @subscription" do
336
+ expect(assigns(:subscription)).to eq(@subscription)
337
+ end
338
+
339
+ it "redirects to :show" do
340
+ expect(response).to redirect_to action: :show, id: @subscription
341
+ end
342
+ end
343
+
344
+ context "with wrong id and (typed_target)_id parameters" do
345
+ before do
346
+ @subscription = create(:subscription, target: create(:user))
347
+ get_with_compatibility :find, target_params.merge({ key: 'test_subscription_key', typed_target_param => test_target }), valid_session
348
+ end
349
+
350
+ it "returns 404 as http status code" do
351
+ expect(response.status).to eq(404)
352
+ end
353
+ end
354
+ end
355
+
348
356
  describe "GET #show" do
349
357
  context "with id, target_type and (typed_target)_id parameters" do
350
358
  before do
@@ -360,7 +368,7 @@ shared_examples_for :subscription_controller do
360
368
  expect(assigns(:subscription)).to eq(@subscription)
361
369
  end
362
370
 
363
- it "renders the :index template" do
371
+ it "renders the :show template" do
364
372
  expect(response).to render_template :show
365
373
  end
366
374
  end
@@ -389,7 +397,7 @@ shared_examples_for :subscription_controller do
389
397
  end
390
398
 
391
399
  it "deletes the subscription" do
392
- expect(assigns(test_target.subscriptions.where(id: @subscription.id).exists?)).to be_falsey
400
+ expect(test_target.subscriptions.where(id: @subscription.id).exists?).to be_falsey
393
401
  end
394
402
 
395
403
  it "redirects to :index" do
@@ -441,13 +449,13 @@ shared_examples_for :subscription_controller do
441
449
  end
442
450
  end
443
451
 
444
- describe "POST #subscribe" do
445
- context "http direct POST request" do
452
+ describe "PUT #subscribe" do
453
+ context "http direct PUT request" do
446
454
  before do
447
455
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
448
456
  @subscription.unsubscribe
449
457
  expect(@subscription.subscribing?).to be_falsey
450
- post_with_compatibility :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
458
+ put_with_compatibility :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
451
459
  end
452
460
 
453
461
  it "returns 302 as http status code" do
@@ -463,13 +471,13 @@ shared_examples_for :subscription_controller do
463
471
  end
464
472
  end
465
473
 
466
- context "http POST request from root_path" do
474
+ context "http PUT request from root_path" do
467
475
  before do
468
476
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
469
477
  @subscription.unsubscribe
470
478
  expect(@subscription.subscribing?).to be_falsey
471
479
  request.env["HTTP_REFERER"] = root_path
472
- post_with_compatibility :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
480
+ put_with_compatibility :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
473
481
  end
474
482
 
475
483
  it "returns 302 as http status code" do
@@ -485,13 +493,13 @@ shared_examples_for :subscription_controller do
485
493
  end
486
494
  end
487
495
 
488
- context "Ajax POST request" do
496
+ context "Ajax PUT request" do
489
497
  before do
490
498
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
491
499
  @subscription.unsubscribe
492
500
  expect(@subscription.subscribing?).to be_falsey
493
501
  request.env["HTTP_REFERER"] = root_path
494
- xhr_with_compatibility :post, :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
502
+ xhr_with_compatibility :put, :subscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
495
503
  end
496
504
 
497
505
  it "returns 200 as http status code" do
@@ -512,12 +520,12 @@ shared_examples_for :subscription_controller do
512
520
  end
513
521
  end
514
522
 
515
- describe "POST #unsubscribe" do
516
- context "http direct POST request" do
523
+ describe "PUT #unsubscribe" do
524
+ context "http direct PUT request" do
517
525
  before do
518
526
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
519
527
  expect(@subscription.subscribing?).to be_truthy
520
- post_with_compatibility :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
528
+ put_with_compatibility :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
521
529
  end
522
530
 
523
531
  it "returns 302 as http status code" do
@@ -533,12 +541,12 @@ shared_examples_for :subscription_controller do
533
541
  end
534
542
  end
535
543
 
536
- context "http POST request from root_path" do
544
+ context "http PUT request from root_path" do
537
545
  before do
538
546
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
539
547
  expect(@subscription.subscribing?).to be_truthy
540
548
  request.env["HTTP_REFERER"] = root_path
541
- post_with_compatibility :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
549
+ put_with_compatibility :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
542
550
  end
543
551
 
544
552
  it "returns 302 as http status code" do
@@ -554,12 +562,12 @@ shared_examples_for :subscription_controller do
554
562
  end
555
563
  end
556
564
 
557
- context "Ajax POST request" do
565
+ context "Ajax PUT request" do
558
566
  before do
559
567
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
560
568
  expect(@subscription.subscribing?).to be_truthy
561
569
  request.env["HTTP_REFERER"] = root_path
562
- xhr_with_compatibility :post, :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
570
+ xhr_with_compatibility :put, :unsubscribe, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
563
571
  end
564
572
 
565
573
  it "returns 200 as http status code" do
@@ -580,13 +588,13 @@ shared_examples_for :subscription_controller do
580
588
  end
581
589
  end
582
590
 
583
- describe "POST #subscribe_to_email" do
584
- context "http direct POST request" do
591
+ describe "PUT #subscribe_to_email" do
592
+ context "http direct PUT request" do
585
593
  before do
586
594
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
587
595
  @subscription.unsubscribe_to_email
588
596
  expect(@subscription.subscribing_to_email?).to be_falsey
589
- post_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
597
+ put_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
590
598
  end
591
599
 
592
600
  it "returns 302 as http status code" do
@@ -602,13 +610,13 @@ shared_examples_for :subscription_controller do
602
610
  end
603
611
  end
604
612
 
605
- context "http POST request from root_path" do
613
+ context "http PUT request from root_path" do
606
614
  before do
607
615
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
608
616
  @subscription.unsubscribe_to_email
609
617
  expect(@subscription.subscribing_to_email?).to be_falsey
610
618
  request.env["HTTP_REFERER"] = root_path
611
- post_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
619
+ put_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
612
620
  end
613
621
 
614
622
  it "returns 302 as http status code" do
@@ -624,13 +632,13 @@ shared_examples_for :subscription_controller do
624
632
  end
625
633
  end
626
634
 
627
- context "Ajax POST request" do
635
+ context "Ajax PUT request" do
628
636
  before do
629
637
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
630
638
  @subscription.unsubscribe_to_email
631
639
  expect(@subscription.subscribing_to_email?).to be_falsey
632
640
  request.env["HTTP_REFERER"] = root_path
633
- xhr_with_compatibility :post, :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
641
+ xhr_with_compatibility :put, :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
634
642
  end
635
643
 
636
644
  it "returns 200 as http status code" do
@@ -656,7 +664,7 @@ shared_examples_for :subscription_controller do
656
664
  @subscription.unsubscribe
657
665
  expect(@subscription.subscribing?).to be_falsey
658
666
  expect(@subscription.subscribing_to_email?).to be_falsey
659
- post_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
667
+ put_with_compatibility :subscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
660
668
  end
661
669
 
662
670
  it "returns 302 as http status code" do
@@ -673,12 +681,12 @@ shared_examples_for :subscription_controller do
673
681
  end
674
682
  end
675
683
 
676
- describe "POST #unsubscribe_to_email" do
677
- context "http direct POST request" do
684
+ describe "PUT #unsubscribe_to_email" do
685
+ context "http direct PUT request" do
678
686
  before do
679
687
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
680
688
  expect(@subscription.subscribing_to_email?).to be_truthy
681
- post_with_compatibility :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
689
+ put_with_compatibility :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
682
690
  end
683
691
 
684
692
  it "returns 302 as http status code" do
@@ -694,12 +702,12 @@ shared_examples_for :subscription_controller do
694
702
  end
695
703
  end
696
704
 
697
- context "http POST request from root_path" do
705
+ context "http PUT request from root_path" do
698
706
  before do
699
707
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
700
708
  expect(@subscription.subscribing_to_email?).to be_truthy
701
709
  request.env["HTTP_REFERER"] = root_path
702
- post_with_compatibility :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
710
+ put_with_compatibility :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
703
711
  end
704
712
 
705
713
  it "returns 302 as http status code" do
@@ -715,12 +723,12 @@ shared_examples_for :subscription_controller do
715
723
  end
716
724
  end
717
725
 
718
- context "Ajax POST request" do
726
+ context "Ajax PUT request" do
719
727
  before do
720
728
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
721
729
  expect(@subscription.subscribing_to_email?).to be_truthy
722
730
  request.env["HTTP_REFERER"] = root_path
723
- xhr_with_compatibility :post, :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
731
+ xhr_with_compatibility :put, :unsubscribe_to_email, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
724
732
  end
725
733
 
726
734
  it "returns 200 as http status code" do
@@ -741,13 +749,13 @@ shared_examples_for :subscription_controller do
741
749
  end
742
750
  end
743
751
 
744
- describe "POST #subscribe_to_optional_target" do
752
+ describe "PUT #subscribe_to_optional_target" do
745
753
  context "without optional_target_name param" do
746
754
  before do
747
755
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
748
756
  @subscription.unsubscribe_to_optional_target(:base)
749
757
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_falsey
750
- post_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
758
+ put_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
751
759
  end
752
760
 
753
761
  it "returns 400 as http status code" do
@@ -759,12 +767,12 @@ shared_examples_for :subscription_controller do
759
767
  end
760
768
  end
761
769
 
762
- context "http direct POST request" do
770
+ context "http direct PUT request" do
763
771
  before do
764
772
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
765
773
  @subscription.unsubscribe_to_optional_target(:base)
766
774
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_falsey
767
- post_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
775
+ put_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
768
776
  end
769
777
 
770
778
  it "returns 302 as http status code" do
@@ -780,13 +788,13 @@ shared_examples_for :subscription_controller do
780
788
  end
781
789
  end
782
790
 
783
- context "http POST request from root_path" do
791
+ context "http PUT request from root_path" do
784
792
  before do
785
793
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
786
794
  @subscription.unsubscribe_to_optional_target(:base)
787
795
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_falsey
788
796
  request.env["HTTP_REFERER"] = root_path
789
- post_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
797
+ put_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
790
798
  end
791
799
 
792
800
  it "returns 302 as http status code" do
@@ -802,13 +810,13 @@ shared_examples_for :subscription_controller do
802
810
  end
803
811
  end
804
812
 
805
- context "Ajax POST request" do
813
+ context "Ajax PUT request" do
806
814
  before do
807
815
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
808
816
  @subscription.unsubscribe_to_optional_target(:base)
809
817
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_falsey
810
818
  request.env["HTTP_REFERER"] = root_path
811
- xhr_with_compatibility :post, :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
819
+ xhr_with_compatibility :put, :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
812
820
  end
813
821
 
814
822
  it "returns 200 as http status code" do
@@ -835,7 +843,7 @@ shared_examples_for :subscription_controller do
835
843
  @subscription.unsubscribe
836
844
  expect(@subscription.subscribing?).to be_falsey
837
845
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_falsey
838
- post_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
846
+ put_with_compatibility :subscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
839
847
  end
840
848
 
841
849
  it "returns 302 as http status code" do
@@ -852,12 +860,12 @@ shared_examples_for :subscription_controller do
852
860
  end
853
861
  end
854
862
 
855
- describe "POST #unsubscribe_to_email" do
863
+ describe "PUT #unsubscribe_to_email" do
856
864
  context "without optional_target_name param" do
857
865
  before do
858
866
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
859
867
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_truthy
860
- post_with_compatibility :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
868
+ put_with_compatibility :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, typed_target_param => test_target }), valid_session
861
869
  end
862
870
 
863
871
  it "returns 400 as http status code" do
@@ -869,11 +877,11 @@ shared_examples_for :subscription_controller do
869
877
  end
870
878
  end
871
879
 
872
- context "http direct POST request" do
880
+ context "http direct PUT request" do
873
881
  before do
874
882
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
875
883
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_truthy
876
- post_with_compatibility :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
884
+ put_with_compatibility :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
877
885
  end
878
886
 
879
887
  it "returns 302 as http status code" do
@@ -889,12 +897,12 @@ shared_examples_for :subscription_controller do
889
897
  end
890
898
  end
891
899
 
892
- context "http POST request from root_path" do
900
+ context "http PUT request from root_path" do
893
901
  before do
894
902
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
895
903
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_truthy
896
904
  request.env["HTTP_REFERER"] = root_path
897
- post_with_compatibility :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
905
+ put_with_compatibility :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
898
906
  end
899
907
 
900
908
  it "returns 302 as http status code" do
@@ -910,12 +918,12 @@ shared_examples_for :subscription_controller do
910
918
  end
911
919
  end
912
920
 
913
- context "Ajax POST request" do
921
+ context "Ajax PUT request" do
914
922
  before do
915
923
  @subscription = create(:subscription, target: test_target, key: 'test_subscription_key')
916
924
  expect(@subscription.subscribing_to_optional_target?(:base)).to be_truthy
917
925
  request.env["HTTP_REFERER"] = root_path
918
- xhr_with_compatibility :post, :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
926
+ xhr_with_compatibility :put, :unsubscribe_to_optional_target, target_params.merge({ id: @subscription, optional_target_name: 'base', typed_target_param => test_target }), valid_session
919
927
  end
920
928
 
921
929
  it "returns 200 as http status code" do
@@ -935,39 +943,4 @@ shared_examples_for :subscription_controller do
935
943
  end
936
944
  end
937
945
  end
938
-
939
-
940
- private
941
-
942
- def get_with_compatibility action, params, session
943
- if Rails::VERSION::MAJOR <= 4
944
- get action, params, session
945
- else
946
- get action, params: params, session: session
947
- end
948
- end
949
-
950
- def post_with_compatibility action, params, session
951
- if Rails::VERSION::MAJOR <= 4
952
- post action, params, session
953
- else
954
- post action, params: params, session: session
955
- end
956
- end
957
-
958
- def delete_with_compatibility action, params, session
959
- if Rails::VERSION::MAJOR <= 4
960
- delete action, params, session
961
- else
962
- delete action, params: params, session: session
963
- end
964
- end
965
-
966
- def xhr_with_compatibility method, action, params, session
967
- if Rails::VERSION::MAJOR <= 4
968
- xhr method, action, params, session
969
- else
970
- send method.to_s, action, xhr: true, params: params, session: session
971
- end
972
- end
973
946
  end