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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +33 -0
  3. data/.rubocop.yml +1157 -0
  4. data/.yardopts +3 -0
  5. data/CHANGELOG.md +25 -0
  6. data/Gemfile.lock +15 -17
  7. data/README.md +154 -27
  8. data/activity_notification.gemspec +1 -1
  9. data/app/controllers/activity_notification/notifications_controller.rb +30 -104
  10. data/app/controllers/activity_notification/notifications_with_devise_controller.rb +1 -33
  11. data/app/controllers/activity_notification/subscriptions_controller.rb +184 -0
  12. data/app/controllers/activity_notification/subscriptions_with_devise_controller.rb +6 -0
  13. data/app/mailers/activity_notification/mailer.rb +3 -3
  14. data/app/views/activity_notification/notifications/default/_index.html.erb +3 -0
  15. data/app/views/activity_notification/notifications/default/index.html.erb +8 -10
  16. data/app/views/activity_notification/notifications/default/show.html.erb +24 -2
  17. data/app/views/activity_notification/subscriptions/default/_form.html.erb +52 -0
  18. data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +89 -0
  19. data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +73 -0
  20. data/app/views/activity_notification/subscriptions/default/_subscriptions.html.erb +13 -0
  21. data/app/views/activity_notification/subscriptions/default/create.js.erb +5 -0
  22. data/app/views/activity_notification/subscriptions/default/destroy.js.erb +5 -0
  23. data/app/views/activity_notification/subscriptions/default/index.html.erb +197 -0
  24. data/app/views/activity_notification/subscriptions/default/show.html.erb +177 -0
  25. data/app/views/activity_notification/subscriptions/default/subscribe.js.erb +8 -0
  26. data/app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb +6 -0
  27. data/app/views/activity_notification/subscriptions/default/unsubscribe.js.erb +8 -0
  28. data/app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb +6 -0
  29. data/gemfiles/Gemfile.rails-4.2.lock +18 -20
  30. data/gemfiles/Gemfile.rails-5.0.lock +18 -20
  31. data/lib/activity_notification.rb +7 -3
  32. data/lib/activity_notification/apis/notification_api.rb +95 -61
  33. data/lib/activity_notification/apis/subscription_api.rb +51 -0
  34. data/lib/activity_notification/common.rb +1 -1
  35. data/lib/activity_notification/config.rb +65 -17
  36. data/lib/activity_notification/controllers/common_controller.rb +118 -0
  37. data/lib/activity_notification/controllers/devise_authentication_controller.rb +41 -0
  38. data/lib/activity_notification/helpers/view_helpers.rb +131 -3
  39. data/lib/activity_notification/mailers/helpers.rb +6 -8
  40. data/lib/activity_notification/models/concerns/notifiable.rb +45 -27
  41. data/lib/activity_notification/models/concerns/subscriber.rb +149 -0
  42. data/lib/activity_notification/models/concerns/target.rb +100 -66
  43. data/lib/activity_notification/models/notification.rb +7 -5
  44. data/lib/activity_notification/models/subscription.rb +93 -0
  45. data/lib/activity_notification/rails/routes.rb +148 -33
  46. data/lib/activity_notification/renderable.rb +3 -4
  47. data/lib/activity_notification/roles/acts_as_notifiable.rb +14 -1
  48. data/lib/activity_notification/roles/acts_as_target.rb +11 -8
  49. data/lib/activity_notification/version.rb +1 -1
  50. data/lib/generators/activity_notification/controllers_generator.rb +2 -2
  51. data/lib/generators/activity_notification/install_generator.rb +0 -1
  52. data/lib/generators/activity_notification/migration/migration_generator.rb +8 -2
  53. data/lib/generators/activity_notification/models_generator.rb +53 -0
  54. data/lib/generators/activity_notification/views_generator.rb +7 -7
  55. data/lib/generators/templates/activity_notification.rb +17 -3
  56. data/lib/generators/templates/controllers/notifications_controller.rb +18 -17
  57. data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +18 -17
  58. data/lib/generators/templates/controllers/subscriptions_controller.rb +79 -0
  59. data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +87 -0
  60. data/lib/generators/templates/migrations/migration.rb +57 -0
  61. data/lib/generators/templates/models/README +10 -0
  62. data/lib/generators/templates/{notification → models}/notification.rb +1 -3
  63. data/lib/generators/templates/models/subscription.rb +4 -0
  64. data/spec/concerns/apis/notification_api_spec.rb +48 -11
  65. data/spec/concerns/apis/subscription_api_spec.rb +167 -0
  66. data/spec/concerns/models/notifiable_spec.rb +60 -0
  67. data/spec/concerns/models/subscriber_spec.rb +525 -0
  68. data/spec/concerns/models/target_spec.rb +271 -42
  69. data/spec/controllers/common_controller_spec.rb +25 -0
  70. data/spec/controllers/dummy_common_controller.rb +5 -0
  71. data/spec/controllers/notifications_controller_shared_examples.rb +2 -6
  72. data/spec/controllers/subscriptions_controller_shared_examples.rb +735 -0
  73. data/spec/controllers/subscriptions_controller_spec.rb +12 -0
  74. data/spec/controllers/subscriptions_with_devise_controller_spec.rb +91 -0
  75. data/spec/factories/dummy/dummy_subscriber.rb +4 -0
  76. data/spec/factories/subscriptions.rb +8 -0
  77. data/spec/generators/controllers_generator_spec.rb +25 -2
  78. data/spec/generators/migration/migration_generator_spec.rb +3 -3
  79. data/spec/generators/models_generator_spec.rb +96 -0
  80. data/spec/generators/views_generator_spec.rb +84 -0
  81. data/spec/helpers/view_helpers_spec.rb +143 -0
  82. data/spec/mailers/mailer_spec.rb +5 -4
  83. data/spec/models/dummy/dummy_subscriber_spec.rb +5 -0
  84. data/spec/models/notification_spec.rb +7 -7
  85. data/spec/models/subscription_spec.rb +158 -0
  86. data/spec/rails_app/app/controllers/users/notifications_controller.rb +67 -0
  87. data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +75 -0
  88. data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +79 -0
  89. data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +87 -0
  90. data/spec/rails_app/app/models/admin.rb +1 -0
  91. data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +4 -0
  92. data/spec/rails_app/app/models/user.rb +2 -1
  93. data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +1 -0
  94. data/spec/rails_app/app/views/articles/index.html.erb +6 -0
  95. data/spec/rails_app/config/initializers/activity_notification.rb +17 -3
  96. data/spec/rails_app/config/routes.rb +2 -2
  97. data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +33 -0
  98. data/spec/rails_app/db/schema.rb +18 -0
  99. data/spec/roles/acts_as_notifiable_spec.rb +1 -1
  100. data/spec/roles/acts_as_target_spec.rb +1 -1
  101. metadata +70 -11
  102. data/lib/generators/activity_notification/notification/notification_generator.rb +0 -20
  103. data/lib/generators/templates/active_record/migration.rb +0 -18
  104. data/spec/generators/notification/notification_generator_spec.rb +0 -41
  105. data/spec/rails_app/db/migrate/20160715050420_create_notifications.rb +0 -18
@@ -0,0 +1,12 @@
1
+ require 'controllers/subscriptions_controller_shared_examples'
2
+
3
+ describe ActivityNotification::SubscriptionsController, 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 :subscription_controller
11
+
12
+ end
@@ -0,0 +1,91 @@
1
+ require 'controllers/subscriptions_controller_shared_examples'
2
+
3
+ describe ActivityNotification::SubscriptionsWithDeviseController, type: :controller do
4
+ let(:test_user) { create(:confirmed_user) }
5
+ let(:unauthenticated_user) { create(:confirmed_user) }
6
+ let(:test_target) { create(:admin, user: test_user) }
7
+ let(:target_type) { :admins }
8
+ let(:typed_target_param) { :admin_id }
9
+ let(:extra_params) { { devise_type: :users } }
10
+ let(:valid_session) {}
11
+
12
+ context "signed in with devise as authenticated user" do
13
+ before do
14
+ sign_in test_user
15
+ end
16
+
17
+ it_behaves_like :subscription_controller
18
+ end
19
+
20
+ context "signed in with devise as unauthenticated user" do
21
+ let(:target_params) { { target_type: target_type, devise_type: :users } }
22
+
23
+ describe "GET #index" do
24
+ before do
25
+ sign_in unauthenticated_user
26
+ get_with_compatibility :index, target_params.merge({ typed_target_param => test_target }), valid_session
27
+ end
28
+
29
+ it "returns 403 as http status code" do
30
+ expect(response.status).to eq(403)
31
+ end
32
+ end
33
+ end
34
+
35
+ context "unsigned in with devise" do
36
+ let(:target_params) { { target_type: target_type, devise_type: :users } }
37
+
38
+ describe "GET #index" do
39
+ before do
40
+ get_with_compatibility :index, target_params.merge({ typed_target_param => test_target }), valid_session
41
+ end
42
+
43
+ it "returns 302 as http status code" do
44
+ expect(response.status).to eq(302)
45
+ end
46
+
47
+ it "redirects to sign_in path" do
48
+ expect(response).to redirect_to new_user_session_path
49
+ end
50
+ end
51
+ end
52
+
53
+ context "without devise_type parameter" do
54
+ let(:target_params) { { target_type: target_type } }
55
+
56
+ describe "GET #index" do
57
+ before do
58
+ get_with_compatibility :index, target_params.merge({ typed_target_param => test_target }), valid_session
59
+ end
60
+
61
+ it "returns 400 as http status code" do
62
+ expect(response.status).to eq(400)
63
+ end
64
+ end
65
+ end
66
+
67
+ context "with wrong devise_type parameter" do
68
+ let(:target_params) { { target_type: target_type, devise_type: :dummy_targets } }
69
+
70
+ describe "GET #index" do
71
+ before do
72
+ get_with_compatibility :index, target_params.merge({ typed_target_param => test_target }), valid_session
73
+ end
74
+
75
+ it "returns 403 as http status code" do
76
+ expect(response.status).to eq(403)
77
+ end
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ def get_with_compatibility action, params, session
84
+ if Rails::VERSION::MAJOR <= 4
85
+ get action, params, session
86
+ else
87
+ get action, params: params, session: session
88
+ end
89
+ end
90
+
91
+ end
@@ -0,0 +1,4 @@
1
+ FactoryGirl.define do
2
+ factory :dummy_subscriber, class: Dummy::DummySubscriber do
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+ factory :subscription, class: ActivityNotification::Subscription do
3
+ association :target, factory: :confirmed_user
4
+ key "default.default"
5
+ subscribed_at Time.current
6
+ subscribed_to_email_at Time.current
7
+ end
8
+ end
@@ -38,11 +38,23 @@ describe ActivityNotification::Generators::ControllersGenerator, type: :generato
38
38
  it { is_expected.to exist }
39
39
  it { is_expected.to contain(/class Users::NotificationsWithDeviseController < ActivityNotification::NotificationsWithDeviseController/) }
40
40
  end
41
+
42
+ describe 'the subscriptions_controller' do
43
+ subject { file('app/controllers/users/subscriptions_controller.rb') }
44
+ it { is_expected.to exist }
45
+ it { is_expected.to contain(/class Users::SubscriptionsController < ActivityNotification::SubscriptionsController/) }
46
+ end
47
+
48
+ describe 'the subscriptions_with_devise_controller' do
49
+ subject { file('app/controllers/users/subscriptions_with_devise_controller.rb') }
50
+ it { is_expected.to exist }
51
+ it { is_expected.to contain(/class Users::SubscriptionsWithDeviseController < ActivityNotification::SubscriptionsWithDeviseController/) }
52
+ end
41
53
  end
42
54
 
43
- context 'with a controllers option as notifications' do
55
+ context 'with a controllers option as notifications and subscriptions' do
44
56
  before do
45
- run_generator %w(users --controllers notifications)
57
+ run_generator %w(users --controllers notifications subscriptions)
46
58
  end
47
59
 
48
60
  describe 'the notifications_controller' do
@@ -55,6 +67,17 @@ describe ActivityNotification::Generators::ControllersGenerator, type: :generato
55
67
  subject { file('app/controllers/users/notifications_with_devise_controller.rb') }
56
68
  it { is_expected.not_to exist }
57
69
  end
70
+
71
+ describe 'the subscriptions_controller' do
72
+ subject { file('app/controllers/users/subscriptions_controller.rb') }
73
+ it { is_expected.to exist }
74
+ it { is_expected.to contain(/class Users::SubscriptionsController < ActivityNotification::SubscriptionsController/) }
75
+ end
76
+
77
+ describe 'the subscriptions_with_devise_controller' do
78
+ subject { file('app/controllers/users/subscriptions_with_devise_controller.rb') }
79
+ it { is_expected.not_to exist }
80
+ end
58
81
  end
59
82
  end
60
83
 
@@ -19,15 +19,15 @@ describe ActivityNotification::Generators::MigrationGenerator, type: :generator
19
19
  end
20
20
 
21
21
  describe 'CreateNotifications migration file' do
22
- subject { file(Dir["tmp/db/migrate/*_create_notifications.rb"].first.gsub!('tmp/', '')) }
22
+ subject { file(Dir["tmp/db/migrate/*_create_activity_notification_tables.rb"].first.gsub!('tmp/', '')) }
23
23
  it { is_expected.to exist }
24
- it { is_expected.to contain(/class CreateNotifications < ActiveRecord::Migration/) }
24
+ it { is_expected.to contain(/class CreateActivityNotificationTables < ActiveRecord::Migration/) }
25
25
  end
26
26
  end
27
27
 
28
28
  context 'with CreateCustomNotifications as name argument' do
29
29
  before do
30
- run_generator %w(CreateCustomNotifications)
30
+ run_generator %w(CreateCustomNotifications --tables notifications)
31
31
  end
32
32
 
33
33
  describe 'CreateCustomNotifications migration file' do
@@ -0,0 +1,96 @@
1
+ require 'generators/activity_notification/models_generator'
2
+
3
+ describe ActivityNotification::Generators::ModelsGenerator, type: :generator do
4
+
5
+ # setup_default_destination
6
+ destination File.expand_path("../../../tmp", __FILE__)
7
+ before { prepare_destination }
8
+
9
+ it 'runs generating model tasks' do
10
+ gen = generator %w(users)
11
+ expect(gen).to receive :create_models
12
+ expect(gen).to receive(:readme).and_return(true)
13
+ gen.invoke_all
14
+ end
15
+
16
+ describe 'the generated files' do
17
+ context 'without target argument' do
18
+ it 'raises Thor::RequiredArgumentMissingError' do
19
+ expect { run_generator }
20
+ .to raise_error(Thor::RequiredArgumentMissingError)
21
+ end
22
+ end
23
+
24
+ context 'with users as target' do
25
+ context 'with target models as default' do
26
+ before do
27
+ run_generator %w(users)
28
+ end
29
+
30
+ describe 'the notification' do
31
+ subject { file('app/models/users/notification.rb') }
32
+ it { is_expected.to exist }
33
+ it { is_expected.to contain(/class Users::Notification < ActivityNotification::Notification/) }
34
+ end
35
+
36
+ describe 'the subscription' do
37
+ subject { file('app/models/users/subscription.rb') }
38
+ it { is_expected.to exist }
39
+ it { is_expected.to contain(/class Users::Subscription < ActivityNotification::Subscription/) }
40
+ end
41
+ end
42
+
43
+ context 'with a models option as notification' do
44
+ before do
45
+ run_generator %w(users --models notification)
46
+ end
47
+
48
+ describe 'the notification' do
49
+ subject { file('app/models/users/notification.rb') }
50
+ it { is_expected.to exist }
51
+ it { is_expected.to contain(/class Users::Notification < ActivityNotification::Notification/) }
52
+ end
53
+
54
+ describe 'the subscription' do
55
+ subject { file('app/models/users/subscription.rb') }
56
+ it { is_expected.not_to exist }
57
+ end
58
+ end
59
+
60
+ context 'with a names option as custom_notification and custom_subscription' do
61
+ before do
62
+ run_generator %w(users --names custom_notification custom_subscription)
63
+ end
64
+
65
+ describe 'the notification' do
66
+ subject { file('app/models/users/custom_notification.rb') }
67
+ it { is_expected.to exist }
68
+ it { is_expected.to contain(/class Users::CustomNotification < ActivityNotification::Notification/) }
69
+ end
70
+
71
+ describe 'the subscription' do
72
+ subject { file('app/models/users/custom_subscription.rb') }
73
+ it { is_expected.to exist }
74
+ it { is_expected.to contain(/class Users::CustomSubscription < ActivityNotification::Subscription/) }
75
+ end
76
+ end
77
+
78
+ context 'with a models option as notification and a names option as custom_notification' do
79
+ before do
80
+ run_generator %w(users --models notification --names custom_notification)
81
+ end
82
+
83
+ describe 'the notification' do
84
+ subject { file('app/models/users/custom_notification.rb') }
85
+ it { is_expected.to exist }
86
+ it { is_expected.to contain(/class Users::CustomNotification < ActivityNotification::Notification/) }
87
+ end
88
+
89
+ describe 'the subscription' do
90
+ subject { file('app/models/users/subscription.rb') }
91
+ it { is_expected.not_to exist }
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -57,10 +57,87 @@ describe ActivityNotification::Generators::ViewsGenerator, type: :generator do
57
57
  end
58
58
 
59
59
  describe 'the mailer views' do
60
+ describe 'default/batch_default.html.erb' do
61
+ subject { file('app/views/activity_notification/mailer/default/batch_default.html.erb') }
62
+ it { is_expected.to exist }
63
+ end
64
+
65
+ describe 'default/batch_default.text.erb' do
66
+ subject { file('app/views/activity_notification/mailer/default/batch_default.text.erb') }
67
+ it { is_expected.to exist }
68
+ end
69
+
60
70
  describe 'default/default.html.erb' do
61
71
  subject { file('app/views/activity_notification/mailer/default/default.html.erb') }
62
72
  it { is_expected.to exist }
63
73
  end
74
+
75
+ describe 'default/default.text.erb' do
76
+ subject { file('app/views/activity_notification/mailer/default/default.text.erb') }
77
+ it { is_expected.to exist }
78
+ end
79
+ end
80
+
81
+ describe 'the subscription views' do
82
+ describe 'default/_form.html.erb' do
83
+ subject { file('app/views/activity_notification/subscriptions/default/_form.html.erb') }
84
+ it { is_expected.to exist }
85
+ end
86
+
87
+ describe 'default/_notification_keys.html.erb' do
88
+ subject { file('app/views/activity_notification/subscriptions/default/_notification_keys.html.erb') }
89
+ it { is_expected.to exist }
90
+ end
91
+
92
+ describe 'default/_subscription.html.erb' do
93
+ subject { file('app/views/activity_notification/subscriptions/default/_subscription.html.erb') }
94
+ it { is_expected.to exist }
95
+ end
96
+
97
+ describe 'default/_subscriptions.html.erb' do
98
+ subject { file('app/views/activity_notification/subscriptions/default/_subscriptions.html.erb') }
99
+ it { is_expected.to exist }
100
+ end
101
+
102
+ describe 'default/create.js.erb' do
103
+ subject { file('app/views/activity_notification/subscriptions/default/create.js.erb') }
104
+ it { is_expected.to exist }
105
+ end
106
+
107
+ describe 'default/destroy.js.erb' do
108
+ subject { file('app/views/activity_notification/subscriptions/default/destroy.js.erb') }
109
+ it { is_expected.to exist }
110
+ end
111
+
112
+ describe 'default/index.html.erb' do
113
+ subject { file('app/views/activity_notification/subscriptions/default/index.html.erb') }
114
+ it { is_expected.to exist }
115
+ end
116
+
117
+ describe 'default/show.html.erb' do
118
+ subject { file('app/views/activity_notification/subscriptions/default/show.html.erb') }
119
+ it { is_expected.to exist }
120
+ end
121
+
122
+ describe 'default/subscribe_to_email.js.erb' do
123
+ subject { file('app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb') }
124
+ it { is_expected.to exist }
125
+ end
126
+
127
+ describe 'default/subscribe.js.erb' do
128
+ subject { file('app/views/activity_notification/subscriptions/default/subscribe.js.erb') }
129
+ it { is_expected.to exist }
130
+ end
131
+
132
+ describe 'default/unsubscribe_to_email.js.erb' do
133
+ subject { file('app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb') }
134
+ it { is_expected.to exist }
135
+ end
136
+
137
+ describe 'default/unsubscribe.js.erb' do
138
+ subject { file('app/views/activity_notification/subscriptions/default/unsubscribe.js.erb') }
139
+ it { is_expected.to exist }
140
+ end
64
141
  end
65
142
  end
66
143
 
@@ -104,6 +181,13 @@ describe ActivityNotification::Generators::ViewsGenerator, type: :generator do
104
181
  it { is_expected.to exist }
105
182
  end
106
183
  end
184
+
185
+ describe 'the subscription views' do
186
+ describe 'users/index.html.erb' do
187
+ subject { file('app/views/activity_notification/subscriptions/users/index.html.erb') }
188
+ it { is_expected.to exist }
189
+ end
190
+ end
107
191
  end
108
192
  end
109
193
 
@@ -4,6 +4,9 @@ describe ActivityNotification::ViewHelpers, type: :helper do
4
4
  create(:notification, target: create(:confirmed_user))
5
5
  }
6
6
  let(:target_user) { notification.target }
7
+ let(:subscription) {
8
+ create(:subscription, target: target_user, key: notification.key)
9
+ }
7
10
  let(:notification_2) {
8
11
  create(:notification, target: create(:confirmed_user))
9
12
  }
@@ -304,4 +307,144 @@ describe ActivityNotification::ViewHelpers, type: :helper do
304
307
  end
305
308
  end
306
309
 
310
+ describe '#subscriptions_path_for' do
311
+ it "returns path for the subscription target" do
312
+ expect(subscriptions_path_for(target_user))
313
+ .to eq(user_subscriptions_path(target_user))
314
+ end
315
+ end
316
+
317
+ describe '#subscription_path_for' do
318
+ it "returns path for the subscription target" do
319
+ expect(subscription_path_for(subscription))
320
+ .to eq(user_subscription_path(target_user, subscription))
321
+ end
322
+ end
323
+
324
+ describe '#subscribe_subscription_path_for' do
325
+ it "returns path for the subscription target" do
326
+ expect(subscribe_subscription_path_for(subscription))
327
+ .to eq(subscribe_user_subscription_path(target_user, subscription))
328
+ end
329
+ end
330
+
331
+ describe '#subscribe_path_for' do
332
+ it "returns path for the subscription target" do
333
+ expect(subscribe_path_for(subscription))
334
+ .to eq(subscribe_user_subscription_path(target_user, subscription))
335
+ end
336
+ end
337
+
338
+ describe '#unsubscribe_subscription_path_for' do
339
+ it "returns path for the subscription target" do
340
+ expect(unsubscribe_subscription_path_for(subscription))
341
+ .to eq(unsubscribe_user_subscription_path(target_user, subscription))
342
+ end
343
+ end
344
+
345
+ describe '#unsubscribe_path_for' do
346
+ it "returns path for the subscription target" do
347
+ expect(unsubscribe_path_for(subscription))
348
+ .to eq(unsubscribe_user_subscription_path(target_user, subscription))
349
+ end
350
+ end
351
+
352
+ describe '#subscribe_to_email_subscription_path_for' do
353
+ it "returns path for the subscription target" do
354
+ expect(subscribe_to_email_subscription_path_for(subscription))
355
+ .to eq(subscribe_to_email_user_subscription_path(target_user, subscription))
356
+ end
357
+ end
358
+
359
+ describe '#subscribe_to_email_path_for' do
360
+ it "returns path for the subscription target" do
361
+ expect(subscribe_to_email_path_for(subscription))
362
+ .to eq(subscribe_to_email_user_subscription_path(target_user, subscription))
363
+ end
364
+ end
365
+
366
+ describe '#unsubscribe_to_email_subscription_path_for' do
367
+ it "returns path for the subscription target" do
368
+ expect(unsubscribe_to_email_subscription_path_for(subscription))
369
+ .to eq(unsubscribe_to_email_user_subscription_path(target_user, subscription))
370
+ end
371
+ end
372
+
373
+ describe '#unsubscribe_to_email_path_for' do
374
+ it "returns path for the subscription target" do
375
+ expect(unsubscribe_to_email_path_for(subscription))
376
+ .to eq(unsubscribe_to_email_user_subscription_path(target_user, subscription))
377
+ end
378
+ end
379
+
380
+ describe '#subscriptions_url_for' do
381
+ it "returns url for the subscription target" do
382
+ expect(subscriptions_url_for(target_user))
383
+ .to eq(user_subscriptions_url(target_user))
384
+ end
385
+ end
386
+
387
+ describe '#subscription_url_for' do
388
+ it "returns url for the subscription target" do
389
+ expect(subscription_url_for(subscription))
390
+ .to eq(user_subscription_url(target_user, subscription))
391
+ end
392
+ end
393
+
394
+ describe '#subscribe_subscription_url_for' do
395
+ it "returns url for the subscription target" do
396
+ expect(subscribe_subscription_url_for(subscription))
397
+ .to eq(subscribe_user_subscription_url(target_user, subscription))
398
+ end
399
+ end
400
+
401
+ describe '#subscribe_url_for' do
402
+ it "returns url for the subscription target" do
403
+ expect(subscribe_url_for(subscription))
404
+ .to eq(subscribe_user_subscription_url(target_user, subscription))
405
+ end
406
+ end
407
+
408
+ describe '#unsubscribe_subscription_url_for' do
409
+ it "returns url for the subscription target" do
410
+ expect(unsubscribe_subscription_url_for(subscription))
411
+ .to eq(unsubscribe_user_subscription_url(target_user, subscription))
412
+ end
413
+ end
414
+
415
+ describe '#unsubscribe_url_for' do
416
+ it "returns url for the subscription target" do
417
+ expect(unsubscribe_url_for(subscription))
418
+ .to eq(unsubscribe_user_subscription_url(target_user, subscription))
419
+ end
420
+ end
421
+
422
+ describe '#subscribe_to_email_subscription_url_for' do
423
+ it "returns url for the subscription target" do
424
+ expect(subscribe_to_email_subscription_url_for(subscription))
425
+ .to eq(subscribe_to_email_user_subscription_url(target_user, subscription))
426
+ end
427
+ end
428
+
429
+ describe '#subscribe_to_email_url_for' do
430
+ it "returns url for the subscription target" do
431
+ expect(subscribe_to_email_url_for(subscription))
432
+ .to eq(subscribe_to_email_user_subscription_url(target_user, subscription))
433
+ end
434
+ end
435
+
436
+ describe '#unsubscribe_to_email_subscription_url_for' do
437
+ it "returns url for the subscription target" do
438
+ expect(unsubscribe_to_email_subscription_url_for(subscription))
439
+ .to eq(unsubscribe_to_email_user_subscription_url(target_user, subscription))
440
+ end
441
+ end
442
+
443
+ describe '#unsubscribe_to_email_url_for' do
444
+ it "returns url for the subscription target" do
445
+ expect(unsubscribe_to_email_url_for(subscription))
446
+ .to eq(unsubscribe_to_email_user_subscription_url(target_user, subscription))
447
+ end
448
+ end
449
+
307
450
  end