payola-payments 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ module Payola
4
+ describe StartSubscription do
5
+ let(:stripe_helper) { StripeMock.create_test_helper }
6
+ let(:token){ StripeMock.generate_card_token({}) }
7
+ let(:user){ User.create }
8
+
9
+ describe "#call" do
10
+ it "should create a customer" do
11
+ plan = create(:subscription_plan)
12
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token)
13
+ StartSubscription.call(subscription)
14
+ expect(subscription.reload.stripe_customer_id).to_not be_nil
15
+ end
16
+ it "should capture credit card info" do
17
+ plan = create(:subscription_plan)
18
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token)
19
+ StartSubscription.call(subscription)
20
+ expect(subscription.reload.stripe_id).to_not be_nil
21
+ expect(subscription.reload.card_last4).to_not be_nil
22
+ expect(subscription.reload.card_expiration).to_not be_nil
23
+ expect(subscription.reload.card_type).to_not be_nil
24
+ end
25
+
26
+ it "should pass through coupon code" do
27
+ plan = create(:subscription_plan)
28
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, coupon: 'test')
29
+ StartSubscription.call(subscription)
30
+ expect(subscription.reload.stripe_id).to_not be_nil
31
+ sub = Stripe::Customer.retrieve(subscription.stripe_customer_id).subscriptions.retrieve(subscription.stripe_id)
32
+ end
33
+
34
+ describe "on error" do
35
+ it "should update the error attribute" do
36
+ StripeMock.prepare_card_error(:card_declined, :new_customer)
37
+ plan = create(:subscription_plan)
38
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token)
39
+ StartSubscription.call(subscription)
40
+ expect(subscription.reload.error).to_not be_nil
41
+ expect(subscription.errored?).to be true
42
+ end
43
+ end
44
+
45
+ it "should re-use an existing customer" do
46
+ plan = create(:subscription_plan)
47
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, owner: user)
48
+ StartSubscription.call(subscription)
49
+ CancelSubscription.call(subscription)
50
+
51
+ subscription2 = create(:subscription, state: 'processing', plan: plan, owner: user)
52
+ StartSubscription.call(subscription2)
53
+ expect(subscription2.reload.stripe_customer_id).to_not be_nil
54
+ expect(subscription2.reload.stripe_customer_id).to eq subscription.reload.stripe_customer_id
55
+ end
56
+
57
+ it "should not re-use an existing customer that has been deleted" do
58
+ plan = create(:subscription_plan)
59
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, owner: user)
60
+ StartSubscription.call(subscription)
61
+ deleted_customer_id = subscription.reload.stripe_customer_id
62
+ Stripe::Customer.retrieve(deleted_customer_id).delete
63
+
64
+ subscription2 = create(:subscription, state: 'processing', plan: plan, owner: user)
65
+ StartSubscription.call(subscription2)
66
+ expect(subscription2.reload.stripe_customer_id).to_not be_nil
67
+ expect(subscription2.reload.stripe_customer_id).to_not eq deleted_customer_id
68
+ end
69
+
70
+ it "should create an invoice item with a setup fee" do
71
+ plan = create(:subscription_plan)
72
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, owner: user, setup_fee: 100)
73
+ StartSubscription.call(subscription)
74
+
75
+ ii = Stripe::InvoiceItem.all(customer: subscription.stripe_customer_id).first
76
+ expect(ii).to_not be_nil
77
+ expect(ii.amount).to eq 100
78
+ expect(ii.description).to eq "Setup Fee"
79
+ end
80
+
81
+ it "should allow the plan to override the setup fee description" do
82
+ plan = create(:subscription_plan)
83
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, owner: user, setup_fee: 100)
84
+
85
+ expect(plan).to receive(:setup_fee_description).with(subscription).and_return('Random Mystery Fee')
86
+ StartSubscription.call(subscription)
87
+
88
+ ii = Stripe::InvoiceItem.all(customer: subscription.stripe_customer_id).first
89
+ expect(ii).to_not be_nil
90
+ expect(ii.amount).to eq 100
91
+ expect(ii.description).to eq 'Random Mystery Fee'
92
+ end
93
+ end
94
+ end
95
+ end
@@ -5,13 +5,17 @@ module Payola
5
5
  let(:stripe_helper) { StripeMock.create_test_helper }
6
6
 
7
7
  describe "#call" do
8
- before do
8
+ before(:each) do
9
9
  @plan = create(:subscription_plan)
10
+ expect(@plan.errors).to be_blank
10
11
 
11
12
  token = StripeMock.generate_card_token({})
12
- @subscription = create(:subscription, quantity: 1, stripe_token: token)
13
+ @subscription = create(:subscription, quantity: 1, stripe_token: token, plan: @plan, state: 'processing')
13
14
  StartSubscription.call(@subscription)
14
- Payola::ChangeSubscriptionQuantity.call(@subscription, 2)
15
+ expect(@subscription.error).to be_nil
16
+ expect(@subscription.active?).to be_truthy
17
+ @subscription = Payola::ChangeSubscriptionQuantity.call(@subscription, 2)
18
+ expect(@subscription.errors).to be_blank
15
19
  end
16
20
 
17
21
  it "should change the quantity on the stripe subscription" do
@@ -45,6 +45,19 @@ module Payola
45
45
  expect(subscription2.reload.stripe_customer_id).to eq subscription.reload.stripe_customer_id
46
46
  end
47
47
 
48
+ it "should not re-use an existing customer that has been deleted" do
49
+ plan = create(:subscription_plan)
50
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, owner: user)
51
+ StartSubscription.call(subscription)
52
+ deleted_customer_id = subscription.reload.stripe_customer_id
53
+ Stripe::Customer.retrieve(deleted_customer_id).delete
54
+
55
+ subscription2 = create(:subscription, state: 'processing', plan: plan, owner: user)
56
+ StartSubscription.call(subscription2)
57
+ expect(subscription2.reload.stripe_customer_id).to_not be_nil
58
+ expect(subscription2.reload.stripe_customer_id).to_not eq deleted_customer_id
59
+ end
60
+
48
61
  it "should create an invoice item with a setup fee" do
49
62
  plan = create(:subscription_plan)
50
63
  subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, owner: user, setup_fee: 100)
@@ -66,7 +79,7 @@ module Payola
66
79
  ii = Stripe::InvoiceItem.all(customer: subscription.stripe_customer_id).first
67
80
  expect(ii).to_not be_nil
68
81
  expect(ii.amount).to eq 100
69
- expect(ii.description).to eq 'Random Mystery Fee'
82
+ expect(ii.description).to eq 'Random Mystery Fee'
70
83
  end
71
84
  end
72
85
  end
@@ -9,8 +9,10 @@ module Payola
9
9
  @plan = create(:subscription_plan)
10
10
 
11
11
  token = StripeMock.generate_card_token({})
12
- @subscription = create(:subscription, plan: @plan, stripe_token: token)
12
+ @subscription = create(:subscription, plan: @plan, stripe_token: token, state: 'processing')
13
13
  StartSubscription.call(@subscription)
14
+ expect(@subscription.error).to be_nil
15
+ expect(@subscription.active?).to be_truthy
14
16
  token2 = StripeMock.generate_card_token({last4: '2233', exp_year: '2021', exp_month: '11', brand: 'JCB'})
15
17
  Payola::UpdateCard.call(@subscription, token2)
16
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: payola-payments
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Keen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-01 00:00:00.000000000 Z
11
+ date: 2015-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -42,14 +42,14 @@ dependencies:
42
42
  name: stripe
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.20.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.20.1
55
55
  - !ruby/object:Gem::Dependency
@@ -198,6 +198,7 @@ files:
198
198
  - app/models/payola/sale.rb
199
199
  - app/models/payola/stripe_webhook.rb
200
200
  - app/models/payola/subscription.rb
201
+ - app/services/payola/#update_card.rb#
201
202
  - app/services/payola/cancel_subscription.rb
202
203
  - app/services/payola/change_subscription_plan.rb
203
204
  - app/services/payola/change_subscription_quantity.rb
@@ -374,6 +375,7 @@ files:
374
375
  - spec/models/payola/stripe_webhook_spec.rb
375
376
  - spec/models/payola/subscription_spec.rb
376
377
  - spec/payola_spec.rb
378
+ - spec/services/payola/#start_subscription_spec.rb#
377
379
  - spec/services/payola/cancel_subscription_spec.rb
378
380
  - spec/services/payola/change_subscription_plan_spec.rb
379
381
  - spec/services/payola/change_subscription_quantity_spec.rb
@@ -524,6 +526,7 @@ test_files:
524
526
  - spec/models/payola/stripe_webhook_spec.rb
525
527
  - spec/models/payola/subscription_spec.rb
526
528
  - spec/payola_spec.rb
529
+ - spec/services/payola/#start_subscription_spec.rb#
527
530
  - spec/services/payola/cancel_subscription_spec.rb
528
531
  - spec/services/payola/change_subscription_plan_spec.rb
529
532
  - spec/services/payola/change_subscription_quantity_spec.rb