solidus_subscriptions 1.0.0 → 1.0.1

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +57 -9
  3. data/.github/dependabot.yml +7 -0
  4. data/.rubocop.yml +3 -0
  5. data/CHANGELOG.md +201 -169
  6. data/Gemfile +14 -1
  7. data/README.md +17 -7
  8. data/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb +24 -0
  9. data/app/controllers/spree/admin/subscriptions_controller.rb +32 -4
  10. data/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb +2 -2
  11. data/app/jobs/solidus_subscriptions/create_subscription_job.rb +11 -0
  12. data/app/jobs/solidus_subscriptions/process_installment_job.rb +1 -1
  13. data/app/models/solidus_subscriptions/subscription.rb +75 -31
  14. data/app/subscribers/solidus_subscriptions/churn_buster_subscriber.rb +1 -0
  15. data/app/subscribers/solidus_subscriptions/event_storage_subscriber.rb +1 -0
  16. data/app/subscribers/solidus_subscriptions/order_subscriber.rb +16 -0
  17. data/app/views/spree/admin/shared/_subscription_actions.html.erb +27 -8
  18. data/app/views/spree/admin/shared/_subscription_sidebar.html.erb +2 -0
  19. data/app/views/spree/admin/subscriptions/_state_pill.html.erb +3 -2
  20. data/app/views/spree/admin/subscriptions/index.html.erb +50 -13
  21. data/bin/sandbox +1 -6
  22. data/config/locales/en.yml +16 -0
  23. data/config/routes.rb +9 -3
  24. data/db/migrate/20210905145955_add_paused_to_subscriptions.rb +5 -0
  25. data/lib/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb +14 -0
  26. data/lib/generators/solidus_subscriptions/install/install_generator.rb +16 -0
  27. data/lib/generators/solidus_subscriptions/install/templates/app/controllers/concerns/create_subscription.rb +17 -0
  28. data/lib/generators/solidus_subscriptions/install/templates/app/views/cart_line_items/_subscription_fields.html.erb +30 -0
  29. data/lib/generators/solidus_subscriptions/install/templates/initializer.rb +3 -1
  30. data/lib/solidus_subscriptions/configuration.rb +29 -6
  31. data/lib/solidus_subscriptions/dispatcher/payment_failed_dispatcher.rb +2 -2
  32. data/lib/solidus_subscriptions/dispatcher/success_dispatcher.rb +2 -2
  33. data/lib/solidus_subscriptions/engine.rb +28 -0
  34. data/lib/solidus_subscriptions/permission_sets/default_customer.rb +1 -1
  35. data/lib/solidus_subscriptions/processing_error_handlers/rails_logger.rb +25 -0
  36. data/lib/solidus_subscriptions/subscription_generator.rb +6 -0
  37. data/lib/solidus_subscriptions/version.rb +1 -1
  38. data/solidus_subscriptions.gemspec +6 -6
  39. data/spec/controllers/spree/api/line_items_controller_spec.rb +63 -28
  40. data/spec/controllers/spree/api/users_controller_spec.rb +3 -0
  41. data/spec/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items_spec.rb +4 -4
  42. data/spec/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions_spec.rb +2 -2
  43. data/spec/features/admin/subscriptions_spec.rb +13 -3
  44. data/spec/jobs/solidus_subscriptions/create_subscription_job_spec.rb +20 -0
  45. data/spec/jobs/solidus_subscriptions/process_installment_job_spec.rb +17 -0
  46. data/spec/lib/solidus_subscriptions/dispatcher/payment_failed_dispatcher_spec.rb +3 -3
  47. data/spec/lib/solidus_subscriptions/dispatcher/success_dispatcher_spec.rb +3 -3
  48. data/spec/lib/solidus_subscriptions/subscription_generator_spec.rb +1 -1
  49. data/spec/models/solidus_subscriptions/installment_spec.rb +1 -1
  50. data/spec/models/solidus_subscriptions/subscription_spec.rb +893 -16
  51. data/spec/models/spree/wallet_payment_source_spec.rb +3 -3
  52. data/spec/requests/api/v1/subscriptions_spec.rb +229 -0
  53. data/spec/subscribers/solidus_subscriptions/churn_buster_subscriber_spec.rb +8 -8
  54. data/spec/subscribers/solidus_subscriptions/order_subscriber_spec.rb +13 -0
  55. metadata +24 -17
  56. data/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb +0 -25
  57. data/config/initializers/subscribers.rb +0 -9
  58. data/spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions_spec.rb +0 -32
  59. /data/{app → lib}/views/spree/frontend/products/_subscription_line_item_fields.html.erb +0 -0
@@ -3,7 +3,7 @@
3
3
  RSpec.describe Spree::WalletPaymentSource do
4
4
  describe 'setting it as the default' do
5
5
  it 'reports a payment method changed event for subscriptions that use the default payment source' do
6
- stub_const('Spree::Event', class_spy(Spree::Event))
6
+ stub_const('SolidusSupport::LegacyEventCompat::Bus', class_spy(SolidusSupport::LegacyEventCompat::Bus))
7
7
  user = create(:user)
8
8
  subscription = create(:subscription, user: user)
9
9
  payment_source = create(:credit_card, user: user)
@@ -11,8 +11,8 @@ RSpec.describe Spree::WalletPaymentSource do
11
11
 
12
12
  user.wallet.default_wallet_payment_source = wallet_payment_source
13
13
 
14
- expect(Spree::Event).to have_received(:fire).with(
15
- 'solidus_subscriptions.subscription_payment_method_changed',
14
+ expect(SolidusSupport::LegacyEventCompat::Bus).to have_received(:publish).with(
15
+ :'solidus_subscriptions.subscription_payment_method_changed',
16
16
  subscription: subscription,
17
17
  )
18
18
  end
@@ -163,6 +163,235 @@ RSpec.describe '/api/v1/subscriptions' do
163
163
  end
164
164
  end
165
165
 
166
+ describe 'POST /:id/pause' do
167
+ context 'when the subscription is active and belongs to the user' do
168
+ context 'with an actionable_date' do
169
+ it 'pauses the subscription and updates the actionable_date' do
170
+ user = create(:user, &:generate_spree_api_key!)
171
+ subscription = create(
172
+ :subscription,
173
+ user: user,
174
+ paused: false,
175
+ state: 'active'
176
+ )
177
+ date = Time.zone.tomorrow + 1.day
178
+ params = {
179
+ subscription: {
180
+ actionable_date: date
181
+ }
182
+ }
183
+
184
+ post(
185
+ pause_api_v1_subscription_path(subscription),
186
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
187
+ params: params
188
+ )
189
+
190
+ aggregate_failures do
191
+ expect(response).to be_ok
192
+ expect(subscription.reload.actionable_date).to eq(date)
193
+ expect(subscription.paused).to eq(true)
194
+ end
195
+ end
196
+ end
197
+
198
+ context 'without an actionable_date' do
199
+ it 'pauses the subscription indefinitely' do
200
+ user = create(:user, &:generate_spree_api_key!)
201
+ subscription = create(
202
+ :subscription,
203
+ :with_shipping_address,
204
+ user: user,
205
+ paused: false,
206
+ state: 'active'
207
+ )
208
+ params = nil
209
+
210
+ post(
211
+ pause_api_v1_subscription_path(subscription),
212
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
213
+ params: params
214
+ )
215
+
216
+ aggregate_failures do
217
+ expect(response).to be_ok
218
+ expect(subscription.reload.actionable_date).to be_nil
219
+ expect(subscription.paused).to eq(true)
220
+ end
221
+ end
222
+ end
223
+ end
224
+
225
+ context 'when the subscription is not active and belongs to the user' do
226
+ it 'is an unprocessable entity' do
227
+ user = create(:user, &:generate_spree_api_key!)
228
+ subscription = create(
229
+ :subscription,
230
+ :with_shipping_address,
231
+ user: user,
232
+ paused: false,
233
+ state: 'canceled'
234
+ )
235
+ params = nil
236
+
237
+ post(
238
+ pause_api_v1_subscription_path(subscription),
239
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
240
+ params: params
241
+ )
242
+
243
+ aggregate_failures do
244
+ expect(response).to have_http_status(:unprocessable_entity)
245
+ expect(JSON.parse(response.body)["paused"]).to include('cannot pause/resume a subscription which is not active')
246
+ expect(subscription.reload.paused).to eq(false)
247
+ end
248
+ end
249
+ end
250
+
251
+ context('when the subscription is active but does not belong to the user') do
252
+ it 'responds with 401 Unauthorized' do
253
+ user = create(:user, &:generate_spree_api_key!)
254
+ subscription = create(
255
+ :subscription,
256
+ paused: false,
257
+ state: 'active'
258
+ )
259
+ date = Time.zone.tomorrow + 1.day
260
+ params = {
261
+ subscription: {
262
+ actionable_date: date
263
+ }
264
+ }
265
+
266
+ post(
267
+ pause_api_v1_subscription_path(subscription),
268
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
269
+ params: params
270
+ )
271
+
272
+ expect(response.status).to eq(401)
273
+ end
274
+ end
275
+ end
276
+
277
+ describe '#resume' do
278
+ context 'when the subscription is active and belongs to the user' do
279
+ context 'with an actionable_date' do
280
+ it 'resumes the subscription and updates the actionable_date' do
281
+ user = create(:user, &:generate_spree_api_key!)
282
+ subscription = create(
283
+ :subscription,
284
+ user: user,
285
+ paused: true,
286
+ state: 'active'
287
+ )
288
+ date = Time.zone.tomorrow + 1.day
289
+ params = {
290
+ subscription: {
291
+ actionable_date: date
292
+ }
293
+ }
294
+
295
+ post(
296
+ resume_api_v1_subscription_path(subscription),
297
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
298
+ params: params
299
+ )
300
+
301
+ aggregate_failures do
302
+ expect(response).to be_ok
303
+ expect(subscription.reload.actionable_date).to eq(date)
304
+ expect(subscription.paused).to eq(false)
305
+ end
306
+ end
307
+ end
308
+
309
+ context 'without an actionable_date' do
310
+ it 'resumes the subscription on the next day' do
311
+ user = create(:user, &:generate_spree_api_key!)
312
+ subscription = create(
313
+ :subscription,
314
+ user: user,
315
+ paused: true,
316
+ state: 'active'
317
+ )
318
+ params = {
319
+ subscription: {
320
+ actionable_date: nil
321
+ }
322
+ }
323
+
324
+ post(
325
+ resume_api_v1_subscription_path(subscription),
326
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
327
+ params: params
328
+ )
329
+
330
+ aggregate_failures do
331
+ expect(response).to be_ok
332
+ expect(subscription.reload.actionable_date).to eq(Time.zone.tomorrow)
333
+ expect(subscription.paused).to eq(false)
334
+ end
335
+ end
336
+ end
337
+ end
338
+
339
+ context 'when the subscription is not active and belongs to the user' do
340
+ it 'is an unprocessable entity' do
341
+ user = create(:user, &:generate_spree_api_key!)
342
+ subscription = create(
343
+ :subscription,
344
+ user: user,
345
+ paused: true,
346
+ state: 'canceled'
347
+ )
348
+ params = {
349
+ subscription: {
350
+ actionable_date: nil
351
+ }
352
+ }
353
+
354
+ post(
355
+ resume_api_v1_subscription_path(subscription),
356
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
357
+ params: params
358
+ )
359
+
360
+ aggregate_failures do
361
+ expect(response.status).to eq(422)
362
+ expect(JSON.parse(response.body)["paused"]).to include('cannot pause/resume a subscription which is not active')
363
+ end
364
+ end
365
+ end
366
+
367
+ context 'when the subscription is active but does not belong to the user' do
368
+ it 'responds with 401 Unauthorized' do
369
+ user = create(:user, &:generate_spree_api_key!)
370
+ subscription = create(
371
+ :subscription,
372
+ paused: true,
373
+ state: 'active'
374
+ )
375
+ params = {
376
+ subscription: {
377
+ actionable_date: nil
378
+ }
379
+ }
380
+
381
+ post(
382
+ resume_api_v1_subscription_path(subscription),
383
+ headers: { 'Authorization' => "Bearer #{user.spree_api_key}" },
384
+ params: params
385
+ )
386
+
387
+ aggregate_failures do
388
+ expect(response.status).to eq(401)
389
+ expect(subscription.paused).to eq(true)
390
+ end
391
+ end
392
+ end
393
+ end
394
+
166
395
  describe 'POST /:id/skip' do
167
396
  context 'when the subscription belongs to the user' do
168
397
  it 'responds with 200 OK' do
@@ -7,7 +7,7 @@ RSpec.describe SolidusSubscriptions::ChurnBusterSubscriber do
7
7
  allow(SolidusSubscriptions).to receive(:churn_buster).and_return(churn_buster)
8
8
 
9
9
  subscription = create(:subscription)
10
- Spree::Event.fire('solidus_subscriptions.subscription_canceled', subscription: subscription)
10
+ SolidusSupport::LegacyEventCompat::Bus.publish(:'solidus_subscriptions.subscription_canceled', subscription: subscription)
11
11
 
12
12
  expect(churn_buster).to have_received(:report_subscription_cancellation).with(subscription)
13
13
  end
@@ -19,7 +19,7 @@ RSpec.describe SolidusSubscriptions::ChurnBusterSubscriber do
19
19
  allow(SolidusSubscriptions).to receive(:churn_buster).and_return(churn_buster)
20
20
 
21
21
  subscription = create(:subscription)
22
- Spree::Event.fire('solidus_subscriptions.subscription_ended', subscription: subscription)
22
+ SolidusSupport::LegacyEventCompat::Bus.publish(:'solidus_subscriptions.subscription_ended', subscription: subscription)
23
23
 
24
24
  expect(churn_buster).to have_received(:report_subscription_cancellation).with(subscription)
25
25
  end
@@ -32,8 +32,8 @@ RSpec.describe SolidusSubscriptions::ChurnBusterSubscriber do
32
32
 
33
33
  order = build_stubbed(:order)
34
34
  installment = build_stubbed(:installment)
35
- Spree::Event.fire(
36
- 'solidus_subscriptions.installment_succeeded',
35
+ SolidusSupport::LegacyEventCompat::Bus.publish(
36
+ :'solidus_subscriptions.installment_succeeded',
37
37
  installment: installment,
38
38
  order: order,
39
39
  )
@@ -49,8 +49,8 @@ RSpec.describe SolidusSubscriptions::ChurnBusterSubscriber do
49
49
 
50
50
  order = build_stubbed(:order)
51
51
  installment = build_stubbed(:installment)
52
- Spree::Event.fire(
53
- 'solidus_subscriptions.installment_failed_payment',
52
+ SolidusSupport::LegacyEventCompat::Bus.publish(
53
+ :'solidus_subscriptions.installment_failed_payment',
54
54
  installment: installment,
55
55
  order: order,
56
56
  )
@@ -65,8 +65,8 @@ RSpec.describe SolidusSubscriptions::ChurnBusterSubscriber do
65
65
  allow(SolidusSubscriptions).to receive(:churn_buster).and_return(churn_buster)
66
66
 
67
67
  subscription = create(:subscription)
68
- Spree::Event.fire(
69
- 'solidus_subscriptions.subscription_payment_method_changed',
68
+ SolidusSupport::LegacyEventCompat::Bus.publish(
69
+ :'solidus_subscriptions.subscription_payment_method_changed',
70
70
  subscription: subscription,
71
71
  )
72
72
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe SolidusSubscriptions::OrderSubscriber do
4
+ describe 'on order completion' do
5
+ it 'enqueues the CreateSubscriptionJob' do
6
+ order = create(:order_ready_to_complete, :with_subscription_line_items)
7
+
8
+ order.complete!
9
+
10
+ expect(SolidusSubscriptions::CreateSubscriptionJob).to have_been_enqueued.with(order).once
11
+ end
12
+ end
13
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_subscriptions
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Solidus Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-16 00:00:00.000000000 Z
11
+ date: 2023-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 2.0.0
61
+ version: '2.11'
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
64
  version: '4'
@@ -68,7 +68,7 @@ dependencies:
68
68
  requirements:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
- version: 2.0.0
71
+ version: '2.11'
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '4'
@@ -78,14 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0.7'
81
+ version: '0.9'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '0.7'
88
+ version: '0.9'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: state_machines
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -220,6 +220,7 @@ extra_rdoc_files: []
220
220
  files:
221
221
  - ".circleci/config.yml"
222
222
  - ".gem_release.yml"
223
+ - ".github/dependabot.yml"
223
224
  - ".github/stale.yml"
224
225
  - ".github_changelog_generator"
225
226
  - ".gitignore"
@@ -243,7 +244,6 @@ files:
243
244
  - app/controllers/spree/admin/users/subscriptions_controller.rb
244
245
  - app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb
245
246
  - app/decorators/models/solidus_subscriptions/spree/order/after_create.rb
246
- - app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb
247
247
  - app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb
248
248
  - app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb
249
249
  - app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb
@@ -252,6 +252,7 @@ files:
252
252
  - app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb
253
253
  - app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb
254
254
  - app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb
255
+ - app/jobs/solidus_subscriptions/create_subscription_job.rb
255
256
  - app/jobs/solidus_subscriptions/process_installment_job.rb
256
257
  - app/jobs/solidus_subscriptions/process_subscription_job.rb
257
258
  - app/models/solidus_subscriptions/installment.rb
@@ -269,6 +270,7 @@ files:
269
270
  - app/overrides/views/subscription_line_item_fields.rb
270
271
  - app/subscribers/solidus_subscriptions/churn_buster_subscriber.rb
271
272
  - app/subscribers/solidus_subscriptions/event_storage_subscriber.rb
273
+ - app/subscribers/solidus_subscriptions/order_subscriber.rb
272
274
  - app/views/spree/admin/installments/_state_pill.html.erb
273
275
  - app/views/spree/admin/installments/index.html.erb
274
276
  - app/views/spree/admin/products/_subscribable_checkbox.html.erb
@@ -291,7 +293,6 @@ files:
291
293
  - app/views/spree/admin/users/_subscription_tab.html.erb
292
294
  - app/views/spree/admin/users/subscriptions/index.html.erb
293
295
  - app/views/spree/admin/variants/_subscribable_checkbox.html.erb
294
- - app/views/spree/frontend/products/_subscription_line_item_fields.html.erb
295
296
  - bin/console
296
297
  - bin/rails
297
298
  - bin/rails-engine
@@ -300,7 +301,6 @@ files:
300
301
  - bin/sandbox
301
302
  - bin/setup
302
303
  - config/initializers/permission_sets.rb
303
- - config/initializers/subscribers.rb
304
304
  - config/locales/en.yml
305
305
  - config/routes.rb
306
306
  - db/migrate/20160825164850_create_solidus_subscriptions_subscriptions.rb
@@ -334,9 +334,12 @@ files:
334
334
  - db/migrate/20201123171026_change_actionable_date_to_date.rb
335
335
  - db/migrate/20210205140422_add_currency_to_subscription.rb
336
336
  - db/migrate/20210323165714_update_promotion_rule_names.rb
337
+ - db/migrate/20210905145955_add_paused_to_subscriptions.rb
337
338
  - lib/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb
338
339
  - lib/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb
339
340
  - lib/generators/solidus_subscriptions/install/install_generator.rb
341
+ - lib/generators/solidus_subscriptions/install/templates/app/controllers/concerns/create_subscription.rb
342
+ - lib/generators/solidus_subscriptions/install/templates/app/views/cart_line_items/_subscription_fields.html.erb
340
343
  - lib/generators/solidus_subscriptions/install/templates/initializer.rb
341
344
  - lib/solidus_subscriptions.rb
342
345
  - lib/solidus_subscriptions/checkout.rb
@@ -357,6 +360,7 @@ files:
357
360
  - lib/solidus_subscriptions/permission_sets/default_customer.rb
358
361
  - lib/solidus_subscriptions/permission_sets/subscription_management.rb
359
362
  - lib/solidus_subscriptions/permitted_attributes.rb
363
+ - lib/solidus_subscriptions/processing_error_handlers/rails_logger.rb
360
364
  - lib/solidus_subscriptions/processor.rb
361
365
  - lib/solidus_subscriptions/subscription_generator.rb
362
366
  - lib/solidus_subscriptions/subscription_line_item_builder.rb
@@ -370,6 +374,7 @@ files:
370
374
  - lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
371
375
  - lib/solidus_subscriptions/version.rb
372
376
  - lib/tasks/process_subscriptions.rake
377
+ - lib/views/spree/frontend/products/_subscription_line_item_fields.html.erb
373
378
  - reference/solidus_subscriptions.v1.yaml
374
379
  - solidus_subscriptions.gemspec
375
380
  - spec/controllers/spree/admin/subscriptions_controller_spec.rb
@@ -378,7 +383,6 @@ files:
378
383
  - spec/controllers/spree/api/users_controller_spec.rb
379
384
  - spec/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items_spec.rb
380
385
  - spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb
381
- - spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions_spec.rb
382
386
  - spec/decorators/models/solidus_subscriptions/spree/order/installment_details_association_spec.rb
383
387
  - spec/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association_spec.rb
384
388
  - spec/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions_spec.rb
@@ -387,6 +391,7 @@ files:
387
391
  - spec/features/admin/subscriptions_spec.rb
388
392
  - spec/features/admin_users_subscription_tabs_spec.rb
389
393
  - spec/fixtures/cassettes/churn_buster.yml
394
+ - spec/jobs/solidus_subscriptions/create_subscription_job_spec.rb
390
395
  - spec/jobs/solidus_subscriptions/process_installment_job_spec.rb
391
396
  - spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb
392
397
  - spec/lib/solidus_subscriptions/checkout_spec.rb
@@ -412,6 +417,7 @@ files:
412
417
  - spec/requests/api/v1/subscriptions_spec.rb
413
418
  - spec/spec_helper.rb
414
419
  - spec/subscribers/solidus_subscriptions/churn_buster_subscriber_spec.rb
420
+ - spec/subscribers/solidus_subscriptions/order_subscriber_spec.rb
415
421
  - spec/support/active_model_mocks.rb
416
422
  - spec/support/cancancan.rb
417
423
  - spec/support/factories.rb
@@ -421,20 +427,20 @@ files:
421
427
  - spec/support/timecop.rb
422
428
  - spec/support/vcr.rb
423
429
  - spec/support/version_cake.rb
424
- homepage: https://github.com/solidusio-contrib/solidus_subscriptions
430
+ homepage: https://github.com/solidusio/solidus_subscriptions
425
431
  licenses:
426
432
  - BSD-3-Clause
427
433
  metadata:
428
- homepage_uri: https://github.com/solidusio-contrib/solidus_subscriptions
429
- source_code_uri: https://github.com/solidusio-contrib/solidus_subscriptions
430
- changelog_uri: https://github.com/solidusio-contrib/solidus_subscriptions/blob/master/CHANGELOG.md
434
+ homepage_uri: https://github.com/solidusio/solidus_subscriptions
435
+ source_code_uri: https://github.com/solidusio/solidus_subscriptions
436
+ changelog_uri: https://github.com/solidusio/solidus_subscriptions/blob/master/CHANGELOG.md
431
437
  post_install_message:
432
438
  rdoc_options: []
433
439
  require_paths:
434
440
  - lib
435
441
  required_ruby_version: !ruby/object:Gem::Requirement
436
442
  requirements:
437
- - - "~>"
443
+ - - ">="
438
444
  - !ruby/object:Gem::Version
439
445
  version: '2.5'
440
446
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -443,7 +449,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
443
449
  - !ruby/object:Gem::Version
444
450
  version: '0'
445
451
  requirements: []
446
- rubygems_version: 3.0.8
452
+ rubygems_version: 3.3.7
447
453
  signing_key:
448
454
  specification_version: 4
449
455
  summary: Add subscription support to Solidus
@@ -454,7 +460,6 @@ test_files:
454
460
  - spec/controllers/spree/api/users_controller_spec.rb
455
461
  - spec/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items_spec.rb
456
462
  - spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb
457
- - spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions_spec.rb
458
463
  - spec/decorators/models/solidus_subscriptions/spree/order/installment_details_association_spec.rb
459
464
  - spec/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association_spec.rb
460
465
  - spec/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions_spec.rb
@@ -463,6 +468,7 @@ test_files:
463
468
  - spec/features/admin/subscriptions_spec.rb
464
469
  - spec/features/admin_users_subscription_tabs_spec.rb
465
470
  - spec/fixtures/cassettes/churn_buster.yml
471
+ - spec/jobs/solidus_subscriptions/create_subscription_job_spec.rb
466
472
  - spec/jobs/solidus_subscriptions/process_installment_job_spec.rb
467
473
  - spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb
468
474
  - spec/lib/solidus_subscriptions/checkout_spec.rb
@@ -488,6 +494,7 @@ test_files:
488
494
  - spec/requests/api/v1/subscriptions_spec.rb
489
495
  - spec/spec_helper.rb
490
496
  - spec/subscribers/solidus_subscriptions/churn_buster_subscriber_spec.rb
497
+ - spec/subscribers/solidus_subscriptions/order_subscriber_spec.rb
491
498
  - spec/support/active_model_mocks.rb
492
499
  - spec/support/cancancan.rb
493
500
  - spec/support/factories.rb
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Once an order is finalized its subscriptions line items should be converted
4
- # into active subscriptions. This hooks into Spree::Order#finalize! and
5
- # passes all subscription_line_items present on the order to the Subscription
6
- # generator which will build and persist the subscriptions
7
- module SolidusSubscriptions
8
- module Spree
9
- module Order
10
- module FinalizeCreatesSubscriptions
11
- def finalize!
12
- SolidusSubscriptions::SubscriptionGenerator.group(subscription_line_items).each do |line_items|
13
- SolidusSubscriptions::SubscriptionGenerator.activate(line_items)
14
- end
15
-
16
- reload
17
-
18
- super
19
- end
20
- end
21
- end
22
- end
23
- end
24
-
25
- Spree::Order.prepend(SolidusSubscriptions::Spree::Order::FinalizeCreatesSubscriptions)
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if Spree.solidus_gem_version < Gem::Version.new('2.11.0')
4
- require SolidusSubscriptions::Engine.root.join('app/subscribers/solidus_subscriptions/event_storage_subscriber')
5
- require SolidusSubscriptions::Engine.root.join('app/subscribers/solidus_subscriptions/churn_buster_subscriber')
6
-
7
- SolidusSubscriptions::ChurnBusterSubscriber.subscribe!
8
- SolidusSubscriptions::EventStorageSubscriber.subscribe!
9
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe SolidusSubscriptions::Spree::Order::FinalizeCreatesSubscriptions do
6
- describe '#finalize!' do
7
- subject(:finalize) { order.finalize! }
8
-
9
- let(:order) { create :order, :with_subscription_line_items }
10
- let(:subscription_line_item) { order.subscription_line_items.last }
11
- let(:expected_actionable_date) { Time.zone.today + subscription_line_item.subscription.interval }
12
-
13
- around { |e| Timecop.freeze { e.run } }
14
-
15
- it 'creates new subscriptions' do
16
- expect { finalize }.
17
- to change { SolidusSubscriptions::Subscription.count }.
18
- by(order.subscription_line_items.count)
19
- end
20
-
21
- it 'creates a subscription with the correct values' do
22
- finalize
23
- subscription = SolidusSubscriptions::Subscription.last
24
-
25
- expect(subscription).to have_attributes(
26
- user_id: order.user_id,
27
- actionable_date: expected_actionable_date,
28
- line_items: [subscription_line_item]
29
- )
30
- end
31
- end
32
- end