killbill-litle 1.10.0 → 2.0.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,713 @@
1
+ require 'spec_helper'
2
+
3
+ ActiveMerchant::Billing::Base.mode = :test
4
+
5
+ describe Killbill::Litle::PaymentPlugin do
6
+
7
+ include ::Killbill::Plugin::ActiveMerchant::RSpec
8
+
9
+ before(:all) do
10
+ ::Killbill::Litle::LitlePaymentMethod.delete_all
11
+ ::Killbill::Litle::LitleResponse.delete_all
12
+ ::Killbill::Litle::LitleTransaction.delete_all
13
+ end
14
+
15
+ after(:all) do
16
+ puts 'orderId,litleTxnId,api_call,message'
17
+ ::Killbill::Litle::LitleResponse.all.each do |response|
18
+ next if response.params_litle_txn_id.blank?
19
+ puts "#{response.params_order_id},#{response.params_litle_txn_id},#{response.api_call},#{response.message}"
20
+ end
21
+ end
22
+
23
+ before(:each) do
24
+ @plugin = build_plugin(::Killbill::Litle::PaymentPlugin, 'litle')
25
+ @plugin.start_plugin
26
+
27
+ @call_context = build_call_context
28
+
29
+ @properties = []
30
+ @pm = create_payment_method(::Killbill::Litle::LitlePaymentMethod, nil, @call_context.tenant_id, [build_property(:skip_gw, true)], {}, false)
31
+ @currency = 'USD'
32
+
33
+ kb_payment_id = SecureRandom.uuid
34
+ 1.upto(8) do
35
+ @kb_payment = @plugin.kb_apis.proxied_services[:payment_api].add_payment(kb_payment_id)
36
+ end
37
+ end
38
+
39
+ after(:each) do
40
+ @plugin.stop_plugin
41
+ end
42
+
43
+ it 'passes certification for order id 1' do
44
+ properties = build_pm_properties(nil,
45
+ {
46
+ :cc_number => '4457010000000009',
47
+ :cc_first_name => 'John',
48
+ :cc_last_name => 'Smith',
49
+ :cc_type => 'visa',
50
+ :cc_exp_month => '01',
51
+ :cc_exp_year => '2016',
52
+ :cc_verification_value => '349',
53
+ :address1 => '1 Main St.',
54
+ :city => 'Burlington',
55
+ :state => 'MA',
56
+ :zip => '01803-3747',
57
+ :country => 'US'
58
+ },
59
+ false)
60
+
61
+ assertions = {
62
+ :avs => 'X',
63
+ :cvv => 'M'
64
+ }
65
+
66
+ txn_nb = 0
67
+
68
+ txn_nb = auth_assertions('1', 100.10, txn_nb, properties, assertions)
69
+
70
+ # 1: authorize avs
71
+ txn_nb = avs_assertions('1', txn_nb, properties, assertions)
72
+
73
+ sale_assertions('1', 100.10, txn_nb, properties, assertions)
74
+ end
75
+
76
+ it 'passes certification for order id 2' do
77
+ properties = build_pm_properties(nil,
78
+ {
79
+ :cc_number => '5112010000000003',
80
+ :cc_first_name => 'Mike J.',
81
+ :cc_last_name => 'Hammer',
82
+ :cc_type => 'master',
83
+ :cc_exp_month => '02',
84
+ :cc_exp_year => '2016',
85
+ :cc_verification_value => '261',
86
+ :address1 => '2 Main St.',
87
+ :city => 'Riverside',
88
+ :state => 'RI',
89
+ :zip => '02915',
90
+ :country => 'US'
91
+ },
92
+ false)
93
+
94
+ assertions = {
95
+ :avs => 'Z',
96
+ :cvv => 'M'
97
+ }
98
+
99
+ txn_nb = 0
100
+
101
+ txn_nb = auth_assertions('2', 200.20, txn_nb, properties, assertions)
102
+
103
+ # 2: authorize avs
104
+ txn_nb = avs_assertions('2', txn_nb, properties, assertions)
105
+
106
+ sale_assertions('2', 200.20, txn_nb, properties, assertions)
107
+ end
108
+
109
+ it 'passes certification for order id 3' do
110
+ properties = build_pm_properties(nil,
111
+ {
112
+ :cc_number => '6011010000000003',
113
+ :cc_first_name => 'Eileen',
114
+ :cc_last_name => 'Jones',
115
+ :cc_type => 'discover',
116
+ :cc_exp_month => '03',
117
+ :cc_exp_year => '2016',
118
+ :cc_verification_value => '758',
119
+ :address1 => '3 Main St.',
120
+ :city => 'Bloomfield',
121
+ :state => 'CT',
122
+ :zip => '06002',
123
+ :country => 'US'
124
+ },
125
+ false)
126
+
127
+ assertions = {
128
+ :avs => 'Z',
129
+ :cvv => 'M'
130
+ }
131
+
132
+ txn_nb = 0
133
+
134
+ auth_assertions('3', 300.30, txn_nb, properties, assertions)
135
+
136
+ # 3: authorize avs
137
+ txn_nb = avs_assertions('3', txn_nb, properties, assertions)
138
+
139
+ sale_assertions('3', 300.30, txn_nb, properties, assertions)
140
+ end
141
+
142
+ it 'passes certification for order id 4' do
143
+ properties = build_pm_properties(nil,
144
+ {
145
+ :cc_number => '375001000000005',
146
+ :cc_first_name => 'Bob',
147
+ :cc_last_name => 'Black',
148
+ :cc_type => 'american_express',
149
+ :cc_exp_month => '04',
150
+ :cc_exp_year => '2016',
151
+ :cc_verification_value => '261',
152
+ :address1 => '4 Main St.',
153
+ :city => 'Laurel',
154
+ :state => 'MD',
155
+ :zip => '20708',
156
+ :country => 'US'
157
+ },
158
+ false)
159
+
160
+ assertions = {
161
+ :avs => 'A',
162
+ :cvv => nil
163
+ }
164
+
165
+ txn_nb = 0
166
+
167
+ txn_nb = auth_assertions('4', 400.40, txn_nb, properties, assertions)
168
+
169
+ # 3: authorize avs
170
+ txn_nb = avs_assertions('4', txn_nb, properties, assertions)
171
+
172
+ sale_assertions('4', 400.40, txn_nb, properties, assertions)
173
+ end
174
+
175
+ it 'passes certification for order id 6' do
176
+ properties = build_pm_properties(nil,
177
+ {
178
+ :cc_number => '4457010100000008',
179
+ :cc_first_name => 'Joe',
180
+ :cc_last_name => 'Green',
181
+ :cc_type => 'visa',
182
+ :cc_exp_month => '06',
183
+ :cc_exp_year => '2016',
184
+ :cc_verification_value => '992',
185
+ :address1 => '6 Main St.',
186
+ :city => 'Derry',
187
+ :state => 'NH',
188
+ :zip => '03038',
189
+ :country => 'US'
190
+ },
191
+ false)
192
+
193
+ assertions = {
194
+ :success => false,
195
+ :message => 'Insufficient Funds',
196
+ :avs => 'I',
197
+ :cvv => 'P'
198
+ }
199
+
200
+ txn_nb = 0
201
+
202
+ txn_nb = authorize_assertions('6', 600.60, txn_nb, properties, assertions)
203
+ txn_nb = purchase_assertions('6', 600.60, txn_nb, properties, assertions)
204
+
205
+ assertions = {
206
+ :success => false,
207
+ :message => 'No transaction found with specified litleTxnId'
208
+ }
209
+
210
+ # Cannot be run since there is no successful Auth nor Purchase
211
+ # void_assertions('6', txn_nb, properties, assertions)
212
+ end
213
+
214
+ it 'passes certification for order id 7' do
215
+ properties = build_pm_properties(nil,
216
+ {
217
+ :cc_number => '5112010100000002',
218
+ :cc_first_name => 'Jane',
219
+ :cc_last_name => 'Murray',
220
+ :cc_type => 'master',
221
+ :cc_exp_month => '07',
222
+ :cc_exp_year => '2016',
223
+ :cc_verification_value => '992',
224
+ :address1 => '7 Main St.',
225
+ :city => 'Amesbury',
226
+ :state => 'MA',
227
+ :zip => '01913',
228
+ :country => 'US'
229
+ },
230
+ false)
231
+
232
+ assertions = {
233
+ :success => false,
234
+ :message => 'Invalid Account Number',
235
+ :avs => 'I',
236
+ :cvv => 'N'
237
+ }
238
+
239
+ txn_nb = 0
240
+
241
+ txn_nb = authorize_assertions('7', 700.70, txn_nb, properties, assertions)
242
+ txn_nb = avs_assertions('7', txn_nb, properties, assertions)
243
+ purchase_assertions('7', 700.70, txn_nb, properties, assertions)
244
+ end
245
+
246
+ it 'passes certification for order id 8' do
247
+ properties = build_pm_properties(nil,
248
+ {
249
+ :cc_number => '6011010100000002',
250
+ :cc_first_name => 'Mark',
251
+ :cc_last_name => 'Johnson',
252
+ :cc_type => 'discover',
253
+ :cc_exp_month => '08',
254
+ :cc_exp_year => '2016',
255
+ :cc_verification_value => '184',
256
+ :address1 => '8 Main St.',
257
+ :city => 'Manchester',
258
+ :state => 'MH',
259
+ :zip => '03101',
260
+ :country => 'US'
261
+ },
262
+ false)
263
+
264
+ assertions = {
265
+ :success => false,
266
+ :message => 'Call Discover',
267
+ :avs => 'I',
268
+ :cvv => 'P'
269
+ }
270
+
271
+ txn_nb = 0
272
+
273
+ txn_nb = authorize_assertions('8', 800.80, txn_nb, properties, assertions)
274
+ txn_nb = avs_assertions('8', txn_nb, properties, assertions)
275
+ purchase_assertions('8', 800.80, txn_nb, properties, assertions)
276
+ end
277
+
278
+ it 'passes certification for order id 9' do
279
+ properties = build_pm_properties(nil,
280
+ {
281
+ :cc_number => '375001010000003',
282
+ :cc_first_name => 'James',
283
+ :cc_last_name => 'Miller',
284
+ :cc_type => 'american_express',
285
+ :cc_exp_month => '09',
286
+ :cc_exp_year => '2016',
287
+ :cc_verification_value => '0421',
288
+ :address1 => '9 Main St.',
289
+ :city => 'Boston',
290
+ :state => 'MA',
291
+ :zip => '02134',
292
+ :country => 'US'
293
+ },
294
+ false)
295
+
296
+ assertions = {
297
+ :success => false,
298
+ :message => 'Pick Up Card',
299
+ :avs => 'I'
300
+ }
301
+
302
+ txn_nb = 0
303
+
304
+ txn_nb = authorize_assertions('9', 900.90, txn_nb, properties, assertions)
305
+ txn_nb = avs_assertions('9', txn_nb, properties, assertions)
306
+ purchase_assertions('9', 900.90, txn_nb, properties, assertions)
307
+ end
308
+
309
+ it 'passes certification for order id 32' do
310
+ properties = build_pm_properties(nil,
311
+ {
312
+ :cc_number => '4457010000000009',
313
+ :cc_first_name => 'John',
314
+ :cc_last_name => 'Smith',
315
+ :cc_type => 'visa',
316
+ :cc_exp_month => '01',
317
+ :cc_exp_year => '2016',
318
+ :cc_verification_value => '349',
319
+ :address1 => '1 Main St.',
320
+ :city => 'Burlington',
321
+ :state => 'MA',
322
+ :zip => '01803-3747',
323
+ :country => 'US'
324
+ },
325
+ false)
326
+
327
+ assertions = {}
328
+
329
+ txn_nb = 0
330
+
331
+ txn_nb = authorize_assertions('32', 100.10, txn_nb, properties, assertions)
332
+
333
+ txn_nb = capture_assertions('32A', 50.50, txn_nb, properties, assertions)
334
+
335
+ assertions = {
336
+ :success => false,
337
+ :message => 'Authorization amount has already been depleted'
338
+ }
339
+
340
+ properties << build_property(:linked_transaction_type, :authorize)
341
+
342
+ void_assertions('32B', txn_nb, properties, assertions)
343
+ end
344
+
345
+ it 'passes certification for order id 33' do
346
+ properties = build_pm_properties(nil,
347
+ {
348
+ :cc_number => '5112010000000003',
349
+ :cc_first_name => 'Mike J.',
350
+ :cc_last_name => 'Hammer',
351
+ :cc_type => 'master',
352
+ :cc_exp_month => '02',
353
+ :cc_exp_year => '2016',
354
+ :cc_verification_value => '261',
355
+ :address1 => '2 Main St.',
356
+ :city => 'Riverside',
357
+ :state => 'RI',
358
+ :zip => '02915',
359
+ :country => 'US'
360
+ },
361
+ false)
362
+
363
+ assertions = {}
364
+
365
+ txn_nb = 0
366
+
367
+ txn_nb = authorize_assertions('33', 200.20, txn_nb, properties, assertions)
368
+
369
+ properties << build_property(:linked_transaction_type, :authorize)
370
+
371
+ void_assertions('33A', txn_nb, properties, assertions)
372
+ end
373
+
374
+ it 'passes certification for order id 34' do
375
+ properties = build_pm_properties(nil,
376
+ {
377
+ :cc_number => '6011010000000003',
378
+ :cc_first_name => 'Eileen',
379
+ :cc_last_name => 'Jones',
380
+ :cc_type => 'discover',
381
+ :cc_exp_month => '03',
382
+ :cc_exp_year => '2016',
383
+ :cc_verification_value => '261',
384
+ :address1 => '3 Main St.',
385
+ :city => 'Bloomfield',
386
+ :state => 'CT',
387
+ :zip => '06002',
388
+ :country => 'US'
389
+ },
390
+ false)
391
+
392
+ assertions = {}
393
+
394
+ txn_nb = 0
395
+
396
+ txn_nb = authorize_assertions('34', 300.30, txn_nb, properties, assertions)
397
+
398
+ properties << build_property(:linked_transaction_type, :authorize)
399
+
400
+ void_assertions('34A', txn_nb, properties, assertions)
401
+ end
402
+
403
+ it 'passes certification for order id 35' do
404
+ properties = build_pm_properties(nil,
405
+ {
406
+ :cc_number => '375001000000005',
407
+ :cc_first_name => 'Bob',
408
+ :cc_last_name => 'Black',
409
+ :cc_type => 'american_express',
410
+ :cc_exp_month => '04',
411
+ :cc_exp_year => '2016',
412
+ :cc_verification_value => '261',
413
+ :address1 => '4 Main St.',
414
+ :city => 'Laurel',
415
+ :state => 'MD',
416
+ :zip => '20708',
417
+ :country => 'US'
418
+ },
419
+ false)
420
+
421
+ assertions = {}
422
+
423
+ txn_nb = 0
424
+
425
+ txn_nb = authorize_assertions('35', 101.00, txn_nb, properties, assertions)
426
+
427
+ txn_nb = capture_assertions('35A', 50.50, txn_nb, properties, assertions)
428
+
429
+ assertions = {
430
+ :success => false,
431
+ :message => 'Reversal amount does not match Authorization amount'
432
+ }
433
+
434
+ properties << build_property(:linked_transaction_type, :authorize)
435
+
436
+ # ActiveMerchant doesn't pass an amount in the void call
437
+ #void_assertions('35B', txn_nb, properties, assertions)
438
+ end
439
+
440
+ it 'passes certification for order id 36' do
441
+ properties = build_pm_properties(nil,
442
+ {
443
+ :cc_number => '375000026600004',
444
+ :cc_type => 'american_express',
445
+ :cc_exp_month => '05',
446
+ :cc_exp_year => '2016'
447
+ },
448
+ false)
449
+
450
+ assertions = {}
451
+
452
+ txn_nb = 0
453
+
454
+ txn_nb = authorize_assertions('36', 205.00, txn_nb, properties, assertions)
455
+
456
+ assertions = {
457
+ :success => false,
458
+ :message => 'Reversal amount does not match Authorization amount'
459
+ }
460
+
461
+ properties << build_property(:linked_transaction_type, :authorize)
462
+ properties << build_property(:amount, 10000)
463
+
464
+ # ActiveMerchant doesn't pass an amount in the void call
465
+ #void_assertions('36A', txn_nb, properties, assertions)
466
+ end
467
+
468
+ # Conflicts with 52
469
+ xit 'passes certification for order id 50' do
470
+ properties = build_pm_properties(nil,
471
+ {
472
+ :cc_number => '4457119922390123'
473
+ },
474
+ false)
475
+
476
+ assertions = {
477
+ :success => false,
478
+ :message => 'Account number was successfully registered'
479
+ }
480
+
481
+ store_assertions('50', properties, assertions)
482
+ end
483
+
484
+ it 'passes certification for order id 51' do
485
+ properties = build_pm_properties(nil,
486
+ {
487
+ :cc_number => '4457119999999999'
488
+ },
489
+ false)
490
+
491
+ assertions = {
492
+ :success => false,
493
+ :message => 'Credit card number was invalid'
494
+ }
495
+
496
+ store_assertions('51', properties, assertions)
497
+ end
498
+
499
+ it 'passes certification for order id 52' do
500
+ properties = build_pm_properties(nil,
501
+ {
502
+ :cc_number => '4457119922390123'
503
+ },
504
+ false)
505
+
506
+ assertions = {
507
+ :success => false,
508
+ :message => 'Account number was previously registered'
509
+ }
510
+
511
+ store_assertions('52', properties, assertions)
512
+ end
513
+
514
+ it 'passes certification for PayPage test case 14' do
515
+ properties = build_pm_properties(nil,
516
+ {
517
+ :cc_exp_month => '12',
518
+ :cc_exp_year => '2030',
519
+ :cc_verification_value => '987',
520
+ :paypageRegistrationId => 'cDZJcmd1VjNlYXNaSlRMTGpocVZQY1NWVXE4ZW5UTko4NU9KK3p1L1p1Vzg4YzVPQVlSUHNITG1JN2I0NzlyTg=='
521
+ },
522
+ false)
523
+
524
+ assertions = {
525
+ :success => false,
526
+ :message => 'Token was not found'
527
+ }
528
+
529
+ txn_nb = 0
530
+
531
+ authorize_assertions('14', 100.10, txn_nb, properties, assertions)
532
+ end
533
+
534
+ it 'passes certification for PayPage test case 15' do
535
+ properties = build_pm_properties(nil,
536
+ {
537
+ :cc_exp_month => '12',
538
+ :cc_exp_year => '2030',
539
+ :cc_verification_value => '987',
540
+ :paypageRegistrationId => 'RGFQNCt6U1d1M21SeVByVTM4dHlHb1FsVkUrSmpnWXhNY0o5UkMzRlZFanZiUHVnYjN1enJXbG1WSDF4aXlNcA=='
541
+ },
542
+ false)
543
+
544
+ assertions = {
545
+ :success => false,
546
+ :message => 'Expired paypage registration id'
547
+ }
548
+
549
+ txn_nb = 0
550
+
551
+ authorize_assertions('15', 100.10, txn_nb, properties, assertions)
552
+ end
553
+
554
+ private
555
+
556
+ def avs_assertions(order_id, txn_nb, properties, assertions = {})
557
+ authorize_assertions(order_id, 0, txn_nb, properties, assertions)
558
+ end
559
+
560
+ def auth_assertions(order_id, amount, txn_nb, properties, assertions = {})
561
+ assertions = assertions.clone
562
+
563
+ # 1: authorize
564
+ txn_nb = authorize_assertions(order_id, amount, txn_nb, properties, assertions)
565
+
566
+ # No more AVS / CVV checks
567
+ assertions.delete(:avs)
568
+ assertions.delete(:cvv)
569
+
570
+ # 1A: capture
571
+ txn_nb = capture_assertions("#{order_id}A", amount, txn_nb, properties, assertions)
572
+
573
+ # 1B: credit
574
+ txn_nb = credit_assertions("#{order_id}B", amount, txn_nb, properties, assertions)
575
+
576
+ # 1C: void
577
+ void_assertions("#{order_id}C", txn_nb, properties, assertions)
578
+ end
579
+
580
+ def sale_assertions(order_id, amount, txn_nb, properties, assertions = {})
581
+ assertions = assertions.clone
582
+
583
+ # 1: sale
584
+ txn_nb = purchase_assertions(order_id, amount, txn_nb, properties, assertions)
585
+
586
+ # No more AVS / CVV checks
587
+ assertions.delete(:avs)
588
+ assertions.delete(:cvv)
589
+
590
+ # 1B: credit
591
+ txn_nb = credit_assertions("#{order_id}B", amount, txn_nb, properties, assertions)
592
+
593
+ # 1C: void
594
+ void_assertions("#{order_id}C", txn_nb, properties, assertions)
595
+ end
596
+
597
+ def authorize_assertions(order_id, amount, txn_nb, properties, assertions = {})
598
+ properties = properties.clone
599
+ properties << build_property(:order_id, order_id)
600
+
601
+ payment_response = @plugin.authorize_payment(@pm.kb_account_id,
602
+ @kb_payment.id,
603
+ @kb_payment.transactions[txn_nb].id,
604
+ @pm.kb_payment_method_id,
605
+ amount,
606
+ @currency,
607
+ properties,
608
+ @call_context)
609
+ common_checks(payment_response, assertions)
610
+
611
+ txn_nb + 1
612
+ end
613
+
614
+ def capture_assertions(order_id, amount, txn_nb, properties, assertions = {})
615
+ properties = properties.clone
616
+ properties << build_property(:order_id, order_id)
617
+
618
+ payment_response = @plugin.capture_payment(@pm.kb_account_id,
619
+ @kb_payment.id,
620
+ @kb_payment.transactions[txn_nb].id,
621
+ @pm.kb_payment_method_id,
622
+ amount,
623
+ @currency,
624
+ properties,
625
+ @call_context)
626
+ common_checks(payment_response, assertions)
627
+
628
+ txn_nb + 1
629
+ end
630
+
631
+ def purchase_assertions(order_id, amount, txn_nb, properties, assertions = {})
632
+ properties = properties.clone
633
+ properties << build_property(:order_id, order_id)
634
+
635
+ payment_response = @plugin.purchase_payment(@pm.kb_account_id,
636
+ @kb_payment.id,
637
+ @kb_payment.transactions[txn_nb].id,
638
+ @pm.kb_payment_method_id,
639
+ amount,
640
+ @currency,
641
+ properties,
642
+ @call_context)
643
+ common_checks(payment_response, assertions)
644
+
645
+ txn_nb + 1
646
+ end
647
+
648
+ def credit_assertions(order_id, amount, txn_nb, properties, assertions = {})
649
+ # TODO Unsupported by ActiveMerchant
650
+ return txn_nb + 1
651
+
652
+ properties = properties.clone
653
+ properties << build_property(:order_id, order_id)
654
+
655
+ payment_response = @plugin.credit_payment(@pm.kb_account_id,
656
+ @kb_payment.id,
657
+ @kb_payment.transactions[txn_nb].id,
658
+ @pm.kb_payment_method_id,
659
+ amount,
660
+ @currency,
661
+ properties,
662
+ @call_context)
663
+ common_checks(payment_response, assertions)
664
+
665
+ txn_nb + 1
666
+ end
667
+
668
+ def void_assertions(order_id, txn_nb, properties, assertions = {})
669
+ properties = properties.clone
670
+ properties << build_property(:order_id, order_id)
671
+
672
+ payment_response = @plugin.void_payment(@pm.kb_account_id,
673
+ @kb_payment.id,
674
+ @kb_payment.transactions[txn_nb].id,
675
+ @pm.kb_payment_method_id,
676
+ properties,
677
+ @call_context)
678
+ common_checks(payment_response, assertions)
679
+
680
+ txn_nb + 1
681
+ end
682
+
683
+ def common_checks(payment_response, assertions = {})
684
+ assertions[:success] = true if assertions[:success].nil?
685
+ payment_response.status.should eq(assertions[:success] ? :PROCESSED : :ERROR), payment_response.gateway_error
686
+ payment_response.gateway_error.should == (assertions[:message] || 'Approved')
687
+ check_property(payment_response.properties, 'avsResultCode', assertions[:avs]) if assertions[:avs]
688
+ check_property(payment_response.properties, 'cvvResultCode', assertions[:cvv]) if assertions[:cvv]
689
+ end
690
+
691
+ def check_property(properties, key, value)
692
+ (properties.find { |prop| prop.key == key }).value.should == value
693
+ end
694
+
695
+ def store_assertions(order_id, properties, assertions = {})
696
+ properties = properties.clone
697
+ properties << build_property(:order_id, order_id)
698
+
699
+ info = Killbill::Plugin::Model::PaymentMethodPlugin.new
700
+ info.properties = []
701
+
702
+ @plugin.add_payment_method(@pm.kb_account_id,
703
+ @pm.kb_payment_method_id,
704
+ info,
705
+ true,
706
+ properties,
707
+ @call_context)
708
+ rescue => e
709
+ e.message.should == assertions[:message]
710
+ ensure
711
+ ::Killbill::Litle::LitleResponse.last.message.should == assertions[:message]
712
+ end
713
+ end