payjp_mock 0.4.0 → 0.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.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/payjp_mock/ext/hash.rb +4 -0
- data/lib/payjp_mock/request_builder.rb +86 -68
- data/lib/payjp_mock/response/error/base.rb +6 -2
- data/lib/payjp_mock/version.rb +1 -1
- data/lib/payjp_mock/webmock_wrapper.rb +24 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce2b92be77a8cad2b90995d5b057acf480bba444
|
4
|
+
data.tar.gz: cfee705b69808d0701e55d33d7df7ffb08bad0d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bf98a117081a42a04365fad466a050b1e3bac79d712c8a860a7dfc87a602a6340c82508fc2203e1e0cf5c7d879b0732be45f39057ba331b151458037d611be0
|
7
|
+
data.tar.gz: 7027cb169019359a3ce1b3d52fe60db321deba10d7e16eaa66bf06ab4a042e277cdd7777cd64f82ce1563f008972eb023aba640312ae2da5c7342e77a39b3dd5
|
data/README.md
CHANGED
@@ -47,10 +47,21 @@ specify do
|
|
47
47
|
payjp_stub({ customer: :cards }, :all)
|
48
48
|
customer.cards.all
|
49
49
|
|
50
|
+
# Specifying response attributes
|
51
|
+
payjp_stub(:charge, :retrieve, source: { captured: false, captured_at: nil })
|
52
|
+
charge = Payjp::Charge.retrieve('ch_xxxxx')
|
53
|
+
|
54
|
+
charge.captured #=> false
|
55
|
+
charge.captured_at #=> nil
|
56
|
+
|
50
57
|
# Stubbing error responses
|
51
58
|
payjp_stub({ customer: :cards }, :create, error: :invalid_request_error)
|
52
59
|
customer.cards.create #=> Raises a Payjp::InvalidRequestError
|
53
60
|
|
61
|
+
# Specifying error response attributes
|
62
|
+
payjp_stub(:charges, :create, response: payjp_card_error(code: 'processing_error'))
|
63
|
+
Payjp::Charge.create #=> Raises a Payjp::CardError with code processing_error
|
64
|
+
|
54
65
|
# snip
|
55
66
|
end
|
56
67
|
```
|
data/lib/payjp_mock/ext/hash.rb
CHANGED
@@ -3,11 +3,25 @@ module PayjpMock
|
|
3
3
|
include Util
|
4
4
|
using Ext::Hash
|
5
5
|
|
6
|
-
def initialize(resource, operation, params, error)
|
6
|
+
def initialize(resource, operation, params, source, error, response)
|
7
7
|
@resource = resource.is_a?(Hash) ? resource.symbolize_keys : resource.to_sym
|
8
8
|
@operation = operation.to_sym
|
9
9
|
@params = params.symbolize_keys
|
10
|
-
@
|
10
|
+
@source = source.symbolize_keys
|
11
|
+
|
12
|
+
@response = response ||
|
13
|
+
case error&.to_sym
|
14
|
+
when :card_error
|
15
|
+
Response::Error::CardError.new
|
16
|
+
when :invalid_request_error
|
17
|
+
Response::Error::InvalidRequestError.new
|
18
|
+
when :authentication_error
|
19
|
+
Response::Error::AuthenticationError.new
|
20
|
+
when :api_connection_error
|
21
|
+
Response::Error::ApiConnectionError.new
|
22
|
+
when :api_error
|
23
|
+
Response::Error::ApiError.new
|
24
|
+
end
|
11
25
|
end
|
12
26
|
|
13
27
|
def build
|
@@ -18,30 +32,38 @@ module PayjpMock
|
|
18
32
|
when :create
|
19
33
|
[:post, '/charges', Response::Resource::Charge.new(@params)]
|
20
34
|
when :retrieve
|
21
|
-
[:get, '/charges/{id}', Response::Resource::Charge.new]
|
35
|
+
[:get, '/charges/{id}', Response::Resource::Charge.new(@source)]
|
22
36
|
when :save
|
23
|
-
|
37
|
+
charge = Response::Resource::Charge.new(@source).set(@params)
|
38
|
+
[:post, '/charges/{id}', charge]
|
24
39
|
when :refund
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
40
|
+
charge = Response::Resource::Charge.new(@source)
|
41
|
+
charge
|
42
|
+
.set(@params.except(:amount))
|
43
|
+
.set(amount_refunded: @params[:amount] || charge.attributes[:amount], refunded: true)
|
29
44
|
|
30
45
|
[:post, '/charges/{id}/refund', charge]
|
31
46
|
when :reauth
|
32
|
-
charge = Response::Resource::Charge.new(
|
47
|
+
charge = Response::Resource::Charge.new(@source)
|
48
|
+
charge.set(
|
33
49
|
captured: false,
|
34
50
|
captured_at: nil,
|
35
51
|
expiry_days: @params[:expiry_days] || 7
|
36
52
|
)
|
37
53
|
[:post, '/charges/{id}/reauth', charge]
|
38
54
|
when :capture
|
39
|
-
|
40
|
-
|
41
|
-
charge
|
55
|
+
charge = Response::Resource::Charge.new(@source)
|
56
|
+
charge.set(captured: true, captured_at: Time.now.to_i)
|
57
|
+
charge.set(
|
58
|
+
if @params[:amount]
|
59
|
+
{ amount_refunded: charge.attributes[:amount] - @params[:amount], refunded: true }
|
60
|
+
else
|
61
|
+
{ amount_refunded: 0, refunded: false }
|
62
|
+
end
|
63
|
+
)
|
42
64
|
[:post, '/charges/{id}/capture', charge]
|
43
65
|
when :all
|
44
|
-
list = Response::List.new('/charges') { Response::Resource::Charge.new }
|
66
|
+
list = Response::List.new('/charges') { Response::Resource::Charge.new(@source) }
|
45
67
|
[:get, '/charges', list]
|
46
68
|
else
|
47
69
|
raise UnknownOperation, @operation
|
@@ -51,14 +73,15 @@ module PayjpMock
|
|
51
73
|
when :create
|
52
74
|
[:post, '/customers', Response::Resource::Customer.new(@params)]
|
53
75
|
when :retrieve
|
54
|
-
[:get, '/customers/{id}', Response::Resource::Customer.new]
|
76
|
+
[:get, '/customers/{id}', Response::Resource::Customer.new(@source)]
|
55
77
|
when :save
|
56
|
-
|
78
|
+
customer = Response::Resource::Customer.new(@source).set(@params)
|
79
|
+
[:post, '/customers/{id}', customer]
|
57
80
|
when :delete
|
58
81
|
cus_id = generate_resource_id(Response::Resource::Customer::PREFIX)
|
59
82
|
[:delete, '/customers/{id}', Response::Deleted.new(cus_id)]
|
60
83
|
when :all
|
61
|
-
list = Response::List.new('/customers') { Response::Resource::Customer.new }
|
84
|
+
list = Response::List.new('/customers') { Response::Resource::Customer.new(@source) }
|
62
85
|
[:get, '/customers', list]
|
63
86
|
else
|
64
87
|
raise UnknownOperation, @operation
|
@@ -68,15 +91,19 @@ module PayjpMock
|
|
68
91
|
when :create
|
69
92
|
[:post, '/customers/{customer_id}/cards', Response::Resource::Card.new(@params)]
|
70
93
|
when :retrieve
|
71
|
-
|
94
|
+
card = Response::Resource::Card.new(@source)
|
95
|
+
[:get, '/customers/{customer_id}/cards/{id}', card]
|
72
96
|
when :save
|
73
|
-
|
97
|
+
card = Response::Resource::Card.new(@source).set(@params)
|
98
|
+
[:post, '/customers/{customer_id}/cards/{id}', card]
|
74
99
|
when :delete
|
75
100
|
car_id = generate_resource_id(Response::Resource::Card::PREFIX)
|
76
101
|
[:delete, '/customers/{customer_id}/cards/{id}', Response::Deleted.new(car_id)]
|
77
102
|
when :all
|
78
103
|
cus_id = generate_resource_id(Response::Resource::Customer::PREFIX)
|
79
|
-
list
|
104
|
+
list = Response::List.new("/customres/#{cus_id}/cards") do
|
105
|
+
Response::Resource::Card.new(@source)
|
106
|
+
end
|
80
107
|
[:get, '/customers/{customer_id}/cards', list]
|
81
108
|
else
|
82
109
|
raise UnknownOperation, @operation
|
@@ -86,14 +113,15 @@ module PayjpMock
|
|
86
113
|
when :create
|
87
114
|
[:post, '/plans', Response::Resource::Plan.new(@params)]
|
88
115
|
when :retrieve
|
89
|
-
[:get, '/plans/{id}', Response::Resource::Plan.new]
|
116
|
+
[:get, '/plans/{id}', Response::Resource::Plan.new(@source)]
|
90
117
|
when :save
|
91
|
-
|
118
|
+
plan = Response::Resource::Plan.new(@source).set(@params)
|
119
|
+
[:post, '/plans/{id}', plan]
|
92
120
|
when :delete
|
93
121
|
pln_id = generate_resource_id(Response::Resource::Plan::PREFIX)
|
94
122
|
[:delete, '/plans/{id}', Response::Deleted.new(pln_id)]
|
95
123
|
when :all
|
96
|
-
list = Response::List.new('/plans') { Response::Resource::Plan.new }
|
124
|
+
list = Response::List.new('/plans') { Response::Resource::Plan.new(@source) }
|
97
125
|
[:get, '/plans', list]
|
98
126
|
else
|
99
127
|
raise UnknownOperation, @operation
|
@@ -110,47 +138,50 @@ module PayjpMock
|
|
110
138
|
end
|
111
139
|
[:post, '/subscriptions', subscription]
|
112
140
|
when :retrieve
|
113
|
-
[:get, '/subscriptions/{id}', Response::Resource::Subscription.new]
|
141
|
+
[:get, '/subscriptions/{id}', Response::Resource::Subscription.new(@source)]
|
114
142
|
when :save
|
115
|
-
subscription =
|
143
|
+
subscription = Response::Resource::Subscription.new(@source)
|
144
|
+
subscription.set(
|
116
145
|
if @params[:trial_end] == 'now'
|
117
146
|
warn('parameter `trial_end` cannot be set to `now` yet')
|
118
|
-
|
147
|
+
@params.except(:trial_end)
|
119
148
|
else
|
120
|
-
|
149
|
+
@params
|
121
150
|
end
|
151
|
+
)
|
122
152
|
[:post, '/subscriptions/{id}', subscription]
|
123
153
|
when :pause
|
124
|
-
subscription = Response::Resource::Subscription.new(
|
125
|
-
|
126
|
-
|
127
|
-
)
|
154
|
+
subscription = Response::Resource::Subscription.new(@source)
|
155
|
+
subscription.set(status: 'paused', paused_at: Time.now.to_i)
|
156
|
+
|
128
157
|
[:post, '/subscriptions/{id}/pause', subscription]
|
129
158
|
when :resume
|
130
|
-
subscription =
|
131
|
-
case @params[:trial_end]
|
132
|
-
when nil
|
133
|
-
Response::Resource::Subscription.new(@params).set(status: 'active')
|
134
|
-
when 'now'
|
135
|
-
warn('parameter `trial_end` cannot be set to `now` yet')
|
136
|
-
Response::Resource::Subscription.new(@params.except(:trial_end)).set(status: 'active')
|
137
|
-
else
|
138
|
-
Response::Resource::Subscription.new(@params)
|
139
|
-
end
|
159
|
+
subscription = Response::Resource::Subscription.new(@source)
|
140
160
|
subscription.set(resumed_at: Time.now.to_i)
|
141
161
|
|
162
|
+
case @params[:trial_end]
|
163
|
+
when nil
|
164
|
+
subscription.set(@params).set(status: 'active')
|
165
|
+
when 'now'
|
166
|
+
warn('parameter `trial_end` cannot be set to `now` yet')
|
167
|
+
subscription.set(@params.except(:trial_end)).set(status: 'active')
|
168
|
+
else
|
169
|
+
subscription.set(@params)
|
170
|
+
end
|
171
|
+
|
142
172
|
[:post, '/subscriptions/{id}/resume', subscription]
|
143
173
|
when :cancel
|
144
|
-
subscription = Response::Resource::Subscription.new(
|
145
|
-
|
146
|
-
|
147
|
-
)
|
174
|
+
subscription = Response::Resource::Subscription.new(@source)
|
175
|
+
subscription.set(status: 'canceled', canceled_at: Time.now.to_i)
|
176
|
+
|
148
177
|
[:post, '/subscriptions/{id}/cancel', subscription]
|
149
178
|
when :delete
|
150
179
|
sub_id = generate_resource_id(Response::Resource::Subscription::PREFIX)
|
151
180
|
[:delete, '/subscriptions/{id}', Response::Deleted.new(sub_id)]
|
152
181
|
when :all
|
153
|
-
list = Response::List.new('/subscriptions')
|
182
|
+
list = Response::List.new('/subscriptions') do
|
183
|
+
Response::Resource::Subscription.new(@source)
|
184
|
+
end
|
154
185
|
[:get, '/subscriptions', list]
|
155
186
|
else
|
156
187
|
raise UnknownOperation, @operation
|
@@ -160,16 +191,16 @@ module PayjpMock
|
|
160
191
|
when :create
|
161
192
|
[:post, '/tokens', Response::Resource::Token.new(@params)]
|
162
193
|
when :retrieve
|
163
|
-
[:get, '/tokens/{id}', Response::Resource::Token.new]
|
194
|
+
[:get, '/tokens/{id}', Response::Resource::Token.new(@source)]
|
164
195
|
else
|
165
196
|
raise UnknownOperation, @operation
|
166
197
|
end
|
167
198
|
when :transfer, :transfers
|
168
199
|
case @operation
|
169
200
|
when :retrieve
|
170
|
-
[:get, '/transfers/{id}', Response::Resource::Transfer.new]
|
201
|
+
[:get, '/transfers/{id}', Response::Resource::Transfer.new(@source)]
|
171
202
|
when :all
|
172
|
-
list = Response::List.new('/transfers') { Response::Resource::Transfer.new }
|
203
|
+
list = Response::List.new('/transfers') { Response::Resource::Transfer.new(@source) }
|
173
204
|
[:get, '/transfers', list]
|
174
205
|
else
|
175
206
|
raise UnknownOperation, @operation
|
@@ -178,7 +209,9 @@ module PayjpMock
|
|
178
209
|
case @operation
|
179
210
|
when :all
|
180
211
|
tr_id = generate_resource_id(Response::Resource::Transfer::PREFIX)
|
181
|
-
list
|
212
|
+
list = Response::List.new("/transfers/#{tr_id}/charges") do
|
213
|
+
Response::Resource::Charge.new(@source)
|
214
|
+
end
|
182
215
|
[:get, '/transfers/{transfer_id}/charges', list]
|
183
216
|
else
|
184
217
|
raise UnknownOperation, @operation
|
@@ -186,9 +219,9 @@ module PayjpMock
|
|
186
219
|
when :event, :events
|
187
220
|
case @operation
|
188
221
|
when :retrieve
|
189
|
-
[:get, '/events/{id}', Response::Resource::Event.new]
|
222
|
+
[:get, '/events/{id}', Response::Resource::Event.new(@source)]
|
190
223
|
when :all
|
191
|
-
list = Response::List.new('/events') { Response::Resource::Event.new }
|
224
|
+
list = Response::List.new('/events') { Response::Resource::Event.new(@source) }
|
192
225
|
[:get, '/events', list]
|
193
226
|
else
|
194
227
|
raise UnknownOperation, @operation
|
@@ -196,7 +229,7 @@ module PayjpMock
|
|
196
229
|
when :account, :accounts
|
197
230
|
case @operation
|
198
231
|
when :retrieve
|
199
|
-
[:get, '/accounts', Response::Resource::Account.new]
|
232
|
+
[:get, '/accounts', Response::Resource::Account.new(@source)]
|
200
233
|
else
|
201
234
|
raise UnknownOperation, @operation
|
202
235
|
end
|
@@ -204,22 +237,7 @@ module PayjpMock
|
|
204
237
|
raise UnknownResource, @resource
|
205
238
|
end
|
206
239
|
|
207
|
-
response
|
208
|
-
case @error
|
209
|
-
when :card_error
|
210
|
-
Response::Error::CardError.new
|
211
|
-
when :invalid_request_error
|
212
|
-
Response::Error::InvalidRequestError.new
|
213
|
-
when :authentication_error
|
214
|
-
Response::Error::AuthenticationError.new
|
215
|
-
when :api_connection_error
|
216
|
-
Response::Error::ApiConnectionError.new
|
217
|
-
when :api_error
|
218
|
-
Response::Error::ApiError.new
|
219
|
-
else
|
220
|
-
success_resp
|
221
|
-
end
|
222
|
-
Request.new(method, path_pattern, @params, response)
|
240
|
+
Request.new(method, path_pattern, @params, @response || success_resp)
|
223
241
|
end
|
224
242
|
|
225
243
|
UnknownResource = Class.new(StandardError)
|
@@ -1,7 +1,11 @@
|
|
1
1
|
module PayjpMock
|
2
2
|
class Response::Error::Base < Response::Base
|
3
|
-
|
4
|
-
|
3
|
+
using Ext::Hash
|
4
|
+
|
5
|
+
def initialize(code: nil, message: nil, param: nil)
|
6
|
+
@attributes = default_attributes.merge(
|
7
|
+
{ code: code, message: message, param: param }.compact
|
8
|
+
)
|
5
9
|
end
|
6
10
|
|
7
11
|
def body
|
data/lib/payjp_mock/version.rb
CHANGED
@@ -1,9 +1,31 @@
|
|
1
1
|
module PayjpMock
|
2
2
|
module WebMockWrapper
|
3
|
-
|
4
|
-
|
3
|
+
using Ext::Hash
|
4
|
+
|
5
|
+
def payjp_stub(resource, operation, params: {}, source: {}, error: nil, response: nil)
|
6
|
+
builder = RequestBuilder.new(resource, operation, params, source, error, response)
|
5
7
|
request = builder.build
|
6
8
|
request.stub
|
7
9
|
end
|
10
|
+
|
11
|
+
def payjp_card_error(attributes = {})
|
12
|
+
Response::Error::CardError.new(attributes.symbolize_keys)
|
13
|
+
end
|
14
|
+
|
15
|
+
def payjp_invalid_request_error(attributes = {})
|
16
|
+
Response::Error::InvalidRequestError.new(attributes.symbolize_keys)
|
17
|
+
end
|
18
|
+
|
19
|
+
def payjp_authentication_error(attributes = {})
|
20
|
+
Response::Error::AuthenticationError.new(attributes.symbolize_keys)
|
21
|
+
end
|
22
|
+
|
23
|
+
def payjp_api_connection_error
|
24
|
+
Response::Error::ApiConnectionError.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def payjp_api_error(attributes = {})
|
28
|
+
Response::Error::ApiError.new(attributes.symbolize_keys)
|
29
|
+
end
|
8
30
|
end
|
9
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: payjp_mock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kirikiriyamama
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|