solidus_subscriptions 1.0.0.rc1 → 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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +57 -9
- data/.github/dependabot.yml +7 -0
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +201 -163
- data/Gemfile +14 -1
- data/README.md +17 -7
- data/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb +25 -1
- data/app/controllers/spree/admin/subscriptions_controller.rb +32 -4
- data/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb +2 -2
- data/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb +2 -2
- data/app/jobs/solidus_subscriptions/create_subscription_job.rb +11 -0
- data/app/jobs/solidus_subscriptions/process_installment_job.rb +1 -1
- data/app/models/solidus_subscriptions/subscription.rb +75 -31
- data/app/subscribers/solidus_subscriptions/churn_buster_subscriber.rb +1 -0
- data/app/subscribers/solidus_subscriptions/event_storage_subscriber.rb +1 -0
- data/app/subscribers/solidus_subscriptions/order_subscriber.rb +16 -0
- data/app/views/spree/admin/shared/_subscription_actions.html.erb +27 -8
- data/app/views/spree/admin/shared/_subscription_sidebar.html.erb +2 -0
- data/app/views/spree/admin/subscriptions/_state_pill.html.erb +3 -2
- data/app/views/spree/admin/subscriptions/index.html.erb +50 -13
- data/bin/sandbox +1 -6
- data/config/locales/en.yml +16 -0
- data/config/routes.rb +9 -3
- data/db/migrate/20210905145955_add_paused_to_subscriptions.rb +5 -0
- data/{app/decorators → lib/decorators/api}/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb +14 -0
- data/lib/generators/solidus_subscriptions/install/install_generator.rb +16 -0
- data/lib/generators/solidus_subscriptions/install/templates/app/controllers/concerns/create_subscription.rb +17 -0
- data/lib/generators/solidus_subscriptions/install/templates/app/views/cart_line_items/_subscription_fields.html.erb +30 -0
- data/lib/generators/solidus_subscriptions/install/templates/initializer.rb +16 -1
- data/lib/solidus_subscriptions/checkout.rb +2 -9
- data/lib/solidus_subscriptions/configuration.rb +37 -8
- data/lib/solidus_subscriptions/dispatcher/payment_failed_dispatcher.rb +2 -2
- data/lib/solidus_subscriptions/dispatcher/success_dispatcher.rb +2 -2
- data/lib/solidus_subscriptions/engine.rb +28 -0
- data/lib/solidus_subscriptions/order_creator.rb +29 -0
- data/lib/solidus_subscriptions/permission_sets/default_customer.rb +1 -1
- data/lib/solidus_subscriptions/processing_error_handlers/rails_logger.rb +25 -0
- data/lib/solidus_subscriptions/subscription_generator.rb +6 -0
- data/lib/solidus_subscriptions/version.rb +1 -1
- data/lib/solidus_subscriptions.rb +1 -0
- data/solidus_subscriptions.gemspec +6 -6
- data/spec/controllers/spree/api/line_items_controller_spec.rb +63 -28
- data/spec/controllers/spree/api/users_controller_spec.rb +3 -0
- data/spec/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items_spec.rb +4 -4
- data/spec/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions_spec.rb +2 -2
- data/spec/features/admin/subscriptions_spec.rb +13 -3
- data/spec/jobs/solidus_subscriptions/create_subscription_job_spec.rb +20 -0
- data/spec/jobs/solidus_subscriptions/process_installment_job_spec.rb +17 -0
- data/spec/lib/solidus_subscriptions/dispatcher/payment_failed_dispatcher_spec.rb +3 -3
- data/spec/lib/solidus_subscriptions/dispatcher/success_dispatcher_spec.rb +3 -3
- data/spec/lib/solidus_subscriptions/subscription_generator_spec.rb +1 -1
- data/spec/models/solidus_subscriptions/installment_spec.rb +1 -1
- data/spec/models/solidus_subscriptions/subscription_spec.rb +893 -16
- data/spec/models/spree/wallet_payment_source_spec.rb +3 -3
- data/spec/requests/api/v1/subscriptions_spec.rb +229 -0
- data/spec/subscribers/solidus_subscriptions/churn_buster_subscriber_spec.rb +8 -8
- data/spec/subscribers/solidus_subscriptions/order_subscriber_spec.rb +13 -0
- metadata +31 -23
- data/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb +0 -23
- data/config/initializers/subscribers.rb +0 -9
- data/spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions_spec.rb +0 -32
- /data/{app/decorators → lib/decorators/frontend}/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb +0 -0
- /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('
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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:
|
11
|
+
date: 2023-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
@@ -58,34 +58,34 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
61
|
+
version: '2.11'
|
62
62
|
- - "<"
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: '
|
64
|
+
version: '4'
|
65
65
|
type: :runtime
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
69
|
- - ">="
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version: 2.
|
71
|
+
version: '2.11'
|
72
72
|
- - "<"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '4'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: solidus_support
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '0.
|
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.
|
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"
|
@@ -241,11 +242,8 @@ files:
|
|
241
242
|
- app/controllers/spree/admin/subscription_orders_controller.rb
|
242
243
|
- app/controllers/spree/admin/subscriptions_controller.rb
|
243
244
|
- app/controllers/spree/admin/users/subscriptions_controller.rb
|
244
|
-
- app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb
|
245
|
-
- app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb
|
246
245
|
- app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb
|
247
246
|
- app/decorators/models/solidus_subscriptions/spree/order/after_create.rb
|
248
|
-
- app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb
|
249
247
|
- app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb
|
250
248
|
- app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb
|
251
249
|
- app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb
|
@@ -254,6 +252,7 @@ files:
|
|
254
252
|
- app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb
|
255
253
|
- app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb
|
256
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
|
257
256
|
- app/jobs/solidus_subscriptions/process_installment_job.rb
|
258
257
|
- app/jobs/solidus_subscriptions/process_subscription_job.rb
|
259
258
|
- app/models/solidus_subscriptions/installment.rb
|
@@ -271,6 +270,7 @@ files:
|
|
271
270
|
- app/overrides/views/subscription_line_item_fields.rb
|
272
271
|
- app/subscribers/solidus_subscriptions/churn_buster_subscriber.rb
|
273
272
|
- app/subscribers/solidus_subscriptions/event_storage_subscriber.rb
|
273
|
+
- app/subscribers/solidus_subscriptions/order_subscriber.rb
|
274
274
|
- app/views/spree/admin/installments/_state_pill.html.erb
|
275
275
|
- app/views/spree/admin/installments/index.html.erb
|
276
276
|
- app/views/spree/admin/products/_subscribable_checkbox.html.erb
|
@@ -293,7 +293,6 @@ files:
|
|
293
293
|
- app/views/spree/admin/users/_subscription_tab.html.erb
|
294
294
|
- app/views/spree/admin/users/subscriptions/index.html.erb
|
295
295
|
- app/views/spree/admin/variants/_subscribable_checkbox.html.erb
|
296
|
-
- app/views/spree/frontend/products/_subscription_line_item_fields.html.erb
|
297
296
|
- bin/console
|
298
297
|
- bin/rails
|
299
298
|
- bin/rails-engine
|
@@ -302,7 +301,6 @@ files:
|
|
302
301
|
- bin/sandbox
|
303
302
|
- bin/setup
|
304
303
|
- config/initializers/permission_sets.rb
|
305
|
-
- config/initializers/subscribers.rb
|
306
304
|
- config/locales/en.yml
|
307
305
|
- config/routes.rb
|
308
306
|
- db/migrate/20160825164850_create_solidus_subscriptions_subscriptions.rb
|
@@ -336,7 +334,12 @@ files:
|
|
336
334
|
- db/migrate/20201123171026_change_actionable_date_to_date.rb
|
337
335
|
- db/migrate/20210205140422_add_currency_to_subscription.rb
|
338
336
|
- db/migrate/20210323165714_update_promotion_rule_names.rb
|
337
|
+
- db/migrate/20210905145955_add_paused_to_subscriptions.rb
|
338
|
+
- lib/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb
|
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
|
@@ -353,9 +356,11 @@ files:
|
|
353
356
|
- lib/solidus_subscriptions/dispatcher/payment_failed_dispatcher.rb
|
354
357
|
- lib/solidus_subscriptions/dispatcher/success_dispatcher.rb
|
355
358
|
- lib/solidus_subscriptions/engine.rb
|
359
|
+
- lib/solidus_subscriptions/order_creator.rb
|
356
360
|
- lib/solidus_subscriptions/permission_sets/default_customer.rb
|
357
361
|
- lib/solidus_subscriptions/permission_sets/subscription_management.rb
|
358
362
|
- lib/solidus_subscriptions/permitted_attributes.rb
|
363
|
+
- lib/solidus_subscriptions/processing_error_handlers/rails_logger.rb
|
359
364
|
- lib/solidus_subscriptions/processor.rb
|
360
365
|
- lib/solidus_subscriptions/subscription_generator.rb
|
361
366
|
- lib/solidus_subscriptions/subscription_line_item_builder.rb
|
@@ -369,6 +374,7 @@ files:
|
|
369
374
|
- lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
|
370
375
|
- lib/solidus_subscriptions/version.rb
|
371
376
|
- lib/tasks/process_subscriptions.rake
|
377
|
+
- lib/views/spree/frontend/products/_subscription_line_item_fields.html.erb
|
372
378
|
- reference/solidus_subscriptions.v1.yaml
|
373
379
|
- solidus_subscriptions.gemspec
|
374
380
|
- spec/controllers/spree/admin/subscriptions_controller_spec.rb
|
@@ -377,7 +383,6 @@ files:
|
|
377
383
|
- spec/controllers/spree/api/users_controller_spec.rb
|
378
384
|
- spec/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items_spec.rb
|
379
385
|
- spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb
|
380
|
-
- spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions_spec.rb
|
381
386
|
- spec/decorators/models/solidus_subscriptions/spree/order/installment_details_association_spec.rb
|
382
387
|
- spec/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association_spec.rb
|
383
388
|
- spec/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions_spec.rb
|
@@ -386,6 +391,7 @@ files:
|
|
386
391
|
- spec/features/admin/subscriptions_spec.rb
|
387
392
|
- spec/features/admin_users_subscription_tabs_spec.rb
|
388
393
|
- spec/fixtures/cassettes/churn_buster.yml
|
394
|
+
- spec/jobs/solidus_subscriptions/create_subscription_job_spec.rb
|
389
395
|
- spec/jobs/solidus_subscriptions/process_installment_job_spec.rb
|
390
396
|
- spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb
|
391
397
|
- spec/lib/solidus_subscriptions/checkout_spec.rb
|
@@ -411,6 +417,7 @@ files:
|
|
411
417
|
- spec/requests/api/v1/subscriptions_spec.rb
|
412
418
|
- spec/spec_helper.rb
|
413
419
|
- spec/subscribers/solidus_subscriptions/churn_buster_subscriber_spec.rb
|
420
|
+
- spec/subscribers/solidus_subscriptions/order_subscriber_spec.rb
|
414
421
|
- spec/support/active_model_mocks.rb
|
415
422
|
- spec/support/cancancan.rb
|
416
423
|
- spec/support/factories.rb
|
@@ -420,29 +427,29 @@ files:
|
|
420
427
|
- spec/support/timecop.rb
|
421
428
|
- spec/support/vcr.rb
|
422
429
|
- spec/support/version_cake.rb
|
423
|
-
homepage: https://github.com/solidusio
|
430
|
+
homepage: https://github.com/solidusio/solidus_subscriptions
|
424
431
|
licenses:
|
425
432
|
- BSD-3-Clause
|
426
433
|
metadata:
|
427
|
-
homepage_uri: https://github.com/solidusio
|
428
|
-
source_code_uri: https://github.com/solidusio
|
429
|
-
changelog_uri: https://github.com/solidusio
|
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
|
430
437
|
post_install_message:
|
431
438
|
rdoc_options: []
|
432
439
|
require_paths:
|
433
440
|
- lib
|
434
441
|
required_ruby_version: !ruby/object:Gem::Requirement
|
435
442
|
requirements:
|
436
|
-
- - "
|
443
|
+
- - ">="
|
437
444
|
- !ruby/object:Gem::Version
|
438
445
|
version: '2.5'
|
439
446
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
440
447
|
requirements:
|
441
|
-
- - "
|
448
|
+
- - ">="
|
442
449
|
- !ruby/object:Gem::Version
|
443
|
-
version:
|
450
|
+
version: '0'
|
444
451
|
requirements: []
|
445
|
-
rubygems_version: 3.
|
452
|
+
rubygems_version: 3.3.7
|
446
453
|
signing_key:
|
447
454
|
specification_version: 4
|
448
455
|
summary: Add subscription support to Solidus
|
@@ -453,7 +460,6 @@ test_files:
|
|
453
460
|
- spec/controllers/spree/api/users_controller_spec.rb
|
454
461
|
- spec/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items_spec.rb
|
455
462
|
- spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb
|
456
|
-
- spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions_spec.rb
|
457
463
|
- spec/decorators/models/solidus_subscriptions/spree/order/installment_details_association_spec.rb
|
458
464
|
- spec/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association_spec.rb
|
459
465
|
- spec/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions_spec.rb
|
@@ -462,6 +468,7 @@ test_files:
|
|
462
468
|
- spec/features/admin/subscriptions_spec.rb
|
463
469
|
- spec/features/admin_users_subscription_tabs_spec.rb
|
464
470
|
- spec/fixtures/cassettes/churn_buster.yml
|
471
|
+
- spec/jobs/solidus_subscriptions/create_subscription_job_spec.rb
|
465
472
|
- spec/jobs/solidus_subscriptions/process_installment_job_spec.rb
|
466
473
|
- spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb
|
467
474
|
- spec/lib/solidus_subscriptions/checkout_spec.rb
|
@@ -487,6 +494,7 @@ test_files:
|
|
487
494
|
- spec/requests/api/v1/subscriptions_spec.rb
|
488
495
|
- spec/spec_helper.rb
|
489
496
|
- spec/subscribers/solidus_subscriptions/churn_buster_subscriber_spec.rb
|
497
|
+
- spec/subscribers/solidus_subscriptions/order_subscriber_spec.rb
|
490
498
|
- spec/support/active_model_mocks.rb
|
491
499
|
- spec/support/cancancan.rb
|
492
500
|
- spec/support/factories.rb
|
data/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb
DELETED
@@ -1,23 +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
|
-
super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
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
|
data/spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions_spec.rb
DELETED
@@ -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.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
|
File without changes
|
File without changes
|