killbill-paypal-express 4.0.0 → 4.1.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.
@@ -0,0 +1,256 @@
1
+ require 'spec_helper'
2
+
3
+ ActiveMerchant::Billing::Base.mode = :test
4
+
5
+ describe Killbill::PaypalExpress::PaymentPlugin do
6
+
7
+ include ::Killbill::Plugin::ActiveMerchant::RSpec
8
+
9
+ before(:all) do
10
+ @plugin = build_plugin(::Killbill::PaypalExpress::PaymentPlugin, 'paypal_express')
11
+ svcs = @plugin.kb_apis.proxied_services
12
+ svcs[:payment_api] = PaypalExpressJavaPaymentApi.new(@plugin)
13
+ @plugin.kb_apis = ::Killbill::Plugin::KillbillApi.new('paypal_express', svcs)
14
+ @plugin.start_plugin
15
+
16
+ @call_context = build_call_context
17
+
18
+ @amount = BigDecimal.new('100')
19
+ @currency = 'USD'
20
+ @form_fields = @plugin.hash_to_properties(
21
+ :order_id => '1234',
22
+ :amount => @amount,
23
+ :currency => @currency
24
+ )
25
+
26
+ kb_account_id = SecureRandom.uuid
27
+ create_kb_account(kb_account_id, @plugin.kb_apis.proxied_services[:account_user_api])
28
+
29
+ @pm = create_payment_method(::Killbill::PaypalExpress::PaypalExpressPaymentMethod, kb_account_id, @call_context.tenant_id)
30
+ verify_payment_method
31
+ end
32
+
33
+ before(:each) do
34
+ ::Killbill::PaypalExpress::PaypalExpressTransaction.delete_all
35
+ ::Killbill::PaypalExpress::PaypalExpressResponse.delete_all
36
+ end
37
+
38
+ it 'should generate forms correctly' do
39
+ ::Killbill::PaypalExpress::PaypalExpressTransaction.count.should == 0
40
+ ::Killbill::PaypalExpress::PaypalExpressResponse.count.should == 0
41
+
42
+ # Verify the payment cannot go through without the token
43
+ purchase_with_missing_token
44
+
45
+ # Verify multiple payments can be triggered for the same payment method
46
+ n = 2
47
+ 1.upto(n) do
48
+ form = @plugin.build_form_descriptor(@pm.kb_account_id, @form_fields, [], @call_context)
49
+ validate_form(form)
50
+ validate_nil_form_property(form, 'kb_payment_id')
51
+ validate_nil_form_property(form, 'kb_transaction_external_key')
52
+ token = validate_form_property(form, 'token')
53
+
54
+ # Verify no payment was created in Kill Bill
55
+ @plugin.kb_apis.proxied_services[:payment_api].payments.should be_empty
56
+
57
+ properties = []
58
+ properties << build_property('token', token)
59
+
60
+ # Verify the payment cannot go through until the token is validated
61
+ purchase_with_invalid_token(properties)
62
+
63
+ validate_token(form)
64
+
65
+ purchase_and_refund(SecureRandom.uuid, SecureRandom.uuid, properties)
66
+
67
+ # Verify no extra payment was created in Kill Bill by the plugin
68
+ @plugin.kb_apis.proxied_services[:payment_api].payments.should be_empty
69
+
70
+ # Verify the token cannot be re-used
71
+ subsequent_purchase(properties)
72
+
73
+ # Verify no token/baid was stored
74
+ verify_payment_method
75
+ end
76
+
77
+ # Each loop triggers one successful purchase and one successful refund
78
+ ::Killbill::PaypalExpress::PaypalExpressTransaction.count.should == 2 * n
79
+ ::Killbill::PaypalExpress::PaypalExpressResponse.count.should == 1 + 8 * n
80
+ end
81
+
82
+ it 'should generate forms with pending payments correctly' do
83
+ ::Killbill::PaypalExpress::PaypalExpressTransaction.count.should == 0
84
+ ::Killbill::PaypalExpress::PaypalExpressResponse.count.should == 0
85
+
86
+ # Verify the payment cannot go through without the token
87
+ purchase_with_missing_token
88
+
89
+ # Verify multiple payments can be triggered for the same payment method
90
+ n = 2
91
+ 1.upto(n) do |i|
92
+ payment_external_key = SecureRandom.uuid
93
+ properties = @plugin.hash_to_properties(
94
+ :transaction_external_key => payment_external_key,
95
+ :create_pending_payment => true
96
+ )
97
+
98
+ form = @plugin.build_form_descriptor(@pm.kb_account_id, @form_fields, properties, @call_context)
99
+ validate_form(form)
100
+ kb_payment_id = validate_form_property(form, 'kb_payment_id')
101
+ validate_form_property(form, 'kb_transaction_external_key', payment_external_key)
102
+ token = validate_form_property(form, 'token')
103
+
104
+ # Verify the payment was created in Kill Bill
105
+ @plugin.kb_apis.proxied_services[:payment_api].payments.size.should == i
106
+ @plugin.kb_apis.proxied_services[:payment_api].get_payment(kb_payment_id).transactions.first.external_key.should == payment_external_key
107
+
108
+ # Verify GET API
109
+ payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
110
+ payment_infos.size.should == 1
111
+ payment_infos[0].kb_payment_id.should == kb_payment_id
112
+ payment_infos[0].transaction_type.should == :PURCHASE
113
+ payment_infos[0].amount.should be_nil
114
+ payment_infos[0].currency.should be_nil
115
+ payment_infos[0].status.should == :PENDING
116
+ payment_infos[0].gateway_error.should == '{"payment_plugin_status":"PENDING"}'
117
+ payment_infos[0].gateway_error_code.should be_nil
118
+
119
+ properties = []
120
+ properties << build_property('token', token)
121
+
122
+ # Verify the payment cannot go through until the token is validated
123
+ purchase_with_invalid_token(properties)
124
+
125
+ validate_token(form)
126
+
127
+ purchase_and_refund(kb_payment_id, payment_external_key, properties)
128
+
129
+ # Verify no extra payment was created in Kill Bill by the plugin
130
+ @plugin.kb_apis.proxied_services[:payment_api].payments.size.should == i
131
+
132
+ # Verify the token cannot be re-used
133
+ subsequent_purchase(properties)
134
+
135
+ # Verify no token/baid was stored
136
+ verify_payment_method
137
+ end
138
+
139
+ # Each loop triggers one successful purchase and one successful refund
140
+ ::Killbill::PaypalExpress::PaypalExpressTransaction.count.should == 2 * n
141
+ ::Killbill::PaypalExpress::PaypalExpressResponse.count.should == 1 + 9 * n
142
+ end
143
+
144
+ private
145
+
146
+ def validate_form(form)
147
+ form.kb_account_id.should == @pm.kb_account_id
148
+ form.form_url.should start_with('https://www.sandbox.paypal.com/cgi-bin/webscr')
149
+ form.form_method.should == 'GET'
150
+ end
151
+
152
+ def validate_nil_form_property(form, key)
153
+ key_properties = form.properties.select { |prop| prop.key == key }
154
+ key_properties.size.should == 0
155
+ end
156
+
157
+ def validate_form_property(form, key, value=nil)
158
+ key_properties = form.properties.select { |prop| prop.key == key }
159
+ key_properties.size.should == 1
160
+ key = key_properties.first.value
161
+ value.nil? ? key.should_not(be_nil) : key.should == value
162
+ key
163
+ end
164
+
165
+ def validate_token(form)
166
+ print "\nPlease go to #{form.form_url} to proceed and press any key to continue...
167
+ Note: you need to log-in with a paypal sandbox account (create one here: https://developer.paypal.com/webapps/developer/applications/accounts)\n"
168
+ $stdin.gets
169
+ end
170
+
171
+ def purchase_and_refund(kb_payment_id, purchase_payment_external_key, purchase_properties)
172
+ # Trigger the purchase
173
+ 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)
174
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
175
+ payment_response.amount.should == @amount
176
+ payment_response.transaction_type.should == :PURCHASE
177
+
178
+ # Verify GET API
179
+ payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
180
+ payment_infos.size.should == 1
181
+ payment_infos[0].kb_payment_id.should == kb_payment_id
182
+ payment_infos[0].transaction_type.should == :PURCHASE
183
+ payment_infos[0].amount.should == @amount
184
+ payment_infos[0].currency.should == @currency
185
+ payment_infos[0].status.should == :PROCESSED
186
+ payment_infos[0].gateway_error.should == 'Success'
187
+ payment_infos[0].gateway_error_code.should be_nil
188
+
189
+ # Try a full refund
190
+ refund_response = @plugin.refund_payment(@pm.kb_account_id, kb_payment_id, SecureRandom.uuid, @pm.kb_payment_method_id, @amount, @currency, [], @call_context)
191
+ refund_response.status.should eq(:PROCESSED), refund_response.gateway_error
192
+ refund_response.amount.should == @amount
193
+ refund_response.transaction_type.should == :REFUND
194
+
195
+ # Verify GET API
196
+ payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
197
+ payment_infos.size.should == 2
198
+ payment_infos[0].kb_payment_id.should == kb_payment_id
199
+ payment_infos[0].transaction_type.should == :PURCHASE
200
+ payment_infos[0].amount.should == @amount
201
+ payment_infos[0].currency.should == @currency
202
+ payment_infos[0].status.should == :PROCESSED
203
+ payment_infos[0].gateway_error.should == 'Success'
204
+ payment_infos[0].gateway_error_code.should be_nil
205
+ payment_infos[1].kb_payment_id.should.should == kb_payment_id
206
+ payment_infos[1].transaction_type.should == :REFUND
207
+ payment_infos[1].amount.should == @amount
208
+ payment_infos[1].currency.should == @currency
209
+ payment_infos[1].status.should == :PROCESSED
210
+ payment_infos[1].gateway_error.should == 'Success'
211
+ payment_infos[1].gateway_error_code.should be_nil
212
+ end
213
+
214
+ def purchase_with_missing_token
215
+ failed_purchase([], :CANCELED, 'Could not find the payer_id: the token is missing', 'RuntimeError')
216
+ end
217
+
218
+ def purchase_with_invalid_token(purchase_properties)
219
+ failed_purchase(purchase_properties, :CANCELED, "Could not find the payer_id for token #{properties_to_hash(purchase_properties)[:token]}", 'RuntimeError')
220
+ end
221
+
222
+ def subsequent_purchase(purchase_properties)
223
+ failed_purchase(purchase_properties, :ERROR, 'A successful transaction has already been completed for this token.')
224
+ end
225
+
226
+ def failed_purchase(purchase_properties, status, msg, gateway_error_code=nil)
227
+ kb_payment_id = SecureRandom.uuid
228
+
229
+ 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)
230
+ payment_response.status.should eq(status), payment_response.gateway_error
231
+ payment_response.amount.should be_nil
232
+ payment_response.transaction_type.should == :PURCHASE
233
+
234
+ # Verify GET API
235
+ payment_infos = @plugin.get_payment_info(@pm.kb_account_id, kb_payment_id, [], @call_context)
236
+ payment_infos.size.should == 1
237
+ payment_infos[0].kb_payment_id.should == kb_payment_id
238
+ payment_infos[0].transaction_type.should == :PURCHASE
239
+ payment_infos[0].amount.should be_nil
240
+ payment_infos[0].currency.should be_nil
241
+ payment_infos[0].status.should == status
242
+ payment_infos[0].gateway_error.should == msg
243
+ payment_infos[0].gateway_error_code.should == gateway_error_code
244
+ end
245
+
246
+ def verify_payment_method
247
+ # Verify our table directly
248
+ payment_methods = ::Killbill::PaypalExpress::PaypalExpressPaymentMethod.from_kb_account_id(@pm.kb_account_id, @call_context.tenant_id)
249
+ payment_methods.size.should == 1
250
+ payment_method = payment_methods.first
251
+ payment_method.should_not be_nil
252
+ payment_method.paypal_express_payer_id.should be_nil
253
+ payment_method.token.should be_nil
254
+ payment_method.kb_payment_method_id.should == @pm.kb_payment_method_id
255
+ end
256
+ end
data/spec/spec_helper.rb CHANGED
@@ -22,3 +22,23 @@ ActiveRecord::Base.establish_connection(
22
22
  # Create the schema
23
23
  require File.expand_path(File.dirname(__FILE__) + '../../db/schema.rb')
24
24
 
25
+ class PaypalExpressJavaPaymentApi < ::Killbill::Plugin::ActiveMerchant::RSpec::FakeJavaPaymentApi
26
+
27
+ def initialize(plugin)
28
+ super()
29
+ @plugin = plugin
30
+ end
31
+
32
+ def get_account_payment_methods(kb_account_id, plugin_info, properties, context)
33
+ [OpenStruct.new(:plugin_name => 'killbill-paypal-express', :id => SecureRandom.uuid)]
34
+ end
35
+
36
+ def create_purchase(kb_account, kb_payment_method_id, kb_payment_id, amount, currency, payment_external_key, payment_transaction_external_key, properties, context)
37
+ kb_payment = add_payment(kb_payment_id || SecureRandom.uuid, SecureRandom.uuid, payment_transaction_external_key, :PURCHASE)
38
+
39
+ rcontext = context.to_ruby(context)
40
+ @plugin.purchase_payment(kb_account.id, kb_payment.id, kb_payment.transactions.last.id, kb_payment_method_id, amount, currency, properties, rcontext)
41
+
42
+ kb_payment
43
+ end
44
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killbill-paypal-express
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kill Bill core team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-18 00:00:00.000000000 Z
11
+ date: 2016-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: killbill
@@ -87,11 +87,17 @@ dependencies:
87
87
  - - ~>
88
88
  - !ruby/object:Gem::Version
89
89
  version: '1.3'
90
+ - - <
91
+ - !ruby/object:Gem::Version
92
+ version: '1.5'
90
93
  requirement: !ruby/object:Gem::Requirement
91
94
  requirements:
92
95
  - - ~>
93
96
  - !ruby/object:Gem::Version
94
97
  version: '1.3'
98
+ - - <
99
+ - !ruby/object:Gem::Version
100
+ version: '1.5'
95
101
  prerelease: false
96
102
  type: :runtime
97
103
  - !ruby/object:Gem::Dependency
@@ -100,12 +106,12 @@ dependencies:
100
106
  requirements:
101
107
  - - ~>
102
108
  - !ruby/object:Gem::Version
103
- version: 0.9.6
109
+ version: 0.9.11
104
110
  requirement: !ruby/object:Gem::Requirement
105
111
  requirements:
106
112
  - - ~>
107
113
  - !ruby/object:Gem::Version
108
- version: 0.9.6
114
+ version: 0.9.11
109
115
  prerelease: false
110
116
  type: :runtime
111
117
  - !ruby/object:Gem::Dependency
@@ -262,6 +268,20 @@ dependencies:
262
268
  version: '1.1'
263
269
  prerelease: false
264
270
  type: :development
271
+ - !ruby/object:Gem::Dependency
272
+ name: jdbc-postgres
273
+ version_requirements: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ~>
276
+ - !ruby/object:Gem::Version
277
+ version: '9.4'
278
+ requirement: !ruby/object:Gem::Requirement
279
+ requirements:
280
+ - - ~>
281
+ - !ruby/object:Gem::Version
282
+ version: '9.4'
283
+ prerelease: false
284
+ type: :development
265
285
  description: Kill Bill payment plugin for Paypal Express Checkout.
266
286
  email: killbilling-users@googlegroups.com
267
287
  executables: []
@@ -288,6 +308,7 @@ files:
288
308
  - lib/paypal_express.rb
289
309
  - lib/paypal_express/api.rb
290
310
  - lib/paypal_express/application.rb
311
+ - lib/paypal_express/ext/active_merchant/active_merchant.rb
291
312
  - lib/paypal_express/models/payment_method.rb
292
313
  - lib/paypal_express/models/response.rb
293
314
  - lib/paypal_express/models/transaction.rb
@@ -297,7 +318,8 @@ files:
297
318
  - pom.xml
298
319
  - release.sh
299
320
  - spec/paypal_express/base_plugin_spec.rb
300
- - spec/paypal_express/remote/integration_spec.rb
321
+ - spec/paypal_express/remote/baid_spec.rb
322
+ - spec/paypal_express/remote/hpp_spec.rb
301
323
  - spec/spec_helper.rb
302
324
  homepage: http://killbill.io
303
325
  licenses:
@@ -1,135 +0,0 @@
1
- require 'spec_helper'
2
-
3
- ActiveMerchant::Billing::Base.mode = :test
4
-
5
- describe Killbill::PaypalExpress::PaymentPlugin do
6
-
7
- include ::Killbill::Plugin::ActiveMerchant::RSpec
8
-
9
- # Share the BAID
10
- before(:all) do
11
- @plugin = build_plugin(::Killbill::PaypalExpress::PaymentPlugin, 'paypal_express')
12
- @plugin.start_plugin
13
-
14
- @call_context = build_call_context
15
-
16
- @properties = []
17
- @amount = BigDecimal.new('100')
18
- @currency = 'USD'
19
-
20
- kb_account_id = SecureRandom.uuid
21
- external_key, kb_account_id = create_kb_account(kb_account_id, @plugin.kb_apis.proxied_services[:account_user_api])
22
-
23
- # Initiate the setup process
24
- response = create_token(kb_account_id, @call_context.tenant_id)
25
- token = response.token
26
- print "\nPlease go to #{@plugin.to_express_checkout_url(response, @call_context.tenant_id)} to proceed and press any key to continue...
27
- Note: you need to log-in with a paypal sandbox account (create one here: https://developer.paypal.com/webapps/developer/applications/accounts)\n"
28
- $stdin.gets
29
-
30
- # Complete the setup process
31
- @properties << build_property('token', token)
32
- @pm = create_payment_method(::Killbill::PaypalExpress::PaypalExpressPaymentMethod, kb_account_id, @call_context.tenant_id, @properties)
33
-
34
- # Verify our table directly. Note that @pm.token is the baid
35
- payment_methods = ::Killbill::PaypalExpress::PaypalExpressPaymentMethod.from_kb_account_id_and_token(@pm.token, kb_account_id, @call_context.tenant_id)
36
- payment_methods.size.should == 1
37
- payment_method = payment_methods.first
38
- payment_method.should_not be_nil
39
- payment_method.paypal_express_payer_id.should_not be_nil
40
- payment_method.token.should == @pm.token
41
- payment_method.kb_payment_method_id.should == @pm.kb_payment_method_id
42
- end
43
-
44
- before(:each) do
45
- ::Killbill::PaypalExpress::PaypalExpressTransaction.delete_all
46
- ::Killbill::PaypalExpress::PaypalExpressResponse.delete_all
47
-
48
- kb_payment_id = SecureRandom.uuid
49
- 1.upto(6) do
50
- @kb_payment = @plugin.kb_apis.proxied_services[:payment_api].add_payment(kb_payment_id)
51
- end
52
- end
53
-
54
- after(:each) do
55
- @plugin.stop_plugin
56
- end
57
-
58
- it 'should be able to charge and refund' do
59
- payment_response = @plugin.purchase_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
60
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
61
- payment_response.amount.should == @amount
62
- payment_response.transaction_type.should == :PURCHASE
63
-
64
- # Try a full refund
65
- refund_response = @plugin.refund_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[1].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
66
- refund_response.status.should eq(:PROCESSED), refund_response.gateway_error
67
- refund_response.amount.should == @amount
68
- refund_response.transaction_type.should == :REFUND
69
- end
70
-
71
- it 'should be able to auth, capture and refund' do
72
- payment_response = @plugin.authorize_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
73
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
74
- payment_response.amount.should == @amount
75
- payment_response.transaction_type.should == :AUTHORIZE
76
-
77
- # Try multiple partial captures
78
- partial_capture_amount = BigDecimal.new('10')
79
- 1.upto(3) do |i|
80
- payment_response = @plugin.capture_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[i].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
81
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
82
- payment_response.amount.should == partial_capture_amount
83
- payment_response.transaction_type.should == :CAPTURE
84
- end
85
-
86
- # Try a partial refund
87
- refund_response = @plugin.refund_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[4].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
88
- refund_response.status.should eq(:PROCESSED), refund_response.gateway_error
89
- refund_response.amount.should == partial_capture_amount
90
- refund_response.transaction_type.should == :REFUND
91
-
92
- # Try to capture again
93
- payment_response = @plugin.capture_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[5].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
94
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
95
- payment_response.amount.should == partial_capture_amount
96
- payment_response.transaction_type.should == :CAPTURE
97
- end
98
-
99
- it 'should be able to auth and void' do
100
- payment_response = @plugin.authorize_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
101
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
102
- payment_response.amount.should == @amount
103
- payment_response.transaction_type.should == :AUTHORIZE
104
-
105
- payment_response = @plugin.void_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[1].id, @pm.kb_payment_method_id, @properties, @call_context)
106
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
107
- payment_response.transaction_type.should == :VOID
108
- end
109
-
110
- it 'should be able to auth, partial capture and void' do
111
- payment_response = @plugin.authorize_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
112
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
113
- payment_response.amount.should == @amount
114
- payment_response.transaction_type.should == :AUTHORIZE
115
-
116
- partial_capture_amount = BigDecimal.new('10')
117
- payment_response = @plugin.capture_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[1].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
118
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
119
- payment_response.amount.should == partial_capture_amount
120
- payment_response.transaction_type.should == :CAPTURE
121
-
122
- payment_response = @plugin.void_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[2].id, @pm.kb_payment_method_id, @properties, @call_context)
123
- payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
124
- payment_response.transaction_type.should == :VOID
125
- end
126
-
127
- private
128
-
129
- def create_token(kb_account_id, kb_tenant_id)
130
- private_plugin = ::Killbill::PaypalExpress::PrivatePaymentPlugin.new
131
- response = private_plugin.initiate_express_checkout(kb_account_id, kb_tenant_id)
132
- response.success.should be_true
133
- response
134
- end
135
- end