stripe-ruby-mock 1.8.4.4 → 1.8.4.5

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
@@ -5,7 +5,9 @@
5
5
 
6
6
  ## Install
7
7
 
8
- $ gem install stripe-ruby-mock
8
+ In your gemfile:
9
+
10
+ gem 'stripe-ruby-mock', '>= 1.8.4.4'
9
11
 
10
12
  ## Features
11
13
 
@@ -212,6 +214,22 @@ it "can override default webhook values" do
212
214
  end
213
215
  ```
214
216
 
217
+ ## Generating Card Tokens
218
+
219
+ Sometimes you need to check if your code reads a stripe card correctly. If so, you can specifically
220
+ assign card data to a generated card token:
221
+
222
+ ```ruby
223
+ it "generates a stripe card token" do
224
+ card_token = StripeMock.generate_card_token(last4: "9191", exp_year: 1984)
225
+
226
+ cus = Stripe::Customer.create(card: card_token)
227
+ card = cus.cards.data.first
228
+ expect(card.last4).to eq("9191")
229
+ expect(card.exp_year).to eq(1984)
230
+ end
231
+ ```
232
+
215
233
  ## Debugging
216
234
 
217
235
  To enable debug messages:
data/lib/stripe_mock.rb CHANGED
@@ -22,6 +22,7 @@ require 'stripe_mock/server'
22
22
  require 'stripe_mock/api/instance'
23
23
  require 'stripe_mock/api/client'
24
24
  require 'stripe_mock/api/server'
25
+ require 'stripe_mock/api/card_tokens'
25
26
  require 'stripe_mock/api/errors'
26
27
  require 'stripe_mock/api/webhooks'
27
28
  require 'stripe_mock/api/strict'
@@ -0,0 +1,13 @@
1
+ module StripeMock
2
+
3
+ def self.generate_card_token(card_params)
4
+ if @state == 'local'
5
+ instance.generate_card_token(card_params)
6
+ elsif @state == 'remote'
7
+ client.generate_card_token(card_params)
8
+ else
9
+ raise UnstartedStateError
10
+ end
11
+ end
12
+
13
+ end
@@ -48,6 +48,10 @@ module StripeMock
48
48
  timeout_wrap { @pipe.strict? }
49
49
  end
50
50
 
51
+ def generate_card_token(card_params)
52
+ timeout_wrap { @pipe.generate_card_token(card_params) }
53
+ end
54
+
51
55
  def clear_server_data
52
56
  timeout_wrap { @pipe.clear_data }
53
57
  end
@@ -1,11 +1,9 @@
1
1
  module StripeMock
2
2
  module Data
3
3
 
4
- def self.test_customer(params)
4
+ def self.test_customer(cards, params)
5
5
  cus_id = params[:id] || "test_cus_default"
6
- card_id = params.delete(:card_id)
7
- cards = []
8
- cards << test_card(id: card_id, customer: cus_id) if card_id
6
+ cards.each {|card| card[:customer] = cus_id}
9
7
  {
10
8
  email: 'stripe_mock@example.com',
11
9
  description: 'an auto-generated stripe customer data mock',
@@ -23,7 +21,7 @@ module StripeMock
23
21
  url: "/v1/customers/#{cus_id}/cards",
24
22
  data: cards
25
23
  },
26
- default_card: card_id
24
+ default_card: nil
27
25
  }.merge(params)
28
26
  end
29
27
 
@@ -28,6 +28,7 @@ module StripeMock
28
28
  @customers = {}
29
29
  @charges = {}
30
30
  @plans = {}
31
+ @card_tokens = {}
31
32
 
32
33
  @id_counter = 0
33
34
  @error_queue = ErrorQueue.new
@@ -64,6 +65,21 @@ module StripeMock
64
65
  end
65
66
  end
66
67
 
68
+ def generate_card_token(card_params)
69
+ token = new_id 'tok'
70
+ card_params[:id] = new_id 'cc'
71
+ @card_tokens[token] = Data.test_card(card_params)
72
+ token
73
+ end
74
+
75
+ def get_card_by_token(token)
76
+ if token.nil? || @card_tokens[token].nil?
77
+ Data.test_card :id => new_id('cc')
78
+ else
79
+ @card_tokens.delete(token)
80
+ end
81
+ end
82
+
67
83
  private
68
84
 
69
85
  def assert_existance(type, id, obj, message=nil)
@@ -13,8 +13,12 @@ module StripeMock
13
13
 
14
14
  def new_customer(route, method_url, params, headers)
15
15
  params[:id] ||= new_id('cus')
16
- params[:card_id] = new_id('cc') if params.delete(:card)
17
- customers[ params[:id] ] = Data.test_customer(params)
16
+ cards = []
17
+ if params[:card]
18
+ cards << get_card_by_token(params.delete(:card))
19
+ params[:default_card] = cards.first[:id]
20
+ end
21
+ customers[ params[:id] ] = Data.test_customer(cards, params)
18
22
  end
19
23
 
20
24
  def update_subscription(route, method_url, params, headers)
@@ -49,7 +53,7 @@ module StripeMock
49
53
  assert_existance :customer, $1, customers[$1]
50
54
 
51
55
  card_id = new_id('cc') if params.delete(:card)
52
- cus = customers[$1] ||= Data.test_customer(:id => $1)
56
+ cus = customers[$1] ||= Data.test_customer([], :id => $1)
53
57
  cus.merge!(params)
54
58
 
55
59
  if card_id
@@ -70,7 +74,7 @@ module StripeMock
70
74
  def get_customer(route, method_url, params, headers)
71
75
  route =~ method_url
72
76
  assert_existance :customer, $1, customers[$1]
73
- customers[$1] ||= Data.test_customer(:id => $1)
77
+ customers[$1] ||= Data.test_customer([], :id => $1)
74
78
  end
75
79
 
76
80
  def list_customers(route, method_url, params, headers)
@@ -46,6 +46,10 @@ module StripeMock
46
46
  @instance.strict = toggle
47
47
  end
48
48
 
49
+ def generate_card_token(card_params)
50
+ @instance.generate_card_token(card_params)
51
+ end
52
+
49
53
  def debug?; @instance.debug; end
50
54
  def strict?; @instance.strict; end
51
55
  def ping; true; end
@@ -1,4 +1,4 @@
1
1
  module StripeMock
2
2
  # stripe-ruby-mock version
3
- VERSION = "1.8.4.4"
3
+ VERSION = "1.8.4.5"
4
4
  end
data/spec/readme_spec.rb CHANGED
@@ -60,4 +60,13 @@ describe 'README examples' do
60
60
  expect(event.data.object.email).to eq('joe@example.com')
61
61
  end
62
62
 
63
+ it "generates a stripe card token" do
64
+ card_token = StripeMock.generate_card_token(last4: "9191", exp_year: 1984)
65
+
66
+ cus = Stripe::Customer.create(card: card_token)
67
+ card = cus.cards.data.first
68
+ expect(card.last4).to eq("9191")
69
+ expect(card.exp_year).to eq(1984)
70
+ end
71
+
63
72
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples 'Card Token Mocking' do
4
+
5
+ it "generates a card token" do
6
+ card_token = StripeMock.generate_card_token(last4: "9191", exp_month: 99, exp_year: 3005)
7
+
8
+ cus = Stripe::Customer.create(card: card_token)
9
+ card = cus.cards.data.first
10
+ expect(card.last4).to eq("9191")
11
+ expect(card.exp_month).to eq(99)
12
+ expect(card.exp_year).to eq(3005)
13
+ end
14
+
15
+ end
@@ -1,5 +1,6 @@
1
1
 
2
2
  def require_stripe_examples
3
+ require 'shared_stripe_examples/card_token_examples'
3
4
  require 'shared_stripe_examples/charge_examples'
4
5
  require 'shared_stripe_examples/customer_examples'
5
6
  require 'shared_stripe_examples/error_mock_examples'
@@ -8,6 +9,7 @@ def require_stripe_examples
8
9
  end
9
10
 
10
11
  def it_behaves_like_stripe(&block)
12
+ it_behaves_like 'Card Token Mocking', &block
11
13
  it_behaves_like 'Charge API', &block
12
14
  it_behaves_like 'Customer API', &block
13
15
  it_behaves_like 'Invoice Item API', &block
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.4.4
4
+ version: 1.8.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -123,6 +123,7 @@ files:
123
123
  - Rakefile
124
124
  - bin/stripe-mock-server
125
125
  - lib/stripe_mock.rb
126
+ - lib/stripe_mock/api/card_tokens.rb
126
127
  - lib/stripe_mock/api/client.rb
127
128
  - lib/stripe_mock/api/debug.rb
128
129
  - lib/stripe_mock/api/errors.rb
@@ -188,6 +189,7 @@ files:
188
189
  - spec/instance_spec.rb
189
190
  - spec/readme_spec.rb
190
191
  - spec/server_spec.rb
192
+ - spec/shared_stripe_examples/card_token_examples.rb
191
193
  - spec/shared_stripe_examples/charge_examples.rb
192
194
  - spec/shared_stripe_examples/customer_examples.rb
193
195
  - spec/shared_stripe_examples/error_mock_examples.rb
@@ -231,6 +233,7 @@ test_files:
231
233
  - spec/instance_spec.rb
232
234
  - spec/readme_spec.rb
233
235
  - spec/server_spec.rb
236
+ - spec/shared_stripe_examples/card_token_examples.rb
234
237
  - spec/shared_stripe_examples/charge_examples.rb
235
238
  - spec/shared_stripe_examples/customer_examples.rb
236
239
  - spec/shared_stripe_examples/error_mock_examples.rb