killbill-paypal-express 5.0.4 → 5.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- metadata +2 -36
- data/.gitignore +0 -35
- data/.travis.yml +0 -41
- data/Gemfile +0 -3
- data/Gemfile.head +0 -5
- data/Gemfile.lock +0 -160
- data/Jarfile +0 -12
- data/Jarfile.lock +0 -66
- data/LICENSE +0 -201
- data/NEWS +0 -120
- data/README.md +0 -265
- data/Rakefile +0 -30
- data/VERSION +0 -1
- data/config.ru +0 -4
- data/db/ddl.sql +0 -120
- data/db/migrate/20160326090325_add_indexes.rb +0 -7
- data/db/migrate/20160828090851_enlarge_message.rb +0 -11
- data/db/migrate/20161209090000_add_indexes.rb +0 -7
- data/db/schema.rb +0 -122
- data/killbill-paypal-express.gemspec +0 -53
- data/killbill.properties +0 -3
- data/paypal_express.yml +0 -30
- data/pom.xml +0 -45
- data/release.sh +0 -61
- data/spec/fixtures/DoExpressCheckoutPayment-duplicate.xml +0 -54
- data/spec/fixtures/GetExpressCheckoutDetails-success.xml +0 -102
- data/spec/paypal_express/base_plugin_spec.rb +0 -133
- data/spec/paypal_express/remote/baid_spec.rb +0 -305
- data/spec/paypal_express/remote/baid_spec_helpers.rb +0 -56
- data/spec/paypal_express/remote/browser_helpers.rb +0 -72
- data/spec/paypal_express/remote/build_plugin_helpers.rb +0 -33
- data/spec/paypal_express/remote/hpp_spec.rb +0 -502
- data/spec/paypal_express/remote/hpp_spec_helpers.rb +0 -365
- data/spec/paypal_express/response_spec.rb +0 -79
- data/spec/spec_helper.rb +0 -67
@@ -1,365 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require_relative 'browser_helpers'
|
3
|
-
|
4
|
-
module Killbill
|
5
|
-
module PaypalExpress
|
6
|
-
module HppSpecHelpers
|
7
|
-
|
8
|
-
include ::Killbill::PaypalExpress::BrowserHelpers
|
9
|
-
|
10
|
-
def hpp_setup
|
11
|
-
@call_context = build_call_context
|
12
|
-
@amount = BigDecimal.new('100')
|
13
|
-
@currency = 'USD'
|
14
|
-
@form_fields = @plugin.hash_to_properties(
|
15
|
-
:order_id => '1234',
|
16
|
-
:amount => @amount,
|
17
|
-
:currency => @currency
|
18
|
-
)
|
19
|
-
kb_account_id = SecureRandom.uuid
|
20
|
-
create_kb_account(kb_account_id, @plugin.kb_apis.proxied_services[:account_user_api])
|
21
|
-
@pm = create_payment_method(::Killbill::PaypalExpress::PaypalExpressPaymentMethod, kb_account_id, @call_context.tenant_id)
|
22
|
-
verify_payment_method kb_account_id
|
23
|
-
end
|
24
|
-
|
25
|
-
def validate_form(form)
|
26
|
-
form.kb_account_id.should == @pm.kb_account_id
|
27
|
-
form.form_url.should start_with('https://www.sandbox.paypal.com/cgi-bin/webscr')
|
28
|
-
form.form_method.should == 'GET'
|
29
|
-
end
|
30
|
-
|
31
|
-
def validate_nil_form_property(form, key)
|
32
|
-
key_properties = form.properties.select { |prop| prop.key == key }
|
33
|
-
key_properties.size.should == 0
|
34
|
-
end
|
35
|
-
|
36
|
-
def validate_form_property(form, key, value=nil)
|
37
|
-
key_properties = form.properties.select { |prop| prop.key == key }
|
38
|
-
key_properties.size.should == 1
|
39
|
-
key = key_properties.first.value
|
40
|
-
value.nil? ? key.should_not(be_nil) : key.should == value
|
41
|
-
key
|
42
|
-
end
|
43
|
-
|
44
|
-
def validate_token(form)
|
45
|
-
login_and_confirm form.form_url
|
46
|
-
end
|
47
|
-
|
48
|
-
def purchase_and_refund(kb_payment_id, purchase_payment_external_key, purchase_properties)
|
49
|
-
# Trigger the purchase
|
50
|
-
payment_response = @plugin.purchase_payment(@pm.kb_account_id, kb_payment_id, purchase_payment_external_key, @pm.kb_payment_method_id, @amount, @currency, purchase_properties, @call_context)
|
51
|
-
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
52
|
-
payment_response.amount.should == @amount
|
53
|
-
payment_response.transaction_type.should == :PURCHASE
|
54
|
-
payer_id = find_value_from_properties(payment_response.properties, 'payerId')
|
55
|
-
payer_id.should_not be_nil
|
56
|
-
|
57
|
-
validate_details_for(kb_payment_id, :PURCHASE, payer_id)
|
58
|
-
# Verify GET API
|
59
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
|
60
|
-
payment_infos.size.should == 1
|
61
|
-
# purchase
|
62
|
-
payment_infos[0].kb_payment_id.should == kb_payment_id
|
63
|
-
payment_infos[0].transaction_type.should == :PURCHASE
|
64
|
-
payment_infos[0].amount.should == @amount
|
65
|
-
payment_infos[0].currency.should == @currency
|
66
|
-
payment_infos[0].status.should == :PROCESSED
|
67
|
-
payment_infos[0].gateway_error.should == 'Success'
|
68
|
-
payment_infos[0].gateway_error_code.should be_nil
|
69
|
-
find_value_from_properties(payment_infos[0].properties, 'payerId').should == payer_id
|
70
|
-
|
71
|
-
# Try a full refund
|
72
|
-
refund_response = @plugin.refund_payment(@pm.kb_account_id, kb_payment_id, SecureRandom.uuid, @pm.kb_payment_method_id, @amount, @currency, [], @call_context)
|
73
|
-
refund_response.status.should eq(:PROCESSED), refund_response.gateway_error
|
74
|
-
refund_response.amount.should == @amount
|
75
|
-
refund_response.transaction_type.should == :REFUND
|
76
|
-
|
77
|
-
# Verify GET API
|
78
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
|
79
|
-
payment_infos.size.should == 2
|
80
|
-
# refund
|
81
|
-
payment_infos[1].kb_payment_id.should.should == kb_payment_id
|
82
|
-
payment_infos[1].transaction_type.should == :REFUND
|
83
|
-
payment_infos[1].amount.should == @amount
|
84
|
-
payment_infos[1].currency.should == @currency
|
85
|
-
payment_infos[1].status.should == :PROCESSED
|
86
|
-
payment_infos[1].gateway_error.should == 'Success'
|
87
|
-
payment_infos[1].gateway_error_code.should be_nil
|
88
|
-
end
|
89
|
-
|
90
|
-
def authorize_capture_and_refund(kb_payment_id, payment_external_key, properties, payment_processor_account_id)
|
91
|
-
# Trigger the authorize
|
92
|
-
payment_response = @plugin.authorize_payment(@pm.kb_account_id, kb_payment_id, payment_external_key, @pm.kb_payment_method_id, @amount, @currency, properties, @call_context)
|
93
|
-
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
94
|
-
payment_response.amount.should == @amount
|
95
|
-
payment_response.transaction_type.should == :AUTHORIZE
|
96
|
-
payer_id = find_value_from_properties(payment_response.properties, 'payerId')
|
97
|
-
payer_id.should_not be_nil
|
98
|
-
|
99
|
-
validate_details_for(kb_payment_id, :AUTHORIZE, payer_id)
|
100
|
-
# Verify GET AUTHORIZED PAYMENT
|
101
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
102
|
-
payment_infos.size.should == 1
|
103
|
-
# authorize
|
104
|
-
payment_infos[0].kb_payment_id.should == kb_payment_id
|
105
|
-
payment_infos[0].transaction_type.should == :AUTHORIZE
|
106
|
-
payment_infos[0].amount.should == @amount
|
107
|
-
payment_infos[0].currency.should == @currency
|
108
|
-
payment_infos[0].status.should == :PROCESSED
|
109
|
-
payment_infos[0].gateway_error.should == 'Success'
|
110
|
-
payment_infos[0].gateway_error_code.should be_nil
|
111
|
-
find_value_from_properties(payment_infos[0].properties, 'payerId').should == payer_id
|
112
|
-
find_value_from_properties(payment_infos[0].properties, 'paymentInfoPaymentStatus').should == 'Pending'
|
113
|
-
find_value_from_properties(payment_infos[0].properties, 'paymentInfoPendingReason').should == 'authorization'
|
114
|
-
find_value_from_properties(payment_infos[0].properties, 'payment_processor_account_id').should == payment_processor_account_id
|
115
|
-
|
116
|
-
# Trigger the capture
|
117
|
-
payment_response = @plugin.capture_payment(@pm.kb_account_id, kb_payment_id, payment_external_key, @pm.kb_payment_method_id, @amount, @currency, properties, @call_context)
|
118
|
-
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
119
|
-
payment_response.amount.should == @amount
|
120
|
-
payment_response.transaction_type.should == :CAPTURE
|
121
|
-
|
122
|
-
# Verify GET CAPTURED PAYMENT
|
123
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
124
|
-
# Two expected transactions: one auth and one capture
|
125
|
-
payment_infos.size.should == 2
|
126
|
-
# capture
|
127
|
-
payment_infos[1].kb_payment_id.should == kb_payment_id
|
128
|
-
payment_infos[1].transaction_type.should == :CAPTURE
|
129
|
-
payment_infos[1].amount.should == @amount
|
130
|
-
payment_infos[1].currency.should == @currency
|
131
|
-
payment_infos[1].status.should == :PROCESSED
|
132
|
-
payment_infos[1].gateway_error.should == 'Success'
|
133
|
-
payment_infos[1].gateway_error_code.should be_nil
|
134
|
-
find_value_from_properties(payment_infos[1].properties, 'paymentInfoPaymentStatus').should == 'Completed'
|
135
|
-
find_value_from_properties(payment_infos[1].properties, 'payment_processor_account_id').should == payment_processor_account_id
|
136
|
-
|
137
|
-
# Try a full refund
|
138
|
-
refund_response = @plugin.refund_payment(@pm.kb_account_id, kb_payment_id, SecureRandom.uuid, @pm.kb_payment_method_id, @amount, @currency, [], @call_context)
|
139
|
-
refund_response.status.should eq(:PROCESSED), refund_response.gateway_error
|
140
|
-
refund_response.amount.should == @amount
|
141
|
-
refund_response.transaction_type.should == :REFUND
|
142
|
-
|
143
|
-
# Verify GET API
|
144
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
145
|
-
payment_infos.size.should == 3
|
146
|
-
# refund
|
147
|
-
payment_infos[2].kb_payment_id.should.should == kb_payment_id
|
148
|
-
payment_infos[2].transaction_type.should == :REFUND
|
149
|
-
payment_infos[2].amount.should == @amount
|
150
|
-
payment_infos[2].currency.should == @currency
|
151
|
-
payment_infos[2].status.should == :PROCESSED
|
152
|
-
payment_infos[2].gateway_error.should == 'Success'
|
153
|
-
payment_infos[2].gateway_error_code.should be_nil
|
154
|
-
find_value_from_properties(payment_infos[2].properties, 'payment_processor_account_id').should == payment_processor_account_id
|
155
|
-
end
|
156
|
-
|
157
|
-
def authorize_and_double_capture(kb_payment_id, payment_external_key, properties)
|
158
|
-
# Trigger the authorize
|
159
|
-
payment_response = @plugin.authorize_payment(@pm.kb_account_id, kb_payment_id, payment_external_key, @pm.kb_payment_method_id, @amount, @currency, properties, @call_context)
|
160
|
-
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
161
|
-
payment_response.amount.should == @amount
|
162
|
-
payment_response.transaction_type.should == :AUTHORIZE
|
163
|
-
payer_id = find_value_from_properties(payment_response.properties, 'payerId')
|
164
|
-
payer_id.should_not be_nil
|
165
|
-
|
166
|
-
validate_details_for(kb_payment_id, :AUTHORIZE, payer_id)
|
167
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
168
|
-
payment_infos.size.should == 1
|
169
|
-
# autorize
|
170
|
-
payment_infos[0].kb_payment_id.should == kb_payment_id
|
171
|
-
payment_infos[0].transaction_type.should == :AUTHORIZE
|
172
|
-
payment_infos[0].amount.should == @amount
|
173
|
-
payment_infos[0].currency.should == @currency
|
174
|
-
payment_infos[0].status.should == :PROCESSED
|
175
|
-
payment_infos[0].gateway_error.should == 'Success'
|
176
|
-
payment_infos[0].gateway_error_code.should be_nil
|
177
|
-
|
178
|
-
# Trigger the capture
|
179
|
-
payment_response = @plugin.capture_payment(@pm.kb_account_id, kb_payment_id, payment_external_key, @pm.kb_payment_method_id, @amount, @currency, properties, @call_context)
|
180
|
-
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
181
|
-
payment_response.amount.should == @amount
|
182
|
-
payment_response.transaction_type.should == :CAPTURE
|
183
|
-
|
184
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
185
|
-
payment_infos.size.should == 2
|
186
|
-
# capture
|
187
|
-
payment_infos[1].kb_payment_id.should == kb_payment_id
|
188
|
-
payment_infos[1].transaction_type.should == :CAPTURE
|
189
|
-
payment_infos[1].amount.should == @amount
|
190
|
-
payment_infos[1].currency.should == @currency
|
191
|
-
payment_infos[1].status.should == :PROCESSED
|
192
|
-
payment_infos[1].gateway_error.should == 'Success'
|
193
|
-
payment_infos[1].gateway_error_code.should be_nil
|
194
|
-
|
195
|
-
# Trigger a capture again with full amount
|
196
|
-
payment_response = @plugin.capture_payment(@pm.kb_account_id, kb_payment_id, payment_external_key, @pm.kb_payment_method_id, @amount, @currency, properties, @call_context)
|
197
|
-
payment_response.status.should eq(:ERROR), payment_response.gateway_error
|
198
|
-
payment_response.amount.should == nil
|
199
|
-
payment_response.transaction_type.should == :CAPTURE
|
200
|
-
|
201
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
202
|
-
payment_infos.size.should == 3
|
203
|
-
# capture again
|
204
|
-
payment_infos[2].kb_payment_id.should.should == kb_payment_id
|
205
|
-
payment_infos[2].transaction_type.should == :CAPTURE
|
206
|
-
payment_infos[2].amount.should be_nil
|
207
|
-
payment_infos[2].currency.should be_nil
|
208
|
-
payment_infos[2].status.should == :ERROR
|
209
|
-
payment_infos[2].gateway_error.should == 'Authorization has already been completed.'
|
210
|
-
payment_infos[2].gateway_error_code.should == "10602"
|
211
|
-
end
|
212
|
-
|
213
|
-
def authorize_and_void(kb_payment_id, payment_external_key, properties, payment_processor_account_id)
|
214
|
-
# Trigger the authorize
|
215
|
-
payment_response = @plugin.authorize_payment(@pm.kb_account_id, kb_payment_id, payment_external_key, @pm.kb_payment_method_id, @amount, @currency, properties, @call_context)
|
216
|
-
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
217
|
-
payment_response.amount.should == @amount
|
218
|
-
payment_response.transaction_type.should == :AUTHORIZE
|
219
|
-
payer_id = find_value_from_properties(payment_response.properties, 'payerId')
|
220
|
-
payer_id.should_not be_nil
|
221
|
-
|
222
|
-
validate_details_for(kb_payment_id, :AUTHORIZE, payer_id)
|
223
|
-
# Verify get_payment_info
|
224
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
225
|
-
payment_infos.size.should == 1
|
226
|
-
# authorize
|
227
|
-
payment_infos[0].kb_payment_id.should == kb_payment_id
|
228
|
-
payment_infos[0].transaction_type.should == :AUTHORIZE
|
229
|
-
payment_infos[0].amount.should == @amount
|
230
|
-
payment_infos[0].currency.should == @currency
|
231
|
-
payment_infos[0].status.should == :PROCESSED
|
232
|
-
payment_infos[0].gateway_error.should == 'Success'
|
233
|
-
payment_infos[0].gateway_error_code.should be_nil
|
234
|
-
find_value_from_properties(payment_infos[0].properties, 'payment_processor_account_id').should == payment_processor_account_id
|
235
|
-
|
236
|
-
# Trigger the void
|
237
|
-
payment_response = @plugin.void_payment(@pm.kb_account_id, kb_payment_id, payment_external_key, @pm.kb_payment_method_id, properties, @call_context)
|
238
|
-
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
239
|
-
payment_response.transaction_type.should == :VOID
|
240
|
-
|
241
|
-
# Verify get_payment_info
|
242
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties, @call_context)
|
243
|
-
# Two expected transactions: one auth and one capture, plus the details call
|
244
|
-
payment_infos.size.should == 2
|
245
|
-
# void
|
246
|
-
payment_infos[1].kb_payment_id.should == kb_payment_id
|
247
|
-
payment_infos[1].transaction_type.should == :VOID
|
248
|
-
payment_infos[1].status.should == :PROCESSED
|
249
|
-
payment_infos[1].gateway_error.should == 'Success'
|
250
|
-
payment_infos[1].gateway_error_code.should be_nil
|
251
|
-
find_value_from_properties(payment_infos[1].properties, 'payment_processor_account_id').should == payment_processor_account_id
|
252
|
-
end
|
253
|
-
|
254
|
-
def purchase_with_missing_token
|
255
|
-
failed_purchase([], :CANCELED, 'Could not retrieve the payer info: the token is missing', 'RuntimeError')
|
256
|
-
end
|
257
|
-
|
258
|
-
def authorize_with_missing_token
|
259
|
-
failed_authorize([], :CANCELED, 'Could not retrieve the payer info: the token is missing', 'RuntimeError')
|
260
|
-
end
|
261
|
-
|
262
|
-
def purchase_with_invalid_token(purchase_properties)
|
263
|
-
failed_purchase(purchase_properties, :CANCELED, "Could not retrieve the payer info for token #{properties_to_hash(purchase_properties)[:token]}", 'RuntimeError')
|
264
|
-
end
|
265
|
-
|
266
|
-
def authorize_with_invalid_token(authorize_properties)
|
267
|
-
failed_authorize(authorize_properties, :CANCELED, "Could not retrieve the payer info for token #{properties_to_hash(authorize_properties)[:token]}", 'RuntimeError')
|
268
|
-
end
|
269
|
-
|
270
|
-
def subsequent_purchase(purchase_properties)
|
271
|
-
failed_purchase(purchase_properties, :ERROR, 'A successful transaction has already been completed for this token.', '11607')
|
272
|
-
end
|
273
|
-
|
274
|
-
def failed_authorize(authorize_properties, status, msg, gateway_error_code=nil)
|
275
|
-
kb_payment_id = SecureRandom.uuid
|
276
|
-
|
277
|
-
payment_response = @plugin.authorize_payment(@pm.kb_account_id, kb_payment_id, SecureRandom.uuid, @pm.kb_payment_method_id, @amount, @currency, authorize_properties, @call_context)
|
278
|
-
payment_response.status.should eq(status), payment_response.gateway_error
|
279
|
-
payment_response.amount.should be_nil
|
280
|
-
payment_response.transaction_type.should == :AUTHORIZE
|
281
|
-
|
282
|
-
# Verify GET API
|
283
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
|
284
|
-
payment_infos.size.should == 1
|
285
|
-
payment_infos[0].kb_payment_id.should == kb_payment_id
|
286
|
-
payment_infos[0].transaction_type.should == :AUTHORIZE
|
287
|
-
payment_infos[0].amount.should be_nil
|
288
|
-
payment_infos[0].currency.should be_nil
|
289
|
-
payment_infos[0].status.should == status
|
290
|
-
payment_infos[0].gateway_error.should == msg
|
291
|
-
payment_infos[0].gateway_error_code.should == gateway_error_code
|
292
|
-
end
|
293
|
-
|
294
|
-
def failed_purchase(purchase_properties, status, msg, gateway_error_code=nil)
|
295
|
-
kb_payment_id = SecureRandom.uuid
|
296
|
-
|
297
|
-
payment_response = @plugin.purchase_payment(@pm.kb_account_id, kb_payment_id, SecureRandom.uuid, @pm.kb_payment_method_id, @amount, @currency, purchase_properties, @call_context)
|
298
|
-
payment_response.status.should eq(status), payment_response.gateway_error
|
299
|
-
payment_response.amount.should be_nil
|
300
|
-
payment_response.transaction_type.should == :PURCHASE
|
301
|
-
|
302
|
-
# Verify GET API
|
303
|
-
payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
|
304
|
-
token = find_value_from_properties(purchase_properties, 'token')
|
305
|
-
payment_infos.size.should == 1
|
306
|
-
payment_infos[0].kb_payment_id.should == kb_payment_id
|
307
|
-
payment_infos[0].transaction_type.should == :PURCHASE
|
308
|
-
payment_infos[0].amount.should be_nil
|
309
|
-
payment_infos[0].currency.should be_nil
|
310
|
-
payment_infos[0].status.should == status
|
311
|
-
payment_infos[0].gateway_error.should == msg
|
312
|
-
payment_infos[0].gateway_error_code.should == gateway_error_code
|
313
|
-
end
|
314
|
-
|
315
|
-
def transition_last_response_to_UNDEFINED(expected_nb_transactions, kb_payment_id, delete_last_trx = true)
|
316
|
-
Killbill::PaypalExpress::PaypalExpressTransaction.last.delete if delete_last_trx
|
317
|
-
response = Killbill::PaypalExpress::PaypalExpressResponse.last
|
318
|
-
initial_auth = response.authorization
|
319
|
-
response.update(:authorization => nil, :message => {:payment_plugin_status => 'UNDEFINED'}.to_json)
|
320
|
-
|
321
|
-
skip_gw = Killbill::Plugin::Model::PluginProperty.new
|
322
|
-
skip_gw.key = 'skip_gw'
|
323
|
-
skip_gw.value = 'true'
|
324
|
-
properties_with_skip_gw = [skip_gw]
|
325
|
-
|
326
|
-
# Set skip_gw=true, to avoid calling the report API
|
327
|
-
transaction_info_plugins = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, properties_with_skip_gw, @call_context)
|
328
|
-
transaction_info_plugins.size.should == expected_nb_transactions
|
329
|
-
transaction_info_plugins.last.status.should eq(:UNDEFINED)
|
330
|
-
|
331
|
-
[response, initial_auth]
|
332
|
-
end
|
333
|
-
|
334
|
-
def verify_janitor_transition(nb_trx_plugin_info, trx_type, trx_status, kb_payment_id, delete_last_trx = true, hard_expiration_date = 0, janitor_delay = 0)
|
335
|
-
transition_last_response_to_UNDEFINED(nb_trx_plugin_info, kb_payment_id, delete_last_trx)
|
336
|
-
# wait 5 sec for PayPal to populate the record in search endpoint
|
337
|
-
sleep 5
|
338
|
-
janitor_delay_threshold = Killbill::Plugin::Model::PluginProperty.new
|
339
|
-
janitor_delay_threshold.key = 'janitor_delay_threshold'
|
340
|
-
janitor_delay_threshold.value = janitor_delay
|
341
|
-
cancel_threshold = Killbill::Plugin::Model::PluginProperty.new
|
342
|
-
cancel_threshold.key = 'cancel_threshold'
|
343
|
-
cancel_threshold.value = hard_expiration_date
|
344
|
-
transaction_info_plugins = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [janitor_delay_threshold, cancel_threshold], @call_context)
|
345
|
-
transaction_info_plugins.size.should == nb_trx_plugin_info
|
346
|
-
transaction_info_plugins.last.status.should eq(trx_status)
|
347
|
-
transaction_info_plugins.last.transaction_type.should eq(trx_type)
|
348
|
-
end
|
349
|
-
|
350
|
-
private
|
351
|
-
|
352
|
-
def verify_payment_method(kb_account_id = nil)
|
353
|
-
# Verify our table directly
|
354
|
-
kb_account_id = @pm.kb_account_id if kb_account_id.nil?
|
355
|
-
payment_methods = ::Killbill::PaypalExpress::PaypalExpressPaymentMethod.from_kb_account_id(kb_account_id, @call_context.tenant_id)
|
356
|
-
payment_methods.size.should == 1
|
357
|
-
payment_method = payment_methods.first
|
358
|
-
payment_method.should_not be_nil
|
359
|
-
payment_method.paypal_express_payer_id.should be_nil
|
360
|
-
payment_method.token.should be_nil
|
361
|
-
payment_method.kb_payment_method_id.should == @pm.kb_payment_method_id
|
362
|
-
end
|
363
|
-
end
|
364
|
-
end
|
365
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'nokogiri'
|
3
|
-
|
4
|
-
describe Killbill::PaypalExpress::PaypalExpressResponse do
|
5
|
-
|
6
|
-
def load_paypal_response(action, suffix)
|
7
|
-
@spec_root ||= File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
8
|
-
xml = IO.read(File.join(@spec_root, "fixtures", action + "-" + suffix + ".xml"))
|
9
|
-
ActiveMerchant::Billing::PaypalGateway.any_instance.stub(:build_request).and_return(nil)
|
10
|
-
ActiveMerchant::Billing::PaypalGateway.any_instance.stub(:ssl_post).and_return(xml)
|
11
|
-
api = ActiveMerchant::Billing::PaypalGateway.new(:login => "dummy", :password => "password", :signature => "dummy")
|
12
|
-
api.send(:commit, action, nil)
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'should read a successful GetExpressCheckoutDetails response correctly' do
|
16
|
-
action = "GetExpressCheckoutDetails"
|
17
|
-
response = ::Killbill::PaypalExpress::PaypalExpressResponse.from_response(
|
18
|
-
action, # api_call
|
19
|
-
"account1", # kb_account_id
|
20
|
-
"payment1", # kb_payment_id
|
21
|
-
nil, # kb_payment_transaction_id
|
22
|
-
nil, # transaction_type
|
23
|
-
"account2", # payment_processor_account_id
|
24
|
-
"tenant1", # kb_tenant_id
|
25
|
-
load_paypal_response(action, "success")
|
26
|
-
)
|
27
|
-
expect(response.api_call).to eq(action)
|
28
|
-
expect(response.kb_account_id).to eq("account1")
|
29
|
-
expect(response.kb_payment_id).to eq("payment1")
|
30
|
-
expect(response.kb_payment_transaction_id).to be_nil
|
31
|
-
expect(response.transaction_type).to be_nil
|
32
|
-
expect(response.payment_processor_account_id).to eq("account2")
|
33
|
-
expect(response.kb_tenant_id).to eq("tenant1")
|
34
|
-
# data from the fixture as parsed by PaypalCommonAPI and PaypalExpressResponse
|
35
|
-
expect(response.message).to eq("Success")
|
36
|
-
expect(response.authorization).to be_nil
|
37
|
-
expect(response.fraud_review).to eq(false)
|
38
|
-
expect(response.success).to eq(true)
|
39
|
-
|
40
|
-
expect(response.token).to eq("EC-MY_TOKEN")
|
41
|
-
expect(response.payer_id).to eq("MY_PAYER_ID")
|
42
|
-
expect(response.payment_info_reasoncode).to be_nil
|
43
|
-
|
44
|
-
expect(response.gateway_error_code).to be_nil
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should read a DoExpressCheckoutPayment response with an error code correctly' do
|
48
|
-
action = "DoExpressCheckoutPayment"
|
49
|
-
response = ::Killbill::PaypalExpress::PaypalExpressResponse.from_response(
|
50
|
-
action, # api_call
|
51
|
-
"account1", # kb_account_id
|
52
|
-
"payment1", # kb_payment_id
|
53
|
-
"transaction1", # kb_payment_transaction_id
|
54
|
-
:purchase, # transaction_type
|
55
|
-
"account2", # payment_processor_account_id
|
56
|
-
"tenant1", # kb_tenant_id
|
57
|
-
load_paypal_response(action, "duplicate")
|
58
|
-
)
|
59
|
-
expect(response.api_call).to eq(action)
|
60
|
-
expect(response.kb_account_id).to eq("account1")
|
61
|
-
expect(response.kb_payment_id).to eq("payment1")
|
62
|
-
expect(response.kb_payment_transaction_id).to eq("transaction1")
|
63
|
-
expect(response.transaction_type).to eq(:purchase)
|
64
|
-
expect(response.payment_processor_account_id).to eq("account2")
|
65
|
-
expect(response.kb_tenant_id).to eq("tenant1")
|
66
|
-
# data from the fixture as parsed by PaypalCommonAPI and PaypalExpressResponse
|
67
|
-
expect(response.message).to eq("A successful transaction has already been completed for this token.")
|
68
|
-
expect(response.authorization).to eq("3K289148GS508731G")
|
69
|
-
expect(response.fraud_review).to eq(false)
|
70
|
-
expect(response.success).to eq(false)
|
71
|
-
|
72
|
-
expect(response.token).to eq("EC-MY_TOKEN")
|
73
|
-
expect(response.payer_id).to be_nil
|
74
|
-
expect(response.payment_info_reasoncode).to eq("11607")
|
75
|
-
|
76
|
-
expect(response.gateway_error_code).to eq("11607")
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'bundler'
|
2
|
-
require 'paypal_express'
|
3
|
-
require 'killbill/helpers/active_merchant/killbill_spec_helper'
|
4
|
-
|
5
|
-
require 'logger'
|
6
|
-
|
7
|
-
require 'rspec'
|
8
|
-
|
9
|
-
RSpec.configure do |config|
|
10
|
-
config.color_enabled = true
|
11
|
-
config.tty = true
|
12
|
-
config.formatter = 'documentation'
|
13
|
-
end
|
14
|
-
|
15
|
-
require 'active_record'
|
16
|
-
ActiveRecord::Base.establish_connection(
|
17
|
-
:adapter => 'sqlite3',
|
18
|
-
:database => 'test.db'
|
19
|
-
)
|
20
|
-
# For debugging
|
21
|
-
# ActiveRecord::Base.logger = Logger.new(STDOUT)
|
22
|
-
# Create the schema
|
23
|
-
require File.expand_path(File.dirname(__FILE__) + '../../db/schema.rb')
|
24
|
-
|
25
|
-
|
26
|
-
def validate_details_for(kb_payment_id, transaction_type, payer_id)
|
27
|
-
details_for = ::Killbill::PaypalExpress::PaypalExpressResponse.where(:kb_payment_id => kb_payment_id).where(:api_call => :details_for).last
|
28
|
-
details_for.message.should == "Success"
|
29
|
-
details_for.transaction_type.to_sym.should == transaction_type.to_sym
|
30
|
-
details_for.payer_id.should == payer_id
|
31
|
-
details_for.payer_name.should_not be_nil
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
class PaypalExpressJavaPaymentApi < ::Killbill::Plugin::ActiveMerchant::RSpec::FakeJavaPaymentApi
|
36
|
-
|
37
|
-
def initialize(plugin)
|
38
|
-
super()
|
39
|
-
@plugin = plugin
|
40
|
-
end
|
41
|
-
|
42
|
-
def get_account_payment_methods(kb_account_id, plugin_info, properties, context)
|
43
|
-
[OpenStruct.new(:plugin_name => 'killbill-paypal-express', :id => SecureRandom.uuid)]
|
44
|
-
end
|
45
|
-
|
46
|
-
def create_purchase(kb_account, kb_payment_method_id, kb_payment_id, amount, currency, payment_external_key, payment_transaction_external_key, properties, context)
|
47
|
-
kb_payment = add_payment(kb_payment_id || SecureRandom.uuid, SecureRandom.uuid, payment_transaction_external_key, :PURCHASE)
|
48
|
-
|
49
|
-
rcontext = context.to_ruby(context)
|
50
|
-
@plugin.purchase_payment(kb_account.id, kb_payment.id, kb_payment.transactions.last.id, kb_payment_method_id, amount, currency, properties, rcontext)
|
51
|
-
|
52
|
-
kb_payment
|
53
|
-
end
|
54
|
-
|
55
|
-
def create_authorization(kb_account, kb_payment_method_id, kb_payment_id, amount, currency, payment_external_key, payment_transaction_external_key, properties, context)
|
56
|
-
kb_payment = add_payment(kb_payment_id || SecureRandom.uuid, SecureRandom.uuid, payment_transaction_external_key, :AUTHORIZE)
|
57
|
-
|
58
|
-
rcontext = context.to_ruby(context)
|
59
|
-
@plugin.authorize_payment(kb_account.id, kb_payment.id, kb_payment.transactions.last.id, kb_payment_method_id, amount, currency, properties, rcontext)
|
60
|
-
|
61
|
-
kb_payment
|
62
|
-
end
|
63
|
-
|
64
|
-
def delete_all_payments
|
65
|
-
@payments = []
|
66
|
-
end
|
67
|
-
end
|