payola-payments 1.4.0 → 1.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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +200 -0
  3. data/LICENSE +6 -0
  4. data/README.md +80 -0
  5. data/Rakefile +5 -4
  6. data/app/assets/javascripts/payola/application.js +3 -3
  7. data/app/assets/javascripts/payola/checkout_button.js +29 -19
  8. data/app/assets/javascripts/payola/subscription_checkout_button.js +7 -1
  9. data/app/assets/javascripts/payola/subscription_form_onestep.js +27 -0
  10. data/app/assets/stylesheets/payola/application.css +4 -4
  11. data/app/controllers/concerns/payola/affiliate_behavior.rb +1 -1
  12. data/app/controllers/concerns/payola/status_behavior.rb +1 -1
  13. data/app/controllers/payola/application_controller.rb +8 -0
  14. data/app/controllers/payola/cards_controller.rb +14 -14
  15. data/app/controllers/payola/customers_controller.rb +11 -12
  16. data/app/controllers/payola/subscriptions_controller.rb +16 -8
  17. data/app/controllers/payola/transactions_controller.rb +1 -1
  18. data/app/models/concerns/payola/plan.rb +2 -1
  19. data/app/models/payola/subscription.rb +5 -0
  20. data/app/services/payola/cancel_subscription.rb +6 -5
  21. data/app/services/payola/change_subscription_plan.rb +3 -1
  22. data/app/services/payola/change_subscription_quantity.rb +1 -1
  23. data/app/services/payola/create_sale.rb +12 -2
  24. data/app/services/payola/create_subscription.rb +1 -1
  25. data/app/services/payola/start_subscription.rb +9 -1
  26. data/app/services/payola/update_customer.rb +1 -1
  27. data/app/views/payola/subscriptions/_change_plan.html.erb +2 -0
  28. data/app/views/payola/subscriptions/_checkout.html.erb +1 -1
  29. data/app/views/payola/transactions/_checkout.html.erb +4 -2
  30. data/config/locales/en.yml +17 -0
  31. data/db/migrate/20151205004838_change_tax_percent_format_in_payola_subscriptions.rb +9 -0
  32. data/lib/payola.rb +6 -0
  33. data/lib/payola/version.rb +1 -1
  34. data/spec/concerns/plan_spec.rb +16 -4
  35. data/spec/controllers/payola/cards_controller_spec.rb +92 -8
  36. data/spec/controllers/payola/customers_controller_spec.rb +47 -4
  37. data/spec/controllers/payola/subscriptions_controller_spec.rb +59 -46
  38. data/spec/controllers/payola/transactions_controller_spec.rb +33 -30
  39. data/spec/dummy/Rakefile +1 -1
  40. data/spec/dummy/app/assets/javascripts/application.js +3 -3
  41. data/spec/dummy/app/assets/stylesheets/application.css +4 -4
  42. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  43. data/spec/dummy/app/views/layouts/application.html.erb +27 -11
  44. data/spec/dummy/bin/rails +1 -1
  45. data/spec/dummy/config.ru +2 -1
  46. data/spec/dummy/config/application.rb +1 -2
  47. data/spec/dummy/config/boot.rb +2 -2
  48. data/spec/dummy/config/environment.rb +1 -1
  49. data/spec/dummy/config/environments/development.rb +1 -37
  50. data/spec/dummy/config/environments/production.rb +1 -82
  51. data/spec/dummy/config/environments/rails_4/development.rb +37 -0
  52. data/spec/dummy/config/environments/rails_4/production.rb +82 -0
  53. data/spec/dummy/config/environments/rails_4/test.rb +45 -0
  54. data/spec/dummy/config/environments/rails_5/development.rb +54 -0
  55. data/spec/dummy/config/environments/rails_5/production.rb +86 -0
  56. data/spec/dummy/config/environments/rails_5/test.rb +44 -0
  57. data/spec/dummy/config/environments/test.rb +1 -45
  58. data/spec/dummy/config/initializers/assets.rb +3 -0
  59. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -1
  60. data/spec/dummy/config/initializers/new_framework_defaults.rb +26 -0
  61. data/spec/dummy/config/secrets.yml +1 -1
  62. data/spec/dummy/config/spring.rb +8 -0
  63. data/spec/dummy/db/schema.rb +9 -12
  64. data/spec/dummy/db/test.sqlite3 +0 -0
  65. data/spec/dummy/log/test.log +134732 -0
  66. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  67. data/spec/dummy/public/apple-touch-icon.png +0 -0
  68. data/spec/models/payola/env_wrapper_spec.rb +13 -0
  69. data/spec/models/payola/sale_spec.rb +7 -7
  70. data/spec/models/payola/subscription_spec.rb +8 -3
  71. data/spec/payola_spec.rb +8 -8
  72. data/spec/services/payola/cancel_subscription_spec.rb +20 -4
  73. data/spec/services/payola/change_subscription_plan_spec.rb +2 -1
  74. data/spec/services/payola/change_subscription_quantity_spec.rb +23 -7
  75. data/spec/services/payola/charge_card_spec.rb +30 -25
  76. data/spec/services/payola/invoice_failed_spec.rb +1 -0
  77. data/spec/services/payola/invoice_paid_spec.rb +1 -0
  78. data/spec/services/payola/start_subscription_spec.rb +15 -0
  79. data/spec/spec_helper.rb +4 -2
  80. data/spec/support/http_methods_with_keyword_args.rb +21 -0
  81. data/spec/support/params_helper.rb +9 -0
  82. data/spec/worker_spec.rb +2 -2
  83. metadata +41 -13
  84. data/config/database.yml.ci +0 -6
File without changes
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ module Payola
4
+ describe EnvWrapper do
5
+ describe "delegations" do
6
+ it "should delgate is_a?" do
7
+ ENV['whatever'] = 'some value'
8
+ wrap = EnvWrapper.new('whatever')
9
+ expect(wrap.is_a?(String)).to be_truthy
10
+ end
11
+ end
12
+ end
13
+ end
@@ -40,7 +40,7 @@ module Payola
40
40
 
41
41
  describe "#process!" do
42
42
  it "should charge the card" do
43
- Payola::ChargeCard.should_receive(:call)
43
+ expect(Payola::ChargeCard).to receive(:call)
44
44
 
45
45
  sale = create(:sale)
46
46
  sale.process!
@@ -50,8 +50,8 @@ module Payola
50
50
  describe "#finish" do
51
51
  it "should instrument finish" do
52
52
  sale = create(:sale, state: 'processing')
53
- Payola.should_receive(:instrument).with('payola.product.sale.finished', sale)
54
- Payola.should_receive(:instrument).with('payola.sale.finished', sale)
53
+ expect(Payola).to receive(:instrument).with('payola.product.sale.finished', sale)
54
+ expect(Payola).to receive(:instrument).with('payola.sale.finished', sale)
55
55
 
56
56
  sale.finish!
57
57
  end
@@ -60,8 +60,8 @@ module Payola
60
60
  describe "#fail" do
61
61
  it "should instrument fail" do
62
62
  sale = create(:sale, state: 'processing')
63
- Payola.should_receive(:instrument).with('payola.product.sale.failed', sale)
64
- Payola.should_receive(:instrument).with('payola.sale.failed', sale)
63
+ expect(Payola).to receive(:instrument).with('payola.product.sale.failed', sale)
64
+ expect(Payola).to receive(:instrument).with('payola.sale.failed', sale)
65
65
 
66
66
  sale.fail!
67
67
  end
@@ -70,8 +70,8 @@ module Payola
70
70
  describe "#refund" do
71
71
  it "should instrument refund" do
72
72
  sale = create(:sale, state: 'finished')
73
- Payola.should_receive(:instrument).with('payola.product.sale.refunded', sale)
74
- Payola.should_receive(:instrument).with('payola.sale.refunded', sale)
73
+ expect(Payola).to receive(:instrument).with('payola.product.sale.refunded', sale)
74
+ expect(Payola).to receive(:instrument).with('payola.sale.refunded', sale)
75
75
  sale.refund!
76
76
  end
77
77
  end
@@ -29,7 +29,7 @@ module Payola
29
29
  subscription = build(:subscription, stripe_token: nil)
30
30
  expect(subscription.valid?).to be true
31
31
  end
32
-
32
+
33
33
  it "should validate nil stripe_token when the subscription owner is present" do
34
34
  plan = create(:subscription_plan)
35
35
  plan.amount = 0
@@ -65,6 +65,7 @@ module Payola
65
65
  plan = create(:subscription_plan)
66
66
  subscription = build(:subscription, plan: plan)
67
67
  stripe_sub = Stripe::Customer.create.subscriptions.create(plan: plan.stripe_id, source: StripeMock.generate_card_token(last4: '1234', exp_year: Time.now.year + 1))
68
+
68
69
  old_start = subscription.current_period_start
69
70
  old_end = subscription.current_period_end
70
71
  trial_start = subscription.trial_start
@@ -85,9 +86,11 @@ module Payola
85
86
  end
86
87
 
87
88
  it "should sync non-timestamp fields" do
88
- plan = create(:subscription_plan)
89
- subscription = build(:subscription, plan: plan)
89
+ plan = create(:subscription_plan, amount: 200)
90
+ subscription = build(:subscription, plan: plan, amount: 50)
90
91
  stripe_sub = Stripe::Customer.create.subscriptions.create(plan: plan.stripe_id, source: StripeMock.generate_card_token(last4: '1234', exp_year: Time.now.year + 1))
92
+ coupon = create(:payola_coupon)
93
+ allow(stripe_sub).to receive_message_chain(:discount, :coupon, :id).and_return(coupon.code)
91
94
 
92
95
  expect(stripe_sub).to receive(:quantity).and_return(10).at_least(1)
93
96
  expect(stripe_sub).to receive(:cancel_at_period_end).and_return(true).at_least(1)
@@ -97,8 +100,10 @@ module Payola
97
100
  subscription.reload
98
101
 
99
102
  expect(subscription.quantity).to eq 10
103
+ expect(subscription.amount).to eq 200
100
104
  expect(subscription.stripe_status).to eq 'active'
101
105
  expect(subscription.cancel_at_period_end).to eq true
106
+ expect(subscription.coupon).to eq coupon.code
102
107
  end
103
108
  end
104
109
  end
@@ -25,15 +25,15 @@ module Payola
25
25
 
26
26
  describe "instrumentation" do
27
27
  it "should pass subscribe to StripeEvent" do
28
- StripeEvent.should_receive(:subscribe)
28
+ expect(StripeEvent).to receive(:subscribe)
29
29
  Payola.subscribe('foo', 'blah')
30
30
  end
31
31
  it "should pass instrument to StripeEvent.backend" do
32
- ActiveSupport::Notifications.should_receive(:instrument)
32
+ expect(ActiveSupport::Notifications).to receive(:instrument)
33
33
  Payola.instrument('foo', 'blah')
34
34
  end
35
35
  it "should pass all to StripeEvent" do
36
- StripeEvent.should_receive(:all)
36
+ expect(StripeEvent).to receive(:all)
37
37
  Payola.all('blah')
38
38
  end
39
39
  end
@@ -48,7 +48,7 @@ module Payola
48
48
 
49
49
  describe "with symbol" do
50
50
  it "should find the correct background worker" do
51
- FakeWorker.should_receive(:call)
51
+ expect(FakeWorker).to receive(:call)
52
52
 
53
53
  Payola.background_worker = :fake
54
54
  Payola.queue!('blah')
@@ -76,8 +76,8 @@ module Payola
76
76
 
77
77
  describe "with nothing" do
78
78
  it "should call autofind" do
79
- FakeWorker.should_receive(:call).and_return(:true)
80
- Payola::Worker.should_receive(:autofind).and_return(FakeWorker)
79
+ expect(FakeWorker).to receive(:call).and_return(:true)
80
+ expect(Payola::Worker).to receive(:autofind).and_return(FakeWorker)
81
81
  Payola.queue!('blah')
82
82
  end
83
83
  end
@@ -98,7 +98,7 @@ module Payola
98
98
  end
99
99
  end
100
100
 
101
- FakeWorker.should_receive(:call).with(Payola::SendMail, 'Payola::FakeMailer', 'receipt', 1, 2)
101
+ expect(FakeWorker).to receive(:call).with(Payola::SendMail, 'Payola::FakeMailer', 'receipt', 1, 2)
102
102
  Payola.send_mail(FakeMailer, :receipt, 1, 2)
103
103
  end
104
104
  end
@@ -109,7 +109,7 @@ module Payola
109
109
  end
110
110
 
111
111
  it "should set up listeners for auto emails" do
112
- Payola.should_receive(:subscribe).with('payola.sale.finished').at_least(2)
112
+ expect(Payola).to receive(:subscribe).with('payola.sale.finished').at_least(2)
113
113
  Payola.send_email_for :receipt, :admin_receipt
114
114
  end
115
115
  end
@@ -10,14 +10,30 @@ module Payola
10
10
  @subscription = create(:subscription, plan: plan, stripe_token: token)
11
11
  @subscription.process!
12
12
  end
13
- it "should cancel a subscription" do
14
- CancelSubscription.call(@subscription)
15
- expect(@subscription.reload.state).to eq 'canceled'
13
+
14
+ context "when at_period_end is true" do
15
+ it "leaves the subscription in the active state" do
16
+ CancelSubscription.call(@subscription, at_period_end: true)
17
+ expect(@subscription.reload.state).to eq 'active'
18
+ end
19
+
20
+ it "sets subscription.cancel_at_period_end to true" do
21
+ CancelSubscription.call(@subscription, at_period_end: true)
22
+ expect(@subscription.reload.cancel_at_period_end).to be true
23
+ end
16
24
  end
25
+
26
+ context "when at_period_end is not true" do
27
+ it "cancels the subscription immediately" do
28
+ CancelSubscription.call(@subscription)
29
+ expect(@subscription.reload.state).to eq 'canceled'
30
+ end
31
+ end
32
+
17
33
  it "should not change the state if an error occurs" do
18
34
  custom_error = StandardError.new("Customer not found")
19
35
  StripeMock.prepare_error(custom_error, :get_customer)
20
- expect { CancelSubscription.call(@subscription) }.to raise_error
36
+ expect { CancelSubscription.call(@subscription) }.to raise_error("Customer not found")
21
37
 
22
38
  expect(@subscription.reload.state).to eq 'active'
23
39
  end
@@ -50,7 +50,8 @@ module Payola
50
50
  context "set" do
51
51
  before do
52
52
  @coupon = build :payola_coupon
53
- Payola::ChangeSubscriptionPlan.call(@subscription, @plan2, @coupon)
53
+ @quantity = 1
54
+ Payola::ChangeSubscriptionPlan.call(@subscription, @plan2, @quantity, @coupon)
54
55
  end
55
56
 
56
57
  it "should have the coupon" do
@@ -5,28 +5,44 @@ module Payola
5
5
  let(:stripe_helper) { StripeMock.create_test_helper }
6
6
 
7
7
  describe "#call" do
8
+ let(:original_quantity) { 1 }
9
+ let(:new_quantity) { original_quantity + 1 }
10
+
8
11
  before(:each) do
9
12
  @plan = create(:subscription_plan)
10
13
  expect(@plan.errors).to be_blank
11
14
 
12
15
  token = StripeMock.generate_card_token({})
13
- @subscription = create(:subscription, quantity: 1, stripe_token: token, plan: @plan, state: 'processing')
16
+ @subscription = create(:subscription, quantity: original_quantity, stripe_token: token, plan: @plan, state: 'processing')
14
17
  StartSubscription.call(@subscription)
15
18
  expect(@subscription.error).to be_nil
16
19
  expect(@subscription.active?).to be_truthy
17
- @subscription = Payola::ChangeSubscriptionQuantity.call(@subscription, 2)
18
- expect(@subscription.errors).to be_blank
20
+ end
21
+
22
+ it "should not produce any subscription errors" do
23
+ subscription = Payola::ChangeSubscriptionQuantity.call(@subscription, new_quantity)
24
+
25
+ expect(subscription.errors).to be_blank
19
26
  end
20
27
 
21
28
  it "should change the quantity on the stripe subscription" do
22
- customer = Stripe::Customer.retrieve(@subscription.stripe_customer_id)
23
- sub = customer.subscriptions.retrieve(@subscription.stripe_id)
29
+ subscription = Payola::ChangeSubscriptionQuantity.call(@subscription, new_quantity)
24
30
 
25
- expect(sub.quantity).to eq 2
31
+ customer = Stripe::Customer.retrieve(subscription.stripe_customer_id)
32
+ sub = customer.subscriptions.retrieve(subscription.stripe_id)
33
+ expect(sub.quantity).to eq new_quantity
26
34
  end
27
35
 
28
36
  it "should change the quantity on the payola subscription" do
29
- expect(@subscription.reload.quantity).to eq 2
37
+ subscription = Payola::ChangeSubscriptionQuantity.call(@subscription, new_quantity)
38
+
39
+ expect(subscription.reload.quantity).to eq new_quantity
40
+ end
41
+
42
+ it "should notify quantity has changed" do
43
+ expect(@subscription).to receive(:instrument_quantity_changed).with(original_quantity)
44
+
45
+ Payola::ChangeSubscriptionQuantity.call(@subscription, new_quantity)
30
46
  end
31
47
  end
32
48
  end
@@ -4,34 +4,39 @@ module Payola
4
4
  describe ChargeCard do
5
5
  let(:stripe_helper) { StripeMock.create_test_helper }
6
6
  describe "#call" do
7
- it "should create a customer" do
8
- sale = create(:sale, state: 'processing', stripe_token: stripe_helper.generate_card_token)
9
- ChargeCard.call(sale)
10
- expect(sale.reload.stripe_customer_id).to_not be_nil
11
- end
7
+ describe "on success" do
8
+ before do
9
+ expect(Stripe::BalanceTransaction).to receive(:retrieve).and_return(OpenStruct.new( amount: 100, fee: 3.29, currency: 'usd' ))
10
+ end
11
+ it "should create a customer" do
12
+ sale = create(:sale, state: 'processing', stripe_token: stripe_helper.generate_card_token)
13
+ ChargeCard.call(sale)
14
+ expect(sale.reload.stripe_customer_id).to_not be_nil
15
+ end
12
16
 
13
- it "should not create a customer if one already exists" do
14
- customer = Stripe::Customer.create
15
- sale = create(:sale, state: 'processing', stripe_customer_id: customer.id)
16
- expect(Stripe::Customer).to receive(:retrieve).and_return(customer)
17
- ChargeCard.call(sale)
18
- expect(sale.reload.stripe_customer_id).to eq customer.id
19
- expect(sale.state).to eq 'finished'
20
- end
17
+ it "should not create a customer if one already exists" do
18
+ customer = Stripe::Customer.create
19
+ sale = create(:sale, state: 'processing', stripe_customer_id: customer.id)
20
+ expect(Stripe::Customer).to receive(:retrieve).and_return(customer)
21
+ ChargeCard.call(sale)
22
+ expect(sale.reload.stripe_customer_id).to eq customer.id
23
+ expect(sale.state).to eq 'finished'
24
+ end
21
25
 
22
- it "should create a charge" do
23
- sale = create(:sale, state: 'processing', stripe_token: stripe_helper.generate_card_token)
24
- ChargeCard.call(sale)
25
- expect(sale.reload.stripe_id).to_not be_nil
26
- expect(sale.reload.card_last4).to_not be_nil
27
- expect(sale.reload.card_expiration).to_not be_nil
28
- expect(sale.reload.card_type).to_not be_nil
29
- end
26
+ it "should create a charge" do
27
+ sale = create(:sale, state: 'processing', stripe_token: stripe_helper.generate_card_token)
28
+ ChargeCard.call(sale)
29
+ expect(sale.reload.stripe_id).to_not be_nil
30
+ expect(sale.reload.card_last4).to_not be_nil
31
+ expect(sale.reload.card_expiration).to_not be_nil
32
+ expect(sale.reload.card_type).to_not be_nil
33
+ end
30
34
 
31
- it "should get the fee from the balance transaction" do
32
- sale = create(:sale, state: 'processing', stripe_token: stripe_helper.generate_card_token)
33
- ChargeCard.call(sale)
34
- expect(sale.reload.fee_amount).to_not be_nil
35
+ it "should get the fee from the balance transaction" do
36
+ sale = create(:sale, state: 'processing', stripe_token: stripe_helper.generate_card_token)
37
+ ChargeCard.call(sale)
38
+ expect(sale.reload.fee_amount).to_not be_nil
39
+ end
35
40
  end
36
41
 
37
42
  describe "on error" do
@@ -15,6 +15,7 @@ module Payola
15
15
  sub = create(:subscription, plan: plan, stripe_customer_id: customer.id, stripe_id: customer.subscriptions.first.id)
16
16
 
17
17
  charge = Stripe::Charge.create(amount: 100, currency: 'usd', failure_message: 'Failed! OMG!')
18
+ expect(Stripe::BalanceTransaction).to receive(:retrieve).and_return(OpenStruct.new( amount: 100, fee: 3.29, currency: 'usd' ))
18
19
  event = StripeMock.mock_webhook_event('invoice.payment_failed', subscription: sub.stripe_id, charge: charge.id)
19
20
 
20
21
  count = Payola::Sale.count
@@ -35,6 +35,7 @@ module Payola
35
35
  sub = create(:subscription, plan: plan, stripe_customer_id: customer.id, stripe_id: customer.subscriptions.first.id)
36
36
 
37
37
  charge = Stripe::Charge.create(amount: 100, currency: 'usd')
38
+ expect(Stripe::BalanceTransaction).to receive(:retrieve).and_return(OpenStruct.new( amount: 100, fee: 3.29, currency: 'usd' ))
38
39
  event = StripeMock.mock_webhook_event('invoice.payment_succeeded', subscription: sub.stripe_id, charge: charge.id)
39
40
 
40
41
  count = Payola::Sale.count
@@ -69,6 +69,21 @@ module Payola
69
69
  expect(subscription2.reload.stripe_customer_id).to eq subscription.reload.stripe_customer_id
70
70
  end
71
71
 
72
+ it "should assign a passed payment source to an existing customer without one" do
73
+ plan = create(:subscription_plan, amount:0)
74
+ subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: nil, owner: user)
75
+ StartSubscription.call(subscription)
76
+ expect(Stripe::Customer.retrieve(subscription.reload.stripe_customer_id).default_source).to be_nil
77
+
78
+ plan2 = create(:subscription_plan)
79
+ subscription2 = create(:subscription, state: 'processing', plan: plan2, stripe_token: token, owner: user)
80
+ StartSubscription.call(subscription2)
81
+
82
+ stripe_customer_id = subscription2.reload.stripe_customer_id
83
+ expect(stripe_customer_id).to eq subscription.reload.stripe_customer_id
84
+ expect(Stripe::Customer.retrieve(stripe_customer_id).default_source).to_not be_nil
85
+ end
86
+
72
87
  it "should not re-use an existing customer that has been deleted" do
73
88
  plan = create(:subscription_plan)
74
89
  subscription = create(:subscription, state: 'processing', plan: plan, stripe_token: token, owner: user)
@@ -15,10 +15,12 @@ end
15
15
  ENV["RAILS_ENV"] ||= 'test'
16
16
  require File.expand_path("../dummy/config/environment", __FILE__)
17
17
  require 'rspec/rails'
18
- require 'rspec/autorun'
19
18
  require 'factory_girl_rails'
20
19
  require 'stripe_mock'
21
20
 
21
+ ENV['STRIPE_SECRET_KEY'] = 'sk_testing123'
22
+ ENV['STRIPE_PUBLISHABLE_KEY'] = 'pk_test123'
23
+
22
24
  # Requires supporting ruby files with custom matchers and macros, etc, in
23
25
  # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
24
26
  # run as spec files by default. This means that files in spec/support that end
@@ -26,7 +28,7 @@ require 'stripe_mock'
26
28
  # run twice. It is recommended that you do not name files matching this glob to
27
29
  # end with _spec.rb. You can configure this pattern with with the --pattern
28
30
  # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
29
- Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
31
+ Dir[Rails.root.join("../support/**/*.rb")].each { |f| require f }
30
32
 
31
33
  # Checks for pending migrations before tests are run.
32
34
  # If you are not using ActiveRecord, you can remove this line.
@@ -0,0 +1,21 @@
1
+ if Rails::VERSION::MAJOR == 4
2
+
3
+ module HTTPMethodsWithKeywordArgs
4
+ def get(action, params: nil, headers: nil)
5
+ super(action, params, headers)
6
+ end
7
+
8
+ def post(action, params: nil, headers: nil)
9
+ super(action, params, headers)
10
+ end
11
+
12
+ def delete(action, params: nil, headers: nil)
13
+ super(action, params, headers)
14
+ end
15
+ end
16
+
17
+ RSpec.configure do |config|
18
+ config.include HTTPMethodsWithKeywordArgs, type: :controller
19
+ end
20
+
21
+ end
@@ -0,0 +1,9 @@
1
+ module ParamsHelper
2
+ def permitted_params(params)
3
+ ActionController::Parameters.new(params).permit!
4
+ end
5
+ end
6
+
7
+ RSpec.configure do |config|
8
+ config.include ParamsHelper, type: :controller
9
+ end
@@ -49,7 +49,7 @@ module Payola
49
49
 
50
50
  describe "#call" do
51
51
  it "should call perform_async" do
52
- Payola::Worker::Sidekiq.should_receive(:perform_async)
52
+ expect(Payola::Worker::Sidekiq).to receive(:perform_async)
53
53
  Payola::Worker::Sidekiq.call(Payola::TestService, double)
54
54
  end
55
55
  end
@@ -88,7 +88,7 @@ module Payola
88
88
 
89
89
  describe "#call" do
90
90
  it "should call perform_later" do
91
- Payola::Worker::ActiveJob.should_receive(:perform_later)
91
+ expect(Payola::Worker::ActiveJob).to receive(:perform_later)
92
92
  Payola::Worker::ActiveJob.call(Payola::TestService, double)
93
93
  end
94
94
  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.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Keen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-28 00:00:00.000000000 Z
11
+ date: 2016-10-27 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
@@ -126,16 +126,16 @@ dependencies:
126
126
  name: stripe-ruby-mock
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 2.1.0
131
+ version: 2.3.1
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: 2.1.0
138
+ version: 2.3.1
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: sucker_punch
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +171,9 @@ executables: []
171
171
  extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
+ - CHANGELOG.md
175
+ - LICENSE
176
+ - README.md
174
177
  - Rakefile
175
178
  - app/assets/javascripts/payola.js
176
179
  - app/assets/javascripts/payola/application.js
@@ -242,7 +245,7 @@ files:
242
245
  - app/views/payola/transactions/new.html.erb
243
246
  - app/views/payola/transactions/show.html.erb
244
247
  - app/views/payola/transactions/wait.html.erb
245
- - config/database.yml.ci
248
+ - config/locales/en.yml
246
249
  - config/routes.rb
247
250
  - db/migrate/20141001170138_create_payola_sales.rb
248
251
  - db/migrate/20141001203541_create_payola_stripe_webhooks.rb
@@ -264,6 +267,7 @@ files:
264
267
  - db/migrate/20141122020755_add_setup_fee_to_payola_subscriptions.rb
265
268
  - db/migrate/20141213205847_add_active_to_payola_coupon.rb
266
269
  - db/migrate/20150930164135_add_tax_percent_to_payola_subscriptions.rb
270
+ - db/migrate/20151205004838_change_tax_percent_format_in_payola_subscriptions.rb
267
271
  - lib/generators/payola/install_generator.rb
268
272
  - lib/generators/payola/templates/initializer.rb
269
273
  - lib/payola-payments.rb
@@ -314,6 +318,12 @@ files:
314
318
  - spec/dummy/config/environment.rb
315
319
  - spec/dummy/config/environments/development.rb
316
320
  - spec/dummy/config/environments/production.rb
321
+ - spec/dummy/config/environments/rails_4/development.rb
322
+ - spec/dummy/config/environments/rails_4/production.rb
323
+ - spec/dummy/config/environments/rails_4/test.rb
324
+ - spec/dummy/config/environments/rails_5/development.rb
325
+ - spec/dummy/config/environments/rails_5/production.rb
326
+ - spec/dummy/config/environments/rails_5/test.rb
317
327
  - spec/dummy/config/environments/test.rb
318
328
  - spec/dummy/config/initializers/assets.rb
319
329
  - spec/dummy/config/initializers/backtrace_silencers.rb
@@ -321,6 +331,7 @@ files:
321
331
  - spec/dummy/config/initializers/filter_parameter_logging.rb
322
332
  - spec/dummy/config/initializers/inflections.rb
323
333
  - spec/dummy/config/initializers/mime_types.rb
334
+ - spec/dummy/config/initializers/new_framework_defaults.rb
324
335
  - spec/dummy/config/initializers/payola.rb
325
336
  - spec/dummy/config/initializers/session_store.rb
326
337
  - spec/dummy/config/initializers/wrap_parameters.rb
@@ -328,6 +339,7 @@ files:
328
339
  - spec/dummy/config/locales/en.yml
329
340
  - spec/dummy/config/routes.rb
330
341
  - spec/dummy/config/secrets.yml
342
+ - spec/dummy/config/spring.rb
331
343
  - spec/dummy/db/development.sqlite3
332
344
  - spec/dummy/db/migrate/20141001230848_create_products.rb
333
345
  - spec/dummy/db/migrate/20141029140518_create_owners.rb
@@ -341,6 +353,8 @@ files:
341
353
  - spec/dummy/public/404.html
342
354
  - spec/dummy/public/422.html
343
355
  - spec/dummy/public/500.html
356
+ - spec/dummy/public/apple-touch-icon-precomposed.png
357
+ - spec/dummy/public/apple-touch-icon.png
344
358
  - spec/dummy/public/favicon.ico
345
359
  - spec/dummy/spec/controllers/buy_controller_spec.rb
346
360
  - spec/dummy/spec/factories/products.rb
@@ -439,6 +453,7 @@ files:
439
453
  - spec/mailers/payola/admin_mailer_spec.rb
440
454
  - spec/mailers/payola/receipt_mailer_spec.rb
441
455
  - spec/models/payola/coupon_spec.rb
456
+ - spec/models/payola/env_wrapper_spec.rb
442
457
  - spec/models/payola/sale_spec.rb
443
458
  - spec/models/payola/stripe_webhook_spec.rb
444
459
  - spec/models/payola/subscription_spec.rb
@@ -464,14 +479,14 @@ files:
464
479
  - spec/services/payola/update_card_spec.rb
465
480
  - spec/services/payola/update_customer_spec.rb
466
481
  - spec/spec_helper.rb
482
+ - spec/support/http_methods_with_keyword_args.rb
483
+ - spec/support/params_helper.rb
467
484
  - spec/worker_spec.rb
468
485
  homepage: https://www.payola.io
469
486
  licenses:
470
487
  - LGPL-3.0
471
488
  metadata: {}
472
- post_install_message: |
473
- Payola v1.4.0. See LICENSE and the LGPL-3.0 for licensing details.
474
- Upgrade to Payola Pro for more features and support. https://www.payola.io/pro
489
+ post_install_message:
475
490
  rdoc_options: []
476
491
  require_paths:
477
492
  - lib
@@ -487,7 +502,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
487
502
  version: '0'
488
503
  requirements: []
489
504
  rubyforge_project:
490
- rubygems_version: 2.2.2
505
+ rubygems_version: 2.5.1
491
506
  signing_key:
492
507
  specification_version: 4
493
508
  summary: Drop-in Rails engine for accepting payments with Stripe
@@ -527,6 +542,12 @@ test_files:
527
542
  - spec/dummy/config/environment.rb
528
543
  - spec/dummy/config/environments/development.rb
529
544
  - spec/dummy/config/environments/production.rb
545
+ - spec/dummy/config/environments/rails_4/development.rb
546
+ - spec/dummy/config/environments/rails_4/production.rb
547
+ - spec/dummy/config/environments/rails_4/test.rb
548
+ - spec/dummy/config/environments/rails_5/development.rb
549
+ - spec/dummy/config/environments/rails_5/production.rb
550
+ - spec/dummy/config/environments/rails_5/test.rb
530
551
  - spec/dummy/config/environments/test.rb
531
552
  - spec/dummy/config/initializers/assets.rb
532
553
  - spec/dummy/config/initializers/backtrace_silencers.rb
@@ -534,6 +555,7 @@ test_files:
534
555
  - spec/dummy/config/initializers/filter_parameter_logging.rb
535
556
  - spec/dummy/config/initializers/inflections.rb
536
557
  - spec/dummy/config/initializers/mime_types.rb
558
+ - spec/dummy/config/initializers/new_framework_defaults.rb
537
559
  - spec/dummy/config/initializers/payola.rb
538
560
  - spec/dummy/config/initializers/session_store.rb
539
561
  - spec/dummy/config/initializers/wrap_parameters.rb
@@ -541,6 +563,7 @@ test_files:
541
563
  - spec/dummy/config/locales/en.yml
542
564
  - spec/dummy/config/routes.rb
543
565
  - spec/dummy/config/secrets.yml
566
+ - spec/dummy/config/spring.rb
544
567
  - spec/dummy/config.ru
545
568
  - spec/dummy/db/development.sqlite3
546
569
  - spec/dummy/db/migrate/20141001230848_create_products.rb
@@ -555,6 +578,8 @@ test_files:
555
578
  - spec/dummy/public/404.html
556
579
  - spec/dummy/public/422.html
557
580
  - spec/dummy/public/500.html
581
+ - spec/dummy/public/apple-touch-icon-precomposed.png
582
+ - spec/dummy/public/apple-touch-icon.png
558
583
  - spec/dummy/public/favicon.ico
559
584
  - spec/dummy/Rakefile
560
585
  - spec/dummy/README.rdoc
@@ -655,6 +680,7 @@ test_files:
655
680
  - spec/mailers/payola/admin_mailer_spec.rb
656
681
  - spec/mailers/payola/receipt_mailer_spec.rb
657
682
  - spec/models/payola/coupon_spec.rb
683
+ - spec/models/payola/env_wrapper_spec.rb
658
684
  - spec/models/payola/sale_spec.rb
659
685
  - spec/models/payola/stripe_webhook_spec.rb
660
686
  - spec/models/payola/subscription_spec.rb
@@ -680,4 +706,6 @@ test_files:
680
706
  - spec/services/payola/update_card_spec.rb
681
707
  - spec/services/payola/update_customer_spec.rb
682
708
  - spec/spec_helper.rb
709
+ - spec/support/http_methods_with_keyword_args.rb
710
+ - spec/support/params_helper.rb
683
711
  - spec/worker_spec.rb