stripe-ruby-mock 1.8.3.11 → 1.8.3.12

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.
data/README.md CHANGED
@@ -11,6 +11,7 @@
11
11
 
12
12
  * No stripe server access required
13
13
  * Easily test against stripe errors
14
+ * Mock and customize stripe webhooks
14
15
 
15
16
  ## Description
16
17
 
@@ -107,6 +108,7 @@ running on different processes. In such cases you'll want to start the stripe mo
107
108
  #
108
109
  # The mock server will automatically be killed when your tests are done running.
109
110
  #
111
+ require 'thin'
110
112
  StripeMock.spawn_server
111
113
 
112
114
  Then, instead of `StripeMock.start`, you'll want to use `StripeMock.start_client`:
@@ -115,8 +115,8 @@ module StripeMock
115
115
  end
116
116
 
117
117
  #FIXME nested overrides would be better than hardcoding plan_id
118
- def self.test_subscription(plan_id="gold")
119
- {
118
+ def self.test_subscription(params={})
119
+ StripeMock::Util.rmerge({
120
120
  :current_period_end => 1308681468,
121
121
  :status => "trialing",
122
122
  :plan => {
@@ -124,7 +124,7 @@ module StripeMock
124
124
  :amount => 7500,
125
125
  :trial_period_days => 30,
126
126
  :object => "plan",
127
- :id => plan_id
127
+ :id => '__test_plan_id__'
128
128
  },
129
129
  :current_period_start => 1308595038,
130
130
  :cancel_at_period_end => false,
@@ -135,7 +135,7 @@ module StripeMock
135
135
  :trial_end => 1308681468,
136
136
  :customer => "c_test_customer",
137
137
  :quantity => 1
138
- }
138
+ }, params)
139
139
  end
140
140
 
141
141
  def self.test_invoice(params={})
@@ -297,11 +297,10 @@ module StripeMock
297
297
  }
298
298
  end
299
299
 
300
- def self.test_delete_subscription(id)
300
+ def self.test_delete_subscription(params={})
301
301
  {
302
- id: id,
303
302
  deleted: true
304
- }
303
+ }.merge(params)
305
304
  end
306
305
 
307
306
  def self.test_api_error
@@ -66,11 +66,12 @@ module StripeMock
66
66
 
67
67
  private
68
68
 
69
- def assert_existance(type, id, obj)
69
+ def assert_existance(type, id, obj, message=nil)
70
70
  return unless @strict == true
71
71
 
72
72
  if obj.nil?
73
- raise Stripe::InvalidRequestError.new("No such #{type}: #{id}", type.to_s, 400)
73
+ msg = message || "No such #{type}: #{id}"
74
+ raise Stripe::InvalidRequestError.new(msg, type.to_s, 400)
74
75
  end
75
76
  end
76
77
 
@@ -4,7 +4,7 @@ module StripeMock
4
4
 
5
5
  def Customers.included(klass)
6
6
  klass.add_handler 'post /v1/customers', :new_customer
7
- klass.add_handler 'post /v1/customers/(.*)/subscription', :new_subscription
7
+ klass.add_handler 'post /v1/customers/(.*)/subscription', :update_subscription
8
8
  klass.add_handler 'delete /v1/customers/(.*)/subscription', :cancel_subscription
9
9
  klass.add_handler 'post /v1/customers/(.*)', :update_customer
10
10
  klass.add_handler 'get /v1/customers/(.*)', :get_customer
@@ -16,17 +16,31 @@ module StripeMock
16
16
  customers[ params[:id] ] = Data.test_customer(params)
17
17
  end
18
18
 
19
- def new_subscription(route, method_url, params, headers)
19
+ def update_subscription(route, method_url, params, headers)
20
20
  route =~ method_url
21
- assert_existance :customer, $1, customers[$1]
22
- assert_existance :plan, params[:plan], plans[ params[:plan] ]
23
- Data.test_subscription(params[:plan])
21
+
22
+ customer = customers[$1]
23
+ assert_existance :customer, $1, customer
24
+ plan = plans[ params[:plan] ]
25
+ assert_existance :plan, params[:plan], plan
26
+
27
+ sub = Data.test_subscription plan: plan, id: new_id('su')
28
+ customer[:subscription] = sub
24
29
  end
25
30
 
26
31
  def cancel_subscription(route, method_url, params, headers)
27
32
  route =~ method_url
28
- assert_existance :customer, $1, customers[$1]
29
- Data.test_delete_subscription(params[:id])
33
+
34
+ customer = customers[$1]
35
+ assert_existance :customer, $1, customer
36
+
37
+ sub = customer[:subscription]
38
+ assert_existance nil, nil, sub, "No active subscription for customer: #{$1}"
39
+
40
+ plan = plans[ sub[:plan][:id] ]
41
+ assert_existance :plan, params[:plan], plan
42
+
43
+ Data.test_delete_subscription(id: sub[:id])
30
44
  end
31
45
 
32
46
  def update_customer(route, method_url, params, headers)
@@ -1,4 +1,3 @@
1
- require 'thin'
2
1
  require 'jimson-temp'
3
2
 
4
3
  module StripeMock
@@ -1,11 +1,11 @@
1
1
  module StripeMock
2
2
  module Util
3
3
 
4
- def self.rmerge(hash_one, hash_two)
5
- return hash_two if hash_one.nil?
6
- return nil if hash_two.nil?
4
+ def self.rmerge(desh_hash, source_hash)
5
+ return source_hash if desh_hash.nil?
6
+ return nil if source_hash.nil?
7
7
 
8
- hash_one.merge(hash_two) do |key, oldval, newval|
8
+ desh_hash.merge(source_hash) do |key, oldval, newval|
9
9
  if oldval.is_a?(Array) && newval.is_a?(Array)
10
10
  oldval.zip(newval).map {|elems|
11
11
  elems[1].nil? ? elems[0] : rmerge(elems[0], elems[1])
@@ -1,4 +1,4 @@
1
1
  module StripeMock
2
2
  # stripe-ruby-mock version
3
- VERSION = "1.8.3.11"
3
+ VERSION = "1.8.3.12"
4
4
  end
@@ -80,22 +80,38 @@ shared_examples 'Customer API' do
80
80
 
81
81
  expect(sub.object).to eq('subscription')
82
82
  expect(sub.plan.id).to eq('silver')
83
+ expect(sub.plan.to_hash).to eq(plan.to_hash)
84
+
85
+ customer = Stripe::Customer.retrieve('test_customer_sub')
86
+ expect(customer.subscription).to_not be_nil
87
+ expect(customer.subscription.id).to eq(sub.id)
88
+ expect(customer.subscription.plan.id).to eq('silver')
83
89
  end
84
90
 
85
91
  it "cancels a stripe customer's subscription" do
92
+ plan = Stripe::Plan.create(id: 'the truth')
86
93
  customer = Stripe::Customer.create(id: 'test_customer_sub')
87
- sub = customer.cancel_subscription
94
+ sub = customer.update_subscription({ :plan => 'the truth' })
88
95
 
89
- expect(sub.deleted).to eq(true)
96
+ result = customer.cancel_subscription
97
+ expect(result.deleted).to eq(true)
98
+ expect(result.id).to eq(sub.id)
90
99
  end
91
100
 
92
- it "cannot reference a plan that does not exist" do
101
+ it "cannot update to a plan that does not exist" do
93
102
  customer = Stripe::Customer.create(id: 'test_customer_sub')
94
103
  expect {
95
104
  customer.update_subscription(plan: 'imagination')
96
105
  }.to raise_error Stripe::InvalidRequestError
97
106
  end
98
107
 
108
+ it "cannot cancel a plan that does not exist" do
109
+ customer = Stripe::Customer.create(id: 'test_customer_sub')
110
+ expect {
111
+ customer.cancel_subscription(plan: 'imagination')
112
+ }.to raise_error Stripe::InvalidRequestError
113
+ end
114
+
99
115
 
100
116
  context "With strict mode toggled off" do
101
117
 
@@ -1,10 +1,10 @@
1
1
 
2
2
  def require_stripe_examples
3
- require 'shared_stripe_examples/charges'
4
- require 'shared_stripe_examples/customers'
5
- require 'shared_stripe_examples/error_mocks'
6
- require 'shared_stripe_examples/invoice_items'
7
- require 'shared_stripe_examples/plans'
3
+ require 'shared_stripe_examples/charge_examples'
4
+ require 'shared_stripe_examples/customer_examples'
5
+ require 'shared_stripe_examples/error_mock_examples'
6
+ require 'shared_stripe_examples/invoice_item_examples'
7
+ require 'shared_stripe_examples/plan_examples'
8
8
  end
9
9
 
10
10
  def it_behaves_like_stripe(&block)
data/spec/util_spec.rb CHANGED
@@ -3,41 +3,41 @@ require 'spec_helper'
3
3
  describe StripeMock::Util do
4
4
 
5
5
  it "recursively merges a simple hash" do
6
- hash_one = { x: { y: 50 }, a: 5, b: 3 }
7
- hash_two = { x: { y: 999 }, a: 77 }
8
- result = StripeMock::Util.rmerge(hash_one, hash_two)
6
+ dest = { x: { y: 50 }, a: 5, b: 3 }
7
+ source = { x: { y: 999 }, a: 77 }
8
+ result = StripeMock::Util.rmerge(dest, source)
9
9
 
10
10
  expect(result).to eq({ x: { y: 999 }, a: 77, b: 3 })
11
11
  end
12
12
 
13
13
  it "recursively merges a nested hash" do
14
- hash_one = { x: { y: 50, z: { m: 44, n: 4 } } }
15
- hash_two = { x: { y: 999, z: { n: 55 } } }
16
- result = StripeMock::Util.rmerge(hash_one, hash_two)
14
+ dest = { x: { y: 50, z: { m: 44, n: 4 } } }
15
+ source = { x: { y: 999, z: { n: 55 } } }
16
+ result = StripeMock::Util.rmerge(dest, source)
17
17
 
18
18
  expect(result).to eq({ x: { y: 999, z: { m: 44, n: 55 } } })
19
19
  end
20
20
 
21
21
  it "merges array elements" do
22
- hash_one = { x: [ {a: 1}, {b: 2}, {c: 3} ] }
23
- hash_two = { x: [ {a: 0}, {a: 0} ] }
24
- result = StripeMock::Util.rmerge(hash_one, hash_two)
22
+ dest = { x: [ {a: 1}, {b: 2}, {c: 3} ] }
23
+ source = { x: [ {a: 0}, {a: 0} ] }
24
+ result = StripeMock::Util.rmerge(dest, source)
25
25
 
26
26
  expect(result).to eq({ x: [ {a: 0}, {a: 0, b: 2}, {c: 3} ] })
27
27
  end
28
28
 
29
29
  it "treats an array nil element as a skip op" do
30
- hash_one = { x: [ {a: 1}, {b: 2}, {c: 3} ] }
31
- hash_two = { x: [ nil, nil, {c: 0} ] }
32
- result = StripeMock::Util.rmerge(hash_one, hash_two)
30
+ dest = { x: [ {a: 1}, {b: 2}, {c: 3} ] }
31
+ source = { x: [ nil, nil, {c: 0} ] }
32
+ result = StripeMock::Util.rmerge(dest, source)
33
33
 
34
34
  expect(result).to eq({ x: [ {a: 1}, {b: 2}, {c: 0} ] })
35
35
  end
36
36
 
37
37
  it "treats nil as a replacement otherwise" do
38
- hash_one = { x: 99 }
39
- hash_two = { x: nil }
40
- result = StripeMock::Util.rmerge(hash_one, hash_two)
38
+ dest = { x: 99 }
39
+ source = { x: nil }
40
+ result = StripeMock::Util.rmerge(dest, source)
41
41
 
42
42
  expect(result).to eq({ x: nil })
43
43
  end
@@ -23,4 +23,5 @@ Gem::Specification.new do |gem|
23
23
 
24
24
  gem.add_development_dependency 'rspec', '~> 2.4'
25
25
  gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
26
+ gem.add_development_dependency 'thin'
26
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stripe-ruby-mock
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.3.11
4
+ version: 1.8.3.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-25 00:00:00.000000000 Z
12
+ date: 2013-07-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: stripe
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0.2'
94
+ - !ruby/object:Gem::Dependency
95
+ name: thin
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  description: A drop-in library to test stripe without hitting their servers
95
111
  email: gilbertbgarza@gmail.com
96
112
  executables:
@@ -171,11 +187,11 @@ files:
171
187
  - spec/instance_spec.rb
172
188
  - spec/readme_spec.rb
173
189
  - spec/server_spec.rb
174
- - spec/shared_stripe_examples/charges.rb
175
- - spec/shared_stripe_examples/customers.rb
176
- - spec/shared_stripe_examples/error_mocks.rb
177
- - spec/shared_stripe_examples/invoice_items.rb
178
- - spec/shared_stripe_examples/plans.rb
190
+ - spec/shared_stripe_examples/charge_examples.rb
191
+ - spec/shared_stripe_examples/customer_examples.rb
192
+ - spec/shared_stripe_examples/error_mock_examples.rb
193
+ - spec/shared_stripe_examples/invoice_item_examples.rb
194
+ - spec/shared_stripe_examples/plan_examples.rb
179
195
  - spec/spec_helper.rb
180
196
  - spec/stripe_mock_spec.rb
181
197
  - spec/support/stripe_examples.rb
@@ -214,11 +230,11 @@ test_files:
214
230
  - spec/instance_spec.rb
215
231
  - spec/readme_spec.rb
216
232
  - spec/server_spec.rb
217
- - spec/shared_stripe_examples/charges.rb
218
- - spec/shared_stripe_examples/customers.rb
219
- - spec/shared_stripe_examples/error_mocks.rb
220
- - spec/shared_stripe_examples/invoice_items.rb
221
- - spec/shared_stripe_examples/plans.rb
233
+ - spec/shared_stripe_examples/charge_examples.rb
234
+ - spec/shared_stripe_examples/customer_examples.rb
235
+ - spec/shared_stripe_examples/error_mock_examples.rb
236
+ - spec/shared_stripe_examples/invoice_item_examples.rb
237
+ - spec/shared_stripe_examples/plan_examples.rb
222
238
  - spec/spec_helper.rb
223
239
  - spec/stripe_mock_spec.rb
224
240
  - spec/support/stripe_examples.rb