stripe-ruby-mock 1.8.4.4 → 1.8.4.5

Sign up to get free protection for your applications and to get access to all the features.
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