stripe-ruby-mock 1.8.3.7 → 1.8.3.8
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 +47 -0
- data/lib/stripe_mock/api/webhooks.rb +13 -4
- data/lib/stripe_mock/util.rb +0 -1
- data/lib/stripe_mock/version.rb +1 -1
- data/lib/stripe_mock.rb +7 -1
- data/spec/_dummy/webhooks/dummy.event.json +6 -0
- data/spec/fixtures/stripe_webhooks/account.updated.json +7 -0
- data/spec/fixtures/stripe_webhooks/custom.account.updated.json +5 -0
- data/spec/readme_spec.rb +21 -0
- data/spec/webhook_spec.rb +32 -16
- metadata +8 -2
data/README.md
CHANGED
@@ -165,6 +165,53 @@ you'll want to use the executable:
|
|
165
165
|
$ stripe-mock-server -p 4000
|
166
166
|
$ stripe-mock-server --help
|
167
167
|
|
168
|
+
## Mocking Webhooks
|
169
|
+
|
170
|
+
If your application handles stripe webhooks, you are most likely retrieving the event from
|
171
|
+
stripe and passing the result to a handler. StripeMock helps you by easily mocking that event:
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
it "mocks a stripe webhook" do
|
175
|
+
event = StripeMock.mock_webhook_event('customer.created')
|
176
|
+
|
177
|
+
customer_object = event.data.object
|
178
|
+
expect(customer_object.id).to_not be_nil
|
179
|
+
expect(customer_object.active_card).to_not be_nil
|
180
|
+
# etc.
|
181
|
+
end
|
182
|
+
```
|
183
|
+
|
184
|
+
### Customizing Webhooks
|
185
|
+
|
186
|
+
By default, StripeMock searches in your `spec/fixtures/stripe_webhooks/` folder for your own, custom webhooks.
|
187
|
+
If it finds nothing, it falls back to [test events generated through stripe's webhooktester](lib/stripe_mock/webhook_fixtures/).
|
188
|
+
|
189
|
+
You can name events whatever you like in your `spec/fixtures/stripe_webhooks/` folder. However, if you try to call a non-existant event that's not in that folder, StripeMock will throw an error.
|
190
|
+
|
191
|
+
If you wish to use a different fixture path, you can call set it yourself:
|
192
|
+
|
193
|
+
StripeMock.webhook_fixture_path = './spec/other/folder/'
|
194
|
+
|
195
|
+
Also, you can override values whenever you create any webhook event:
|
196
|
+
|
197
|
+
```ruby
|
198
|
+
it "can override default webhook values" do
|
199
|
+
event = StripeMock.mock_webhook_event('customer.created', {
|
200
|
+
:data => {
|
201
|
+
:object => {
|
202
|
+
:id => 'cus_my_custom_value',
|
203
|
+
:email => 'joe@example.com'
|
204
|
+
}
|
205
|
+
}
|
206
|
+
})
|
207
|
+
# Alternatively:
|
208
|
+
# event.data.object.id = 'cus_my_custome_value'
|
209
|
+
# event.data.object.email = 'joe@example.com'
|
210
|
+
expect(event.data.object.id).to eq('cus_my_custome_value')
|
211
|
+
expect(event.data.object.email).to eq('joe@example.com')
|
212
|
+
end
|
213
|
+
```
|
214
|
+
|
168
215
|
## TODO
|
169
216
|
|
170
217
|
* Cover all stripe urls/methods
|
@@ -1,14 +1,23 @@
|
|
1
1
|
module StripeMock
|
2
2
|
|
3
3
|
def self.mock_webhook_event(type, params={})
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
fixture_file = File.join(@webhook_fixture_path, "#{type}.json")
|
6
|
+
|
7
|
+
if File.exists?(fixture_file) == false
|
8
|
+
unless Webhooks.event_list.include?(type)
|
9
|
+
raise UnsupportedRequestError.new "Unsupported webhook event `#{type}` (Searched in #{@webhook_fixture_path})"
|
10
|
+
end
|
11
|
+
fixture_file = File.join(@webhook_fixture_fallback_path, "#{type}.json")
|
6
12
|
end
|
7
|
-
|
13
|
+
|
14
|
+
json = MultiJson.load File.read(fixture_file)
|
8
15
|
|
9
16
|
json = Stripe::Util.symbolize_names(json)
|
10
17
|
params = Stripe::Util.symbolize_names(params)
|
11
|
-
|
18
|
+
json[:data][:object] = Util.rmerge(json[:data][:object], params)
|
19
|
+
|
20
|
+
Stripe::Event.construct_from(json)
|
12
21
|
end
|
13
22
|
|
14
23
|
module Webhooks
|
data/lib/stripe_mock/util.rb
CHANGED
data/lib/stripe_mock/version.rb
CHANGED
data/lib/stripe_mock.rb
CHANGED
@@ -31,6 +31,12 @@ require 'stripe_mock/request_handlers/plans.rb'
|
|
31
31
|
require 'stripe_mock/instance'
|
32
32
|
|
33
33
|
module StripeMock
|
34
|
+
|
34
35
|
lib_dir = File.expand_path(File.dirname(__FILE__), '../..')
|
35
|
-
@webhook_fixture_path =
|
36
|
+
@webhook_fixture_path = './spec/fixtures/stripe_webhooks/'
|
37
|
+
@webhook_fixture_fallback_path = File.join(lib_dir, 'stripe_mock/webhook_fixtures')
|
38
|
+
|
39
|
+
class << self
|
40
|
+
attr_accessor :webhook_fixture_path
|
41
|
+
end
|
36
42
|
end
|
data/spec/readme_spec.rb
CHANGED
@@ -55,4 +55,25 @@ describe 'README examples' do
|
|
55
55
|
StripeMock.prepare_card_error(:processing_error)
|
56
56
|
end
|
57
57
|
|
58
|
+
it "mocks a stripe webhook" do
|
59
|
+
event = StripeMock.mock_webhook_event('customer.created')
|
60
|
+
|
61
|
+
customer_object = event.data.object
|
62
|
+
expect(customer_object.id).to_not be_nil
|
63
|
+
expect(customer_object.active_card).to_not be_nil
|
64
|
+
# etc.
|
65
|
+
end
|
66
|
+
|
67
|
+
it "can override default webhook values" do
|
68
|
+
event = StripeMock.mock_webhook_event('customer.created', {
|
69
|
+
:id => 'cus_my_custom_value',
|
70
|
+
:email => 'joe@example.com'
|
71
|
+
})
|
72
|
+
# Alternatively:
|
73
|
+
# event.data.object.id = 'cus_my_custom_value'
|
74
|
+
# event.data.object.email = 'joe@example.com'
|
75
|
+
expect(event.data.object.id).to eq('cus_my_custom_value')
|
76
|
+
expect(event.data.object.email).to eq('joe@example.com')
|
77
|
+
end
|
78
|
+
|
58
79
|
end
|
data/spec/webhook_spec.rb
CHANGED
@@ -5,38 +5,54 @@ describe 'Webhook Generation' do
|
|
5
5
|
it "matches the list of webhooks with the folder of fixtures" do
|
6
6
|
events = StripeMock::Webhooks.event_list.to_set
|
7
7
|
file_names = Dir['./lib/stripe_mock/webhook_fixtures/*'].map {|f| File.basename(f, '.json')}.to_set
|
8
|
+
# The reason we take the difference instead of compare equal is so
|
9
|
+
# that a missing event name will show up in the test failure report.
|
8
10
|
expect(events - file_names).to eq(Set.new)
|
9
11
|
expect(file_names - events).to eq(Set.new)
|
10
12
|
end
|
11
13
|
|
14
|
+
|
15
|
+
it "first looks in spec/fixtures/stripe_webhooks/ for fixtures by default" do
|
16
|
+
event = StripeMock.mock_webhook_event('account.updated')
|
17
|
+
expect(event).to be_a(Stripe::Event)
|
18
|
+
expect(event.id).to eq('evt_123')
|
19
|
+
expect(event.type).to eq('account.updated')
|
20
|
+
end
|
21
|
+
|
22
|
+
it "allows non-standard event names in the project fixture folder" do
|
23
|
+
expect {
|
24
|
+
event = StripeMock.mock_webhook_event('custom.account.updated')
|
25
|
+
}.to_not raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it "allows configuring the project fixture folder" do
|
29
|
+
StripeMock.webhook_fixture_path = './spec/_dummy/webhooks/'
|
30
|
+
expect(StripeMock.webhook_fixture_path).to eq('./spec/_dummy/webhooks/')
|
31
|
+
|
32
|
+
event = StripeMock.mock_webhook_event('dummy.event')
|
33
|
+
expect(event.val).to eq('success')
|
34
|
+
end
|
35
|
+
|
12
36
|
it "generates an event" do
|
13
37
|
event = StripeMock.mock_webhook_event('customer.created')
|
14
38
|
expect(event).to be_a(Stripe::Event)
|
15
39
|
end
|
16
40
|
|
17
|
-
it "takes a hash and deep merges" do
|
41
|
+
it "takes a hash and deep merges into the data object" do
|
18
42
|
event = StripeMock.mock_webhook_event('customer.created', {
|
19
|
-
:
|
20
|
-
:object => {
|
21
|
-
:account_balance => 12345
|
22
|
-
}
|
23
|
-
}
|
43
|
+
:account_balance => 12345
|
24
44
|
})
|
25
45
|
expect(event.data.object.account_balance).to eq(12345)
|
26
46
|
end
|
27
47
|
|
28
|
-
it "takes a hash and deep merges arrays" do
|
48
|
+
it "takes a hash and deep merges arrays in the data object" do
|
29
49
|
event = StripeMock.mock_webhook_event('invoice.created', {
|
30
|
-
:
|
31
|
-
:
|
32
|
-
:
|
33
|
-
:
|
34
|
-
{ :amount => 555,
|
35
|
-
:plan => { :id => 'wh_test' }
|
36
|
-
}
|
37
|
-
]
|
50
|
+
:lines => {
|
51
|
+
:data => [
|
52
|
+
{ :amount => 555,
|
53
|
+
:plan => { :id => 'wh_test' }
|
38
54
|
}
|
39
|
-
|
55
|
+
]
|
40
56
|
}
|
41
57
|
})
|
42
58
|
expect(event.data.object.lines.data.first.amount).to eq(555)
|
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.
|
4
|
+
version: 1.8.3.8
|
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-
|
12
|
+
date: 2013-06-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: stripe
|
@@ -162,6 +162,9 @@ files:
|
|
162
162
|
- lib/stripe_mock/webhook_fixtures/transfer.paid.json
|
163
163
|
- lib/stripe_mock/webhook_fixtures/transfer.updated.json
|
164
164
|
- lib/trollop.rb
|
165
|
+
- spec/_dummy/webhooks/dummy.event.json
|
166
|
+
- spec/fixtures/stripe_webhooks/account.updated.json
|
167
|
+
- spec/fixtures/stripe_webhooks/custom.account.updated.json
|
165
168
|
- spec/instance_spec.rb
|
166
169
|
- spec/readme_spec.rb
|
167
170
|
- spec/server_spec.rb
|
@@ -202,6 +205,9 @@ signing_key:
|
|
202
205
|
specification_version: 3
|
203
206
|
summary: TDD with stripe
|
204
207
|
test_files:
|
208
|
+
- spec/_dummy/webhooks/dummy.event.json
|
209
|
+
- spec/fixtures/stripe_webhooks/account.updated.json
|
210
|
+
- spec/fixtures/stripe_webhooks/custom.account.updated.json
|
205
211
|
- spec/instance_spec.rb
|
206
212
|
- spec/readme_spec.rb
|
207
213
|
- spec/server_spec.rb
|