activity_notification 2.4.1 → 2.5.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 (250) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/app/jobs/activity_notification/cascading_notification_job.rb +123 -0
  4. data/docs/Functions.md +197 -1
  5. data/lib/activity_notification/apis/cascading_notification_api.rb +208 -0
  6. data/lib/activity_notification/apis/notification_api.rb +3 -0
  7. data/lib/activity_notification/config.rb +10 -0
  8. data/lib/activity_notification/mailers/helpers.rb +27 -1
  9. data/lib/activity_notification/version.rb +1 -1
  10. data/lib/generators/templates/activity_notification.rb +8 -0
  11. metadata +5 -441
  12. data/.codeclimate.yml +0 -33
  13. data/.coveralls.yml +0 -1
  14. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -22
  15. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -17
  16. data/.github/pull_request_template.md +0 -13
  17. data/.github/workflows/build.yml +0 -100
  18. data/.gitignore +0 -74
  19. data/.rspec +0 -3
  20. data/.rubocop.yml +0 -1157
  21. data/.yardopts +0 -6
  22. data/CHANGELOG.md +0 -452
  23. data/Gemfile +0 -31
  24. data/Procfile +0 -2
  25. data/Rakefile +0 -28
  26. data/activity_notification.gemspec +0 -44
  27. data/ai-curated-specs/issues/172/design.md +0 -220
  28. data/ai-curated-specs/issues/172/tasks.md +0 -326
  29. data/ai-curated-specs/issues/188/design.md +0 -227
  30. data/ai-curated-specs/issues/188/requirements.md +0 -78
  31. data/ai-curated-specs/issues/188/tasks.md +0 -203
  32. data/ai-curated-specs/issues/188/upstream-contributions.md +0 -592
  33. data/ai-curated-specs/issues/50/design.md +0 -235
  34. data/ai-curated-specs/issues/50/requirements.md +0 -49
  35. data/ai-curated-specs/issues/50/tasks.md +0 -232
  36. data/bin/_dynamodblocal +0 -4
  37. data/bin/bundle_update.sh +0 -7
  38. data/bin/deploy_on_heroku.sh +0 -16
  39. data/bin/install_dynamodblocal.sh +0 -5
  40. data/bin/start_dynamodblocal.sh +0 -47
  41. data/bin/stop_dynamodblocal.sh +0 -34
  42. data/gemfiles/Gemfile.rails-5.0 +0 -25
  43. data/gemfiles/Gemfile.rails-5.1 +0 -25
  44. data/gemfiles/Gemfile.rails-5.2 +0 -24
  45. data/gemfiles/Gemfile.rails-6.0 +0 -23
  46. data/gemfiles/Gemfile.rails-6.1 +0 -22
  47. data/gemfiles/Gemfile.rails-7.0 +0 -25
  48. data/gemfiles/Gemfile.rails-7.1 +0 -23
  49. data/gemfiles/Gemfile.rails-7.2 +0 -23
  50. data/gemfiles/Gemfile.rails-8.0 +0 -24
  51. data/package.json +0 -8
  52. data/spec/channels/notification_api_channel_shared_examples.rb +0 -59
  53. data/spec/channels/notification_api_channel_spec.rb +0 -49
  54. data/spec/channels/notification_api_with_devise_channel_spec.rb +0 -76
  55. data/spec/channels/notification_channel_shared_examples.rb +0 -59
  56. data/spec/channels/notification_channel_spec.rb +0 -48
  57. data/spec/channels/notification_with_devise_channel_spec.rb +0 -97
  58. data/spec/concerns/apis/notification_api_spec.rb +0 -1627
  59. data/spec/concerns/apis/subscription_api_spec.rb +0 -474
  60. data/spec/concerns/common_spec.rb +0 -213
  61. data/spec/concerns/models/group_spec.rb +0 -61
  62. data/spec/concerns/models/notifiable_spec.rb +0 -782
  63. data/spec/concerns/models/notifier_spec.rb +0 -71
  64. data/spec/concerns/models/subscriber_spec.rb +0 -800
  65. data/spec/concerns/models/target_spec.rb +0 -1285
  66. data/spec/concerns/renderable_spec.rb +0 -129
  67. data/spec/config_spec.rb +0 -85
  68. data/spec/controllers/common_controller_spec.rb +0 -25
  69. data/spec/controllers/controller_spec_utility.rb +0 -100
  70. data/spec/controllers/dummy_common_controller.rb +0 -5
  71. data/spec/controllers/notifications_api_controller_shared_examples.rb +0 -619
  72. data/spec/controllers/notifications_api_controller_spec.rb +0 -19
  73. data/spec/controllers/notifications_api_with_devise_controller_spec.rb +0 -60
  74. data/spec/controllers/notifications_controller_shared_examples.rb +0 -743
  75. data/spec/controllers/notifications_controller_spec.rb +0 -11
  76. data/spec/controllers/notifications_with_devise_controller_spec.rb +0 -97
  77. data/spec/controllers/subscriptions_api_controller_shared_examples.rb +0 -750
  78. data/spec/controllers/subscriptions_api_controller_spec.rb +0 -19
  79. data/spec/controllers/subscriptions_api_with_devise_controller_spec.rb +0 -60
  80. data/spec/controllers/subscriptions_controller_shared_examples.rb +0 -946
  81. data/spec/controllers/subscriptions_controller_spec.rb +0 -11
  82. data/spec/controllers/subscriptions_with_devise_controller_spec.rb +0 -97
  83. data/spec/factories/admins.rb +0 -5
  84. data/spec/factories/articles.rb +0 -5
  85. data/spec/factories/comments.rb +0 -6
  86. data/spec/factories/dummy/dummy_group.rb +0 -4
  87. data/spec/factories/dummy/dummy_notifiable.rb +0 -4
  88. data/spec/factories/dummy/dummy_notifier.rb +0 -4
  89. data/spec/factories/dummy/dummy_subscriber.rb +0 -4
  90. data/spec/factories/dummy/dummy_target.rb +0 -4
  91. data/spec/factories/notifications.rb +0 -7
  92. data/spec/factories/subscriptions.rb +0 -8
  93. data/spec/factories/users.rb +0 -11
  94. data/spec/generators/controllers_generator_spec.rb +0 -85
  95. data/spec/generators/install_generator_spec.rb +0 -43
  96. data/spec/generators/migration/migration_generator_spec.rb +0 -80
  97. data/spec/generators/models_generator_spec.rb +0 -96
  98. data/spec/generators/views_generator_spec.rb +0 -195
  99. data/spec/helpers/polymorphic_helpers_spec.rb +0 -89
  100. data/spec/helpers/view_helpers_spec.rb +0 -547
  101. data/spec/jobs/notification_resilience_job_spec.rb +0 -167
  102. data/spec/jobs/notify_all_job_spec.rb +0 -23
  103. data/spec/jobs/notify_job_spec.rb +0 -23
  104. data/spec/jobs/notify_to_job_spec.rb +0 -23
  105. data/spec/mailers/mailer_spec.rb +0 -214
  106. data/spec/mailers/notification_resilience_spec.rb +0 -263
  107. data/spec/models/dummy/dummy_group_spec.rb +0 -10
  108. data/spec/models/dummy/dummy_notifiable_spec.rb +0 -10
  109. data/spec/models/dummy/dummy_notifier_spec.rb +0 -10
  110. data/spec/models/dummy/dummy_subscriber_spec.rb +0 -8
  111. data/spec/models/dummy/dummy_target_spec.rb +0 -10
  112. data/spec/models/notification_spec.rb +0 -472
  113. data/spec/models/subscription_spec.rb +0 -215
  114. data/spec/optional_targets/action_cable_api_channel_spec.rb +0 -34
  115. data/spec/optional_targets/action_cable_channel_spec.rb +0 -41
  116. data/spec/optional_targets/amazon_sns_spec.rb +0 -47
  117. data/spec/optional_targets/base_spec.rb +0 -45
  118. data/spec/optional_targets/slack_spec.rb +0 -44
  119. data/spec/orm/dynamoid_spec.rb +0 -115
  120. data/spec/rails_app/Rakefile +0 -15
  121. data/spec/rails_app/app/assets/config/manifest.js +0 -3
  122. data/spec/rails_app/app/assets/images/.keep +0 -0
  123. data/spec/rails_app/app/assets/javascripts/application.js +0 -3
  124. data/spec/rails_app/app/assets/javascripts/cable.js +0 -12
  125. data/spec/rails_app/app/assets/stylesheets/application.css +0 -15
  126. data/spec/rails_app/app/assets/stylesheets/reset.css +0 -85
  127. data/spec/rails_app/app/assets/stylesheets/style.css +0 -244
  128. data/spec/rails_app/app/controllers/admins_controller.rb +0 -21
  129. data/spec/rails_app/app/controllers/application_controller.rb +0 -5
  130. data/spec/rails_app/app/controllers/articles_controller.rb +0 -67
  131. data/spec/rails_app/app/controllers/comments_controller.rb +0 -36
  132. data/spec/rails_app/app/controllers/concerns/.keep +0 -0
  133. data/spec/rails_app/app/controllers/spa_controller.rb +0 -7
  134. data/spec/rails_app/app/controllers/users/notifications_controller.rb +0 -2
  135. data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +0 -2
  136. data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +0 -2
  137. data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +0 -2
  138. data/spec/rails_app/app/controllers/users_controller.rb +0 -26
  139. data/spec/rails_app/app/helpers/application_helper.rb +0 -2
  140. data/spec/rails_app/app/helpers/devise_helper.rb +0 -2
  141. data/spec/rails_app/app/javascript/App.vue +0 -40
  142. data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +0 -82
  143. data/spec/rails_app/app/javascript/components/Top.vue +0 -98
  144. data/spec/rails_app/app/javascript/components/notifications/Index.vue +0 -200
  145. data/spec/rails_app/app/javascript/components/notifications/Notification.vue +0 -133
  146. data/spec/rails_app/app/javascript/components/notifications/NotificationContent.vue +0 -122
  147. data/spec/rails_app/app/javascript/components/subscriptions/Index.vue +0 -279
  148. data/spec/rails_app/app/javascript/components/subscriptions/NewSubscription.vue +0 -112
  149. data/spec/rails_app/app/javascript/components/subscriptions/NotificationKey.vue +0 -141
  150. data/spec/rails_app/app/javascript/components/subscriptions/Subscription.vue +0 -226
  151. data/spec/rails_app/app/javascript/config/development.js +0 -5
  152. data/spec/rails_app/app/javascript/config/environment.js +0 -7
  153. data/spec/rails_app/app/javascript/config/production.js +0 -5
  154. data/spec/rails_app/app/javascript/config/test.js +0 -5
  155. data/spec/rails_app/app/javascript/packs/application.js +0 -18
  156. data/spec/rails_app/app/javascript/packs/spa.js +0 -14
  157. data/spec/rails_app/app/javascript/router/index.js +0 -73
  158. data/spec/rails_app/app/javascript/store/index.js +0 -37
  159. data/spec/rails_app/app/mailers/.keep +0 -0
  160. data/spec/rails_app/app/mailers/custom_notification_mailer.rb +0 -5
  161. data/spec/rails_app/app/models/admin.rb +0 -35
  162. data/spec/rails_app/app/models/article.rb +0 -54
  163. data/spec/rails_app/app/models/comment.rb +0 -81
  164. data/spec/rails_app/app/models/dummy/dummy_base.rb +0 -11
  165. data/spec/rails_app/app/models/dummy/dummy_group.rb +0 -23
  166. data/spec/rails_app/app/models/dummy/dummy_notifiable.rb +0 -15
  167. data/spec/rails_app/app/models/dummy/dummy_notifiable_target.rb +0 -27
  168. data/spec/rails_app/app/models/dummy/dummy_notifier.rb +0 -15
  169. data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +0 -14
  170. data/spec/rails_app/app/models/dummy/dummy_target.rb +0 -16
  171. data/spec/rails_app/app/models/user.rb +0 -73
  172. data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +0 -1
  173. data/spec/rails_app/app/views/activity_notification/notifications/default/article/_update.html.erb +0 -146
  174. data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_path_test.html.erb +0 -1
  175. data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_test.html.erb +0 -1
  176. data/spec/rails_app/app/views/activity_notification/notifications/users/_custom_index.html.erb +0 -1
  177. data/spec/rails_app/app/views/activity_notification/notifications/users/custom/_test.html.erb +0 -1
  178. data/spec/rails_app/app/views/activity_notification/notifications/users/overridden/custom/_test.html.erb +0 -1
  179. data/spec/rails_app/app/views/activity_notification/optional_targets/admins/amazon_sns/comment/_default.text.erb +0 -10
  180. data/spec/rails_app/app/views/articles/_form.html.erb +0 -24
  181. data/spec/rails_app/app/views/articles/edit.html.erb +0 -8
  182. data/spec/rails_app/app/views/articles/index.html.erb +0 -113
  183. data/spec/rails_app/app/views/articles/new.html.erb +0 -7
  184. data/spec/rails_app/app/views/articles/show.html.erb +0 -49
  185. data/spec/rails_app/app/views/layouts/_header.html.erb +0 -46
  186. data/spec/rails_app/app/views/layouts/application.html.erb +0 -15
  187. data/spec/rails_app/app/views/spa/index.html.erb +0 -2
  188. data/spec/rails_app/babel.config.js +0 -72
  189. data/spec/rails_app/bin/bundle +0 -3
  190. data/spec/rails_app/bin/rails +0 -4
  191. data/spec/rails_app/bin/rake +0 -4
  192. data/spec/rails_app/bin/setup +0 -29
  193. data/spec/rails_app/bin/webpack +0 -18
  194. data/spec/rails_app/bin/webpack-dev-server +0 -18
  195. data/spec/rails_app/config/application.rb +0 -54
  196. data/spec/rails_app/config/boot.rb +0 -5
  197. data/spec/rails_app/config/cable.yml +0 -8
  198. data/spec/rails_app/config/database.yml +0 -36
  199. data/spec/rails_app/config/dynamoid.rb +0 -13
  200. data/spec/rails_app/config/environment.rb +0 -26
  201. data/spec/rails_app/config/environments/development.rb +0 -60
  202. data/spec/rails_app/config/environments/production.rb +0 -85
  203. data/spec/rails_app/config/environments/test.rb +0 -53
  204. data/spec/rails_app/config/initializers/activity_notification.rb +0 -104
  205. data/spec/rails_app/config/initializers/assets.rb +0 -11
  206. data/spec/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  207. data/spec/rails_app/config/initializers/cookies_serializer.rb +0 -3
  208. data/spec/rails_app/config/initializers/copy_it.aws.rb.template +0 -6
  209. data/spec/rails_app/config/initializers/devise.rb +0 -278
  210. data/spec/rails_app/config/initializers/devise_token_auth.rb +0 -55
  211. data/spec/rails_app/config/initializers/filter_parameter_logging.rb +0 -4
  212. data/spec/rails_app/config/initializers/inflections.rb +0 -16
  213. data/spec/rails_app/config/initializers/mime_types.rb +0 -4
  214. data/spec/rails_app/config/initializers/mysql.rb +0 -9
  215. data/spec/rails_app/config/initializers/session_store.rb +0 -3
  216. data/spec/rails_app/config/initializers/wrap_parameters.rb +0 -14
  217. data/spec/rails_app/config/initializers/zeitwerk.rb +0 -10
  218. data/spec/rails_app/config/locales/activity_notification.en.yml +0 -26
  219. data/spec/rails_app/config/locales/devise.en.yml +0 -62
  220. data/spec/rails_app/config/mongoid.yml +0 -13
  221. data/spec/rails_app/config/routes.rb +0 -50
  222. data/spec/rails_app/config/secrets.yml +0 -22
  223. data/spec/rails_app/config/webpack/development.js +0 -5
  224. data/spec/rails_app/config/webpack/environment.js +0 -7
  225. data/spec/rails_app/config/webpack/loaders/vue.js +0 -6
  226. data/spec/rails_app/config/webpack/production.js +0 -5
  227. data/spec/rails_app/config/webpack/test.js +0 -5
  228. data/spec/rails_app/config/webpacker.yml +0 -97
  229. data/spec/rails_app/config.ru +0 -4
  230. data/spec/rails_app/db/migrate/20160716000000_create_test_tables.rb +0 -42
  231. data/spec/rails_app/db/migrate/20181209000000_create_activity_notification_tables.rb +0 -33
  232. data/spec/rails_app/db/migrate/20191201000000_add_tokens_to_users.rb +0 -10
  233. data/spec/rails_app/db/schema.rb +0 -98
  234. data/spec/rails_app/db/seeds.rb +0 -95
  235. data/spec/rails_app/lib/custom_optional_targets/console_output.rb +0 -16
  236. data/spec/rails_app/lib/custom_optional_targets/raise_error.rb +0 -14
  237. data/spec/rails_app/lib/custom_optional_targets/wrong_target.rb +0 -13
  238. data/spec/rails_app/lib/mailer_previews/mailer_preview.rb +0 -29
  239. data/spec/rails_app/package.json +0 -23
  240. data/spec/rails_app/postcss.config.js +0 -12
  241. data/spec/rails_app/public/404.html +0 -67
  242. data/spec/rails_app/public/422.html +0 -67
  243. data/spec/rails_app/public/500.html +0 -66
  244. data/spec/rails_app/public/favicon.ico +0 -0
  245. data/spec/roles/acts_as_group_spec.rb +0 -30
  246. data/spec/roles/acts_as_notifiable_spec.rb +0 -432
  247. data/spec/roles/acts_as_notifier_spec.rb +0 -30
  248. data/spec/roles/acts_as_target_spec.rb +0 -36
  249. data/spec/spec_helper.rb +0 -56
  250. data/spec/version_spec.rb +0 -31
@@ -1,474 +0,0 @@
1
- shared_examples_for :subscription_api do
2
- include ActiveJob::TestHelper
3
- let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
4
- let(:test_instance) { create(test_class_name) }
5
-
6
- describe "as public class methods" do
7
- describe ".to_optional_target_key" do
8
- it "returns optional target key" do
9
- expect(described_class.to_optional_target_key(:console_output)).to eq(:subscribing_to_console_output)
10
- end
11
- end
12
-
13
- describe ".to_optional_target_subscribed_at_key" do
14
- it "returns optional target subscribed_at key" do
15
- expect(described_class.to_optional_target_subscribed_at_key(:console_output)).to eq(:subscribed_to_console_output_at)
16
- end
17
- end
18
-
19
- describe ".to_optional_target_unsubscribed_at_key" do
20
- it "returns optional target unsubscribed_at key" do
21
- expect(described_class.to_optional_target_unsubscribed_at_key(:console_output)).to eq(:unsubscribed_to_console_output_at)
22
- end
23
- end
24
- end
25
-
26
- describe "as public instance methods" do
27
- describe "#subscribe" do
28
- before do
29
- test_instance.unsubscribe
30
- end
31
-
32
- it "returns if successfully updated subscription instance" do
33
- expect(test_instance.subscribe).to be_truthy
34
- end
35
-
36
- context "as default" do
37
- it "subscribe with current time" do
38
- expect(test_instance.subscribing?).to eq(false)
39
- expect(test_instance.subscribing_to_email?).to eq(false)
40
- Timecop.freeze(Time.at(Time.now.to_i))
41
- test_instance.subscribe
42
- expect(test_instance.subscribing?).to eq(true)
43
- expect(test_instance.subscribing_to_email?).to eq(true)
44
- expect(test_instance.subscribed_at).to eq(Time.current)
45
- expect(test_instance.subscribed_to_email_at).to eq(Time.current)
46
- Timecop.return
47
- end
48
-
49
- context "with true as ActivityNotification.config.subscribe_to_email_as_default" do
50
- it "subscribe with current time" do
51
- ActivityNotification.config.subscribe_to_email_as_default = true
52
-
53
- expect(test_instance.subscribing?).to eq(false)
54
- expect(test_instance.subscribing_to_email?).to eq(false)
55
- Timecop.freeze(Time.at(Time.now.to_i))
56
- test_instance.subscribe
57
- expect(test_instance.subscribing?).to eq(true)
58
- expect(test_instance.subscribing_to_email?).to eq(true)
59
- expect(test_instance.subscribed_at).to eq(Time.current)
60
- expect(test_instance.subscribed_to_email_at).to eq(Time.current)
61
- Timecop.return
62
-
63
- ActivityNotification.config.subscribe_to_email_as_default = nil
64
- end
65
- end
66
-
67
- context "with false as ActivityNotification.config.subscribe_to_email_as_default" do
68
- it "subscribe with current time" do
69
- ActivityNotification.config.subscribe_to_email_as_default = false
70
-
71
- expect(test_instance.subscribing?).to eq(false)
72
- expect(test_instance.subscribing_to_email?).to eq(false)
73
- Timecop.freeze(Time.at(Time.now.to_i))
74
- test_instance.subscribe
75
- expect(test_instance.subscribing?).to eq(true)
76
- expect(test_instance.subscribing_to_email?).to eq(false)
77
- expect(test_instance.subscribed_at).to eq(Time.current)
78
- Timecop.return
79
-
80
- ActivityNotification.config.subscribe_to_email_as_default = nil
81
- end
82
- end
83
- end
84
-
85
- context "with subscribed_at option" do
86
- it "subscribe with specified time" do
87
- expect(test_instance.subscribing?).to eq(false)
88
- expect(test_instance.subscribing_to_email?).to eq(false)
89
- subscribed_at = Time.current - 1.months
90
- test_instance.subscribe(subscribed_at: subscribed_at)
91
- expect(test_instance.subscribing?).to eq(true)
92
- expect(test_instance.subscribing_to_email?).to eq(true)
93
- expect(test_instance.subscribed_at.to_i).to eq(subscribed_at.to_i)
94
- expect(test_instance.subscribed_to_email_at.to_i).to eq(subscribed_at.to_i)
95
- end
96
-
97
- context "with true as ActivityNotification.config.subscribe_to_email_as_default" do
98
- it "subscribe with current time" do
99
- ActivityNotification.config.subscribe_to_email_as_default = true
100
-
101
- expect(test_instance.subscribing?).to eq(false)
102
- expect(test_instance.subscribing_to_email?).to eq(false)
103
- subscribed_at = Time.current - 1.months
104
- test_instance.subscribe(subscribed_at: subscribed_at)
105
- expect(test_instance.subscribing?).to eq(true)
106
- expect(test_instance.subscribing_to_email?).to eq(true)
107
- expect(test_instance.subscribed_at.to_i).to eq(subscribed_at.to_i)
108
- expect(test_instance.subscribed_to_email_at.to_i).to eq(subscribed_at.to_i)
109
-
110
- ActivityNotification.config.subscribe_to_email_as_default = nil
111
- end
112
- end
113
-
114
- context "with false as ActivityNotification.config.subscribe_to_email_as_default" do
115
- it "subscribe with current time" do
116
- ActivityNotification.config.subscribe_to_email_as_default = false
117
-
118
- expect(test_instance.subscribing?).to eq(false)
119
- expect(test_instance.subscribing_to_email?).to eq(false)
120
- subscribed_at = Time.current - 1.months
121
- test_instance.subscribe(subscribed_at: subscribed_at)
122
- expect(test_instance.subscribing?).to eq(true)
123
- expect(test_instance.subscribing_to_email?).to eq(false)
124
- expect(test_instance.subscribed_at.to_i).to eq(subscribed_at.to_i)
125
-
126
- ActivityNotification.config.subscribe_to_email_as_default = nil
127
- end
128
- end
129
- end
130
-
131
- context "with false as with_email_subscription" do
132
- it "does not subscribe to email" do
133
- expect(test_instance.subscribing?).to eq(false)
134
- expect(test_instance.subscribing_to_email?).to eq(false)
135
- test_instance.subscribe(with_email_subscription: false)
136
- expect(test_instance.subscribing?).to eq(true)
137
- expect(test_instance.subscribing_to_email?).to eq(false)
138
- end
139
- end
140
-
141
- context "with optional targets" do
142
- it "also subscribes to optional targets" do
143
- test_instance.unsubscribe_to_optional_target(:console_output)
144
- expect(test_instance.subscribing?).to eq(false)
145
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
146
- test_instance.subscribe
147
- expect(test_instance.subscribing?).to eq(true)
148
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
149
- end
150
-
151
- context "with true as ActivityNotification.config.subscribe_to_optional_targets_as_default" do
152
- it "also subscribes to optional targets" do
153
- ActivityNotification.config.subscribe_to_optional_targets_as_default = true
154
-
155
- test_instance.unsubscribe_to_optional_target(:console_output)
156
- expect(test_instance.subscribing?).to eq(false)
157
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
158
- test_instance.subscribe
159
- expect(test_instance.subscribing?).to eq(true)
160
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
161
-
162
- ActivityNotification.config.subscribe_to_optional_targets_as_default = nil
163
- end
164
- end
165
-
166
- context "with false as ActivityNotification.config.subscribe_to_optional_targets_as_default" do
167
- it "does not subscribe to optional targets" do
168
- ActivityNotification.config.subscribe_to_optional_targets_as_default = false
169
-
170
- test_instance.unsubscribe_to_optional_target(:console_output)
171
- expect(test_instance.subscribing?).to eq(false)
172
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
173
- test_instance.subscribe
174
- expect(test_instance.subscribing?).to eq(true)
175
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
176
-
177
- ActivityNotification.config.subscribe_to_optional_targets_as_default = nil
178
- end
179
- end
180
- end
181
-
182
- context "with false as with_optional_targets" do
183
- it "does not subscribe to optional targets" do
184
- test_instance.unsubscribe_to_optional_target(:console_output)
185
- expect(test_instance.subscribing?).to eq(false)
186
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
187
- test_instance.subscribe(with_optional_targets: false)
188
- expect(test_instance.subscribing?).to eq(true)
189
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
190
- end
191
- end
192
- end
193
-
194
- describe "#unsubscribe" do
195
- it "returns if successfully updated subscription instance" do
196
- expect(test_instance.subscribe).to be_truthy
197
- end
198
-
199
- context "as default" do
200
- it "unsubscribe with current time" do
201
- expect(test_instance.subscribing?).to eq(true)
202
- expect(test_instance.subscribing_to_email?).to eq(true)
203
- Timecop.freeze(Time.at(Time.now.to_i))
204
- test_instance.unsubscribe
205
- expect(test_instance.subscribing?).to eq(false)
206
- expect(test_instance.subscribing_to_email?).to eq(false)
207
- expect(test_instance.unsubscribed_at).to eq(Time.current)
208
- expect(test_instance.unsubscribed_to_email_at).to eq(Time.current)
209
- Timecop.return
210
- end
211
- end
212
-
213
- context "with unsubscribed_at option" do
214
- it "unsubscribe with specified time" do
215
- expect(test_instance.subscribing?).to eq(true)
216
- expect(test_instance.subscribing_to_email?).to eq(true)
217
- unsubscribed_at = Time.current - 1.months
218
- test_instance.unsubscribe(unsubscribed_at: unsubscribed_at)
219
- expect(test_instance.subscribing?).to eq(false)
220
- expect(test_instance.subscribing_to_email?).to eq(false)
221
- expect(test_instance.unsubscribed_at.to_i).to eq(unsubscribed_at.to_i)
222
- expect(test_instance.unsubscribed_to_email_at.to_i).to eq(unsubscribed_at.to_i)
223
- end
224
- end
225
- end
226
-
227
- describe "#subscribe_to_email" do
228
- before do
229
- test_instance.unsubscribe_to_email
230
- end
231
-
232
- context "for subscribing instance" do
233
- it "returns true as successfully updated subscription instance" do
234
- expect(test_instance.subscribing?).to eq(true)
235
- expect(test_instance.subscribing_to_email?).to eq(false)
236
- expect(test_instance.subscribe_to_email).to be_truthy
237
- end
238
- end
239
-
240
- context "for not subscribing instance" do
241
- it "returns false as failure to update subscription instance" do
242
- test_instance.unsubscribe
243
- expect(test_instance.subscribing?).to eq(false)
244
- expect(test_instance.subscribing_to_email?).to eq(false)
245
- expect(test_instance.subscribe_to_email).to be_falsey
246
- end
247
- end
248
-
249
- context "as default" do
250
- it "subscribe_to_email with current time" do
251
- expect(test_instance.subscribing?).to eq(true)
252
- expect(test_instance.subscribing_to_email?).to eq(false)
253
- Timecop.freeze(Time.at(Time.now.to_i))
254
- test_instance.subscribe_to_email
255
- expect(test_instance.subscribing?).to eq(true)
256
- expect(test_instance.subscribing_to_email?).to eq(true)
257
- expect(test_instance.subscribed_to_email_at).to eq(Time.current)
258
- Timecop.return
259
- end
260
- end
261
-
262
- context "with subscribed_to_email_at option" do
263
- it "subscribe with specified time" do
264
- expect(test_instance.subscribing?).to eq(true)
265
- expect(test_instance.subscribing_to_email?).to eq(false)
266
- subscribed_to_email_at = Time.current - 1.months
267
- test_instance.subscribe_to_email(subscribed_to_email_at: subscribed_to_email_at)
268
- expect(test_instance.subscribing?).to eq(true)
269
- expect(test_instance.subscribing_to_email?).to eq(true)
270
- expect(test_instance.subscribed_to_email_at.to_i).to eq(subscribed_to_email_at.to_i)
271
- end
272
- end
273
- end
274
-
275
- describe "#unsubscribe_to_email" do
276
- it "returns if successfully updated subscription instance" do
277
- expect(test_instance.unsubscribe_to_email).to be_truthy
278
- end
279
-
280
- context "as default" do
281
- it "unsubscribe_to_email with current time" do
282
- expect(test_instance.subscribing?).to eq(true)
283
- expect(test_instance.subscribing_to_email?).to eq(true)
284
- Timecop.freeze(Time.at(Time.now.to_i))
285
- test_instance.unsubscribe_to_email
286
- expect(test_instance.subscribing?).to eq(true)
287
- expect(test_instance.subscribing_to_email?).to eq(false)
288
- expect(test_instance.unsubscribed_to_email_at).to eq(Time.current)
289
- Timecop.return
290
- end
291
- end
292
-
293
- context "with unsubscribed_to_email_at option" do
294
- it "unsubscribe with specified time" do
295
- expect(test_instance.subscribing?).to eq(true)
296
- expect(test_instance.subscribing_to_email?).to eq(true)
297
- unsubscribed_to_email_at = Time.current - 1.months
298
- test_instance.unsubscribe_to_email(unsubscribed_to_email_at: unsubscribed_to_email_at)
299
- expect(test_instance.subscribing?).to eq(true)
300
- expect(test_instance.subscribing_to_email?).to eq(false)
301
- expect(test_instance.unsubscribed_to_email_at.to_i).to eq(unsubscribed_to_email_at.to_i)
302
- end
303
- end
304
- end
305
-
306
- describe "#subscribing_to_optional_target?" do
307
- before do
308
- test_instance.update(optional_targets: {})
309
- end
310
-
311
- context "without configured optional target subscription" do
312
- context "without subscribe_as_default argument" do
313
- context "with true as ActivityNotification.config.subscribe_as_default" do
314
- it "returns true" do
315
- subscribe_as_default = ActivityNotification.config.subscribe_as_default
316
- ActivityNotification.config.subscribe_as_default = true
317
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_truthy
318
- ActivityNotification.config.subscribe_as_default = subscribe_as_default
319
- end
320
-
321
- context "with true as ActivityNotification.config.subscribe_to_optional_targets_as_default" do
322
- it "returns true" do
323
- subscribe_as_default = ActivityNotification.config.subscribe_as_default
324
- ActivityNotification.config.subscribe_as_default = true
325
- ActivityNotification.config.subscribe_to_optional_targets_as_default = true
326
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_truthy
327
- ActivityNotification.config.subscribe_as_default = subscribe_as_default
328
- ActivityNotification.config.subscribe_to_optional_targets_as_default = nil
329
- end
330
- end
331
-
332
- context "with false as ActivityNotification.config.subscribe_to_optional_targets_as_default" do
333
- it "returns false" do
334
- subscribe_as_default = ActivityNotification.config.subscribe_as_default
335
- ActivityNotification.config.subscribe_as_default = true
336
- ActivityNotification.config.subscribe_to_optional_targets_as_default = false
337
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_falsey
338
- ActivityNotification.config.subscribe_as_default = subscribe_as_default
339
- ActivityNotification.config.subscribe_to_optional_targets_as_default = nil
340
- end
341
- end
342
- end
343
-
344
- context "with false as ActivityNotification.config.subscribe_as_default" do
345
- it "returns false" do
346
- subscribe_as_default = ActivityNotification.config.subscribe_as_default
347
- ActivityNotification.config.subscribe_as_default = false
348
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_falsey
349
- ActivityNotification.config.subscribe_as_default = subscribe_as_default
350
- end
351
-
352
- context "with true as ActivityNotification.config.subscribe_to_optional_targets_as_default" do
353
- it "returns false" do
354
- subscribe_as_default = ActivityNotification.config.subscribe_as_default
355
- ActivityNotification.config.subscribe_as_default = false
356
- ActivityNotification.config.subscribe_to_optional_targets_as_default = true
357
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_falsey
358
- ActivityNotification.config.subscribe_as_default = subscribe_as_default
359
- ActivityNotification.config.subscribe_to_optional_targets_as_default = nil
360
- end
361
- end
362
-
363
- context "with false as ActivityNotification.config.subscribe_to_optional_targets_as_default" do
364
- it "returns false" do
365
- subscribe_as_default = ActivityNotification.config.subscribe_as_default
366
- ActivityNotification.config.subscribe_as_default = false
367
- ActivityNotification.config.subscribe_to_optional_targets_as_default = false
368
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_falsey
369
- ActivityNotification.config.subscribe_as_default = subscribe_as_default
370
- ActivityNotification.config.subscribe_to_optional_targets_as_default = nil
371
- end
372
- end
373
- end
374
- end
375
- end
376
-
377
- context "with configured subscription" do
378
- context "subscribing to optional target" do
379
- it "returns true" do
380
- test_instance.subscribe_to_optional_target(:console_output)
381
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_truthy
382
- end
383
- end
384
-
385
- context "unsubscribed to optional target" do
386
- it "returns false" do
387
- test_instance.unsubscribe_to_optional_target(:console_output)
388
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to be_falsey
389
- end
390
- end
391
- end
392
- end
393
-
394
- describe "#subscribe_to_optional_target" do
395
- before do
396
- test_instance.unsubscribe_to_optional_target(:console_output)
397
- end
398
-
399
- context "for subscribing instance" do
400
- it "returns true as successfully updated subscription instance" do
401
- expect(test_instance.subscribing?).to eq(true)
402
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
403
- expect(test_instance.subscribe_to_optional_target(:console_output)).to be_truthy
404
- end
405
- end
406
-
407
- context "for not subscribing instance" do
408
- it "returns false as failure to update subscription instance" do
409
- test_instance.unsubscribe
410
- expect(test_instance.subscribing?).to eq(false)
411
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
412
- expect(test_instance.subscribe_to_optional_target(:console_output)).to be_falsey
413
- end
414
- end
415
-
416
- context "as default" do
417
- it "subscribe_to_optional_target with current time" do
418
- expect(test_instance.subscribing?).to eq(true)
419
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
420
- Timecop.freeze(Time.at(Time.now.to_i))
421
- test_instance.subscribe_to_optional_target(:console_output)
422
- expect(test_instance.subscribing?).to eq(true)
423
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
424
- expect(test_instance.optional_targets[:subscribed_to_console_output_at]).to eq(ActivityNotification::Subscription.convert_time_as_hash(Time.current))
425
- Timecop.return
426
- end
427
- end
428
-
429
- context "with subscribed_at option" do
430
- it "subscribe with specified time" do
431
- expect(test_instance.subscribing?).to eq(true)
432
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
433
- subscribed_at = Time.current - 1.months
434
- test_instance.subscribe_to_optional_target(:console_output, subscribed_at: subscribed_at)
435
- expect(test_instance.subscribing?).to eq(true)
436
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
437
- expect(test_instance.optional_targets[:subscribed_to_console_output_at].to_i).to eq(subscribed_at.to_i)
438
- end
439
- end
440
- end
441
-
442
- describe "#unsubscribe_to_optional_target" do
443
- it "returns if successfully updated subscription instance" do
444
- expect(test_instance.unsubscribe_to_optional_target(:console_output)).to be_truthy
445
- end
446
-
447
- context "as default" do
448
- it "unsubscribe_to_optional_target with current time" do
449
- expect(test_instance.subscribing?).to eq(true)
450
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
451
- Timecop.freeze(Time.at(Time.now.to_i))
452
- test_instance.unsubscribe_to_optional_target(:console_output)
453
- expect(test_instance.subscribing?).to eq(true)
454
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
455
- expect(test_instance.optional_targets[:unsubscribed_to_console_output_at]).to eq(ActivityNotification::Subscription.convert_time_as_hash(Time.current))
456
- Timecop.return
457
- end
458
- end
459
-
460
- context "with unsubscribed_at option" do
461
- it "unsubscribe with specified time" do
462
- expect(test_instance.subscribing?).to eq(true)
463
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(true)
464
- unsubscribed_at = Time.current - 1.months
465
- test_instance.unsubscribe_to_optional_target(:console_output, unsubscribed_at: unsubscribed_at)
466
- expect(test_instance.subscribing?).to eq(true)
467
- expect(test_instance.subscribing_to_optional_target?(:console_output)).to eq(false)
468
- expect(test_instance.optional_targets[:unsubscribed_to_console_output_at].to_i).to eq(unsubscribed_at.to_i)
469
- end
470
- end
471
- end
472
-
473
- end
474
- end
@@ -1,213 +0,0 @@
1
- shared_examples_for :common do
2
- let(:test_class_name) { described_class.to_s.underscore.split('/').last.to_sym }
3
- let(:test_instance) { create(test_class_name) }
4
-
5
- describe "as public ActivityNotification methods with described class" do
6
- describe ".resolve_value" do
7
- before do
8
- allow(ActivityNotification).to receive(:get_controller).and_return('StubController')
9
- end
10
-
11
- context "with value" do
12
- it "returns specified value" do
13
- expect(ActivityNotification.resolve_value(test_instance, 1)).to eq(1)
14
- end
15
- end
16
-
17
- context "with Symbol" do
18
- it "returns specified symbol without arguments" do
19
- module AdditionalMethods
20
- def custom_method
21
- 1
22
- end
23
- end
24
- test_instance.extend(AdditionalMethods)
25
- expect(ActivityNotification.resolve_value(test_instance, :custom_method)).to eq(1)
26
- end
27
-
28
- it "returns specified symbol with controller arguments" do
29
- module AdditionalMethods
30
- def custom_method(controller)
31
- controller == 'StubController' ? 1 : 0
32
- end
33
- end
34
- test_instance.extend(AdditionalMethods)
35
- expect(ActivityNotification.resolve_value(test_instance, :custom_method)).to eq(1)
36
- end
37
-
38
- it "returns specified symbol with controller and additional arguments" do
39
- module AdditionalMethods
40
- def custom_method(controller, key)
41
- controller == 'StubController' and key == 'test1.key' ? 1 : 0
42
- end
43
- end
44
- test_instance.extend(AdditionalMethods)
45
- expect(ActivityNotification.resolve_value(test_instance, :custom_method, 'test1.key')).to eq(1)
46
- expect(ActivityNotification.resolve_value(test_instance, :custom_method, 'test2.key')).to eq(0)
47
- end
48
-
49
- it "returns specified symbol with controller and additional arguments including hash as last argument" do
50
- module AdditionalMethods
51
- def custom_method(controller, key, options:)
52
- controller == 'StubController' and key == 'test1.key' ? 1 : 0
53
- end
54
- end
55
- test_instance.extend(AdditionalMethods)
56
- expect(ActivityNotification.resolve_value(test_instance, :custom_method, 'test1.key', options: 1)).to eq(1)
57
- expect(ActivityNotification.resolve_value(test_instance, :custom_method, 'test2.key', options: 1)).to eq(0)
58
- end
59
- end
60
-
61
- context "with Proc" do
62
- it "returns specified lambda without argument" do
63
- test_proc = ->{ 1 }
64
- expect(ActivityNotification.resolve_value(test_instance, test_proc)).to eq(1)
65
- end
66
-
67
- it "returns specified lambda with context(model) arguments" do
68
- test_proc = ->(model){ model == test_instance ? 1 : 0 }
69
- expect(ActivityNotification.resolve_value(test_instance, test_proc)).to eq(1)
70
- end
71
-
72
- it "returns specified lambda with controller and context(model) arguments" do
73
- test_proc = ->(controller, model){ controller == 'StubController' and model == test_instance ? 1 : 0 }
74
- expect(ActivityNotification.resolve_value(test_instance, test_proc)).to eq(1)
75
- end
76
-
77
- it "returns specified lambda with controller, context(model) and additional arguments" do
78
- test_proc = ->(controller, model, key){ controller == 'StubController' and model == test_instance and key == 'test1.key' ? 1 : 0 }
79
- expect(ActivityNotification.resolve_value(test_instance, test_proc, 'test1.key')).to eq(1)
80
- expect(ActivityNotification.resolve_value(test_instance, test_proc, 'test2.key')).to eq(0)
81
- end
82
- end
83
-
84
- context "with Hash" do
85
- it "returns resolve_value for each entry of hash" do
86
- module AdditionalMethods
87
- def custom_method(controller)
88
- controller == 'StubController' ? 2 : 0
89
- end
90
- end
91
- test_instance.extend(AdditionalMethods)
92
- test_hash = {
93
- key1: 1,
94
- key2: :custom_method,
95
- key3: ->(controller, model){ 3 }
96
- }
97
- expect(ActivityNotification.resolve_value(test_instance, test_hash)).to eq({ key1: 1, key2: 2, key3: 3 })
98
- end
99
- end
100
- end
101
- end
102
-
103
- describe "as public instance methods" do
104
- describe "#resolve_value" do
105
- context "with value" do
106
- it "returns specified value" do
107
- expect(test_instance.resolve_value(1)).to eq(1)
108
- end
109
- end
110
-
111
- context "with Symbol" do
112
- it "returns specified symbol without arguments" do
113
- module AdditionalMethods
114
- def custom_method
115
- 1
116
- end
117
- end
118
- test_instance.extend(AdditionalMethods)
119
- expect(test_instance.resolve_value(:custom_method)).to eq(1)
120
- end
121
-
122
- it "returns specified symbol with additional arguments" do
123
- module AdditionalMethods
124
- def custom_method(key)
125
- key == 'test1.key' ? 1 : 0
126
- end
127
- end
128
- test_instance.extend(AdditionalMethods)
129
- expect(test_instance.resolve_value(:custom_method, 'test1.key')).to eq(1)
130
- expect(test_instance.resolve_value(:custom_method, 'test2.key')).to eq(0)
131
- end
132
-
133
- it "returns specified symbol with additional arguments including hash as last argument" do
134
- module AdditionalMethods
135
- def custom_method(key, options:)
136
- key == 'test1.key' ? 1 : 0
137
- end
138
- end
139
- test_instance.extend(AdditionalMethods)
140
- expect(test_instance.resolve_value(:custom_method, 'test1.key', options: 1)).to eq(1)
141
- expect(test_instance.resolve_value(:custom_method, 'test2.key', options: 1)).to eq(0)
142
- end
143
- end
144
-
145
- context "with Proc" do
146
- it "returns specified lambda with context(model) argument" do
147
- test_proc = ->(model){ model == test_instance ? 1 : 0 }
148
- expect(test_instance.resolve_value(test_proc)).to eq(1)
149
- end
150
-
151
- it "returns specified lambda with context(model) and additional arguments" do
152
- test_proc = ->(model, key){ model == test_instance and key == 'test1.key' ? 1 : 0 }
153
- expect(test_instance.resolve_value(test_proc, 'test1.key')).to eq(1)
154
- expect(test_instance.resolve_value(test_proc, 'test2.key')).to eq(0)
155
- end
156
- end
157
-
158
- context "with Hash" do
159
- it "returns resolve_value for each entry of hash" do
160
- module AdditionalMethods
161
- def custom_method
162
- 2
163
- end
164
- end
165
- test_instance.extend(AdditionalMethods)
166
- test_hash = {
167
- key1: 1,
168
- key2: :custom_method,
169
- key3: ->(model){ model == test_instance ? 3 : 0 }
170
- }
171
- expect(test_instance.resolve_value(test_hash)).to eq({ key1: 1, key2: 2, key3: 3 })
172
- end
173
- end
174
- end
175
-
176
- describe "#to_class_name" do
177
- it "returns resource name" do
178
- expect(create(:user).to_class_name).to eq 'User'
179
- expect(test_instance.to_class_name).to eq test_instance.class.name
180
- end
181
- end
182
-
183
- describe "#to_resource_name" do
184
- it "returns singularized model name (resource name)" do
185
- expect(create(:user).to_resource_name).to eq 'user'
186
- expect(test_instance.to_resource_name).to eq test_instance.class.name.demodulize.singularize.underscore
187
- end
188
- end
189
-
190
- describe "#to_resources_name" do
191
- it "returns pluralized model name (resources name)" do
192
- expect(create(:user).to_resources_name).to eq 'users'
193
- expect(test_instance.to_resources_name).to eq test_instance.class.name.demodulize.pluralize.underscore
194
- end
195
- end
196
-
197
- describe "#printable_type" do
198
- it "returns printable model type name to be humanized" do
199
- expect(create(:user).printable_type).to eq 'User'
200
- expect(test_instance.printable_type).to eq test_instance.class.name.demodulize.humanize
201
- end
202
- end
203
-
204
- describe "#printable_name" do
205
- it "returns printable model name to show in view or email" do
206
- user = create(:user)
207
- expect(user.printable_name).to eq "User (#{user.id})"
208
- expect(test_instance.printable_name).to eq "#{test_instance.printable_type} (#{test_instance.id})"
209
- end
210
- end
211
- end
212
-
213
- end