braintree 1.0.1 → 1.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.
Files changed (60) hide show
  1. data/lib/braintree.rb +36 -46
  2. data/lib/braintree/address.rb +14 -14
  3. data/lib/braintree/base_module.rb +3 -3
  4. data/lib/braintree/configuration.rb +16 -16
  5. data/lib/braintree/credit_card.rb +39 -30
  6. data/lib/braintree/credit_card_verification.rb +4 -3
  7. data/lib/braintree/customer.rb +22 -22
  8. data/lib/braintree/digest.rb +2 -8
  9. data/lib/braintree/error_codes.rb +16 -3
  10. data/lib/braintree/error_result.rb +5 -5
  11. data/lib/braintree/exceptions.rb +58 -0
  12. data/lib/braintree/http.rb +7 -7
  13. data/lib/braintree/paged_collection.rb +14 -14
  14. data/lib/braintree/ssl_expiration_check.rb +5 -1
  15. data/lib/braintree/subscription.rb +110 -0
  16. data/lib/braintree/successful_result.rb +3 -3
  17. data/lib/braintree/test/credit_card_numbers.rb +1 -1
  18. data/lib/braintree/test/transaction_amounts.rb +18 -0
  19. data/lib/braintree/transaction.rb +52 -25
  20. data/lib/braintree/transaction/address_details.rb +2 -2
  21. data/lib/braintree/transaction/credit_card_details.rb +12 -4
  22. data/lib/braintree/transaction/customer_details.rb +9 -1
  23. data/lib/braintree/transaction/status_details.rb +1 -1
  24. data/lib/braintree/transparent_redirect.rb +15 -15
  25. data/lib/braintree/util.rb +7 -7
  26. data/lib/braintree/validation_error.rb +1 -1
  27. data/lib/braintree/validation_error_collection.rb +6 -6
  28. data/lib/braintree/version.rb +3 -3
  29. data/lib/braintree/xml/generator.rb +2 -2
  30. data/lib/braintree/xml/libxml.rb +1 -1
  31. data/lib/braintree/xml/parser.rb +1 -1
  32. data/spec/integration/braintree/address_spec.rb +12 -12
  33. data/spec/integration/braintree/credit_card_spec.rb +189 -37
  34. data/spec/integration/braintree/customer_spec.rb +35 -35
  35. data/spec/integration/braintree/http_spec.rb +3 -3
  36. data/spec/integration/braintree/subscription_spec.rb +362 -0
  37. data/spec/integration/braintree/transaction_spec.rb +130 -58
  38. data/spec/integration/spec_helper.rb +1 -1
  39. data/spec/spec_helper.rb +4 -4
  40. data/spec/unit/braintree/address_spec.rb +6 -6
  41. data/spec/unit/braintree/base_module_spec.rb +18 -0
  42. data/spec/unit/braintree/configuration_spec.rb +10 -10
  43. data/spec/unit/braintree/credit_card_spec.rb +15 -15
  44. data/spec/unit/braintree/credit_card_verification_spec.rb +4 -2
  45. data/spec/unit/braintree/customer_spec.rb +8 -8
  46. data/spec/unit/braintree/digest_spec.rb +4 -0
  47. data/spec/unit/braintree/http_spec.rb +2 -2
  48. data/spec/unit/braintree/paged_collection_spec.rb +12 -12
  49. data/spec/unit/braintree/ssl_expiration_check_spec.rb +18 -9
  50. data/spec/unit/braintree/transaction/credit_card_details_spec.rb +15 -0
  51. data/spec/unit/braintree/transaction/customer_details_spec.rb +19 -0
  52. data/spec/unit/braintree/transaction_spec.rb +14 -14
  53. data/spec/unit/braintree/transparent_redirect_spec.rb +11 -11
  54. data/spec/unit/braintree/util_spec.rb +8 -8
  55. data/spec/unit/braintree/validation_error_collection_spec.rb +6 -6
  56. data/spec/unit/braintree/validation_error_spec.rb +2 -2
  57. data/spec/unit/braintree/xml/libxml_spec.rb +5 -5
  58. data/spec/unit/braintree/xml_spec.rb +16 -16
  59. data/spec/unit/braintree_spec.rb +11 -0
  60. metadata +8 -2
@@ -14,12 +14,30 @@ describe Braintree::Transaction do
14
14
  result.success?.should == true
15
15
  result.transaction.id.should =~ /^\w{6}$/
16
16
  result.transaction.type.should == "sale"
17
- result.transaction.amount.should == Braintree::Test::TransactionAmounts::Authorize
17
+ result.transaction.amount.should == BigDecimal.new(Braintree::Test::TransactionAmounts::Authorize)
18
18
  result.transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
19
19
  result.transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
20
20
  result.transaction.credit_card_details.expiration_date.should == "05/2009"
21
+ result.transaction.credit_card_details.customer_location.should == "US"
21
22
  end
22
-
23
+
24
+ it "returns processor response code and text if declined" do
25
+ result = Braintree::Transaction.create(
26
+ :type => "sale",
27
+ :amount => Braintree::Test::TransactionAmounts::Decline,
28
+ :credit_card => {
29
+ :number => Braintree::Test::CreditCardNumbers::Visa,
30
+ :expiration_date => "05/2009"
31
+ }
32
+ )
33
+ result.success?.should == true
34
+ result.transaction.id.should =~ /^\w{6}$/
35
+ result.transaction.type.should == "sale"
36
+ result.transaction.status.should == "processor_declined"
37
+ result.transaction.processor_response_code.should == "2000"
38
+ result.transaction.processor_response_text.should == "Do Not Honor"
39
+ end
40
+
23
41
  it "can create custom fields" do
24
42
  result = Braintree::Transaction.create(
25
43
  :type => "sale",
@@ -67,7 +85,7 @@ describe Braintree::Transaction do
67
85
  result.success?.should == false
68
86
  result.params.should == {:transaction => {:type => 'sale', :amount => nil, :credit_card => {:expiration_date => "05/2009"}}}
69
87
  end
70
-
88
+
71
89
  it "returns errors if validations fail (tests many errors at once for spec speed)" do
72
90
  params = {
73
91
  :transaction => {
@@ -91,9 +109,8 @@ describe Braintree::Transaction do
91
109
  result.errors.for(:transaction).on(:order_id)[0].code.should == Braintree::ErrorCodes::Transaction::OrderIdIsTooLong
92
110
  result.errors.for(:transaction).on(:payment_method_token)[0].code.should == Braintree::ErrorCodes::Transaction::PaymentMethodTokenIsInvalid
93
111
  result.errors.for(:transaction).on(:type)[0].code.should == Braintree::ErrorCodes::Transaction::TypeIsInvalid
94
-
95
112
  end
96
-
113
+
97
114
  it "returns an error if amount is negative" do
98
115
  params = {
99
116
  :transaction => {
@@ -117,7 +134,7 @@ describe Braintree::Transaction do
117
134
  result.success?.should == false
118
135
  result.errors.for(:transaction).on(:amount)[0].code.should == Braintree::ErrorCodes::Transaction::AmountIsInvalid
119
136
  end
120
-
137
+
121
138
  it "returns an error if type is not given" do
122
139
  params = {
123
140
  :transaction => {
@@ -128,7 +145,7 @@ describe Braintree::Transaction do
128
145
  result.success?.should == false
129
146
  result.errors.for(:transaction).on(:type)[0].code.should == Braintree::ErrorCodes::Transaction::TypeIsRequired
130
147
  end
131
-
148
+
132
149
  it "returns an error if no credit card is given" do
133
150
  params = {
134
151
  :transaction => {
@@ -138,7 +155,7 @@ describe Braintree::Transaction do
138
155
  result.success?.should == false
139
156
  result.errors.for(:transaction).on(:base)[0].code.should == Braintree::ErrorCodes::Transaction::CreditCardIsRequired
140
157
  end
141
-
158
+
142
159
  it "returns an error if the given payment method token doesn't belong to the customer" do
143
160
  customer = Braintree::Customer.create!(
144
161
  :credit_card => {
@@ -169,12 +186,12 @@ describe Braintree::Transaction do
169
186
  )
170
187
  transaction.id.should =~ /^\w{6}$/
171
188
  transaction.type.should == "sale"
172
- transaction.amount.should == Braintree::Test::TransactionAmounts::Authorize
189
+ transaction.amount.should == BigDecimal.new(Braintree::Test::TransactionAmounts::Authorize)
173
190
  transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
174
191
  transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
175
192
  transaction.credit_card_details.expiration_date.should == "05/2009"
176
193
  end
177
-
194
+
178
195
  it "raises a ValidationsFailed if invalid" do
179
196
  expect do
180
197
  Braintree::Transaction.create!(
@@ -201,7 +218,7 @@ describe Braintree::Transaction do
201
218
  result.success?.should == true
202
219
  result.transaction.id.should =~ /^\w{6}$/
203
220
  result.transaction.type.should == "sale"
204
- result.transaction.amount.should == Braintree::Test::TransactionAmounts::Authorize
221
+ result.transaction.amount.should == BigDecimal.new(Braintree::Test::TransactionAmounts::Authorize)
205
222
  result.transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
206
223
  result.transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
207
224
  result.transaction.credit_card_details.expiration_date.should == "05/2009"
@@ -253,7 +270,7 @@ describe Braintree::Transaction do
253
270
  transaction.id.should =~ /\A\w{6}\z/
254
271
  transaction.type.should == "sale"
255
272
  transaction.status.should == "authorized"
256
- transaction.amount.should == "100.00"
273
+ transaction.amount.should == BigDecimal.new("100.00")
257
274
  transaction.order_id.should == "123"
258
275
  transaction.processor_response_code.should == "1000"
259
276
  transaction.created_at.between?(Time.now - 5, Time.now).should == true
@@ -291,7 +308,7 @@ describe Braintree::Transaction do
291
308
  transaction.shipping_details.postal_code.should == "60103"
292
309
  transaction.shipping_details.country_name.should == "United States of America"
293
310
  end
294
-
311
+
295
312
  it "can store customer and credit card in the vault" do
296
313
  result = Braintree::Transaction.sale(
297
314
  :amount => "100",
@@ -347,6 +364,8 @@ describe Braintree::Transaction do
347
364
  transaction.customer_details.id.should =~ /\A\d{6,7}\z/
348
365
  transaction.vault_customer.id.should == transaction.customer_details.id
349
366
  credit_card = Braintree::CreditCard.find(transaction.vault_credit_card.token)
367
+ transaction.billing_details.id.should == credit_card.billing_address.id
368
+ transaction.vault_billing_address.id.should == credit_card.billing_address.id
350
369
  credit_card.billing_address.first_name.should == "Carl"
351
370
  credit_card.billing_address.last_name.should == "Jones"
352
371
  credit_card.billing_address.company.should == "Braintree"
@@ -358,6 +377,50 @@ describe Braintree::Transaction do
358
377
  credit_card.billing_address.country_name.should == "United States of America"
359
378
  end
360
379
 
380
+ it "can store the shipping address in the vault" do
381
+ result = Braintree::Transaction.sale(
382
+ :amount => "100",
383
+ :customer => {
384
+ :first_name => "Adam",
385
+ :last_name => "Williams"
386
+ },
387
+ :credit_card => {
388
+ :number => "5105105105105100",
389
+ :expiration_date => "05/2012"
390
+ },
391
+ :shipping => {
392
+ :first_name => "Carl",
393
+ :last_name => "Jones",
394
+ :company => "Braintree",
395
+ :street_address => "123 E Main St",
396
+ :extended_address => "Suite 403",
397
+ :locality => "Chicago",
398
+ :region => "IL",
399
+ :postal_code => "60622",
400
+ :country_name => "United States of America"
401
+ },
402
+ :options => {
403
+ :store_in_vault => true,
404
+ :store_shipping_address_in_vault => true,
405
+ }
406
+ )
407
+ result.success?.should == true
408
+ transaction = result.transaction
409
+ transaction.customer_details.id.should =~ /\A\d{6,7}\z/
410
+ transaction.vault_customer.id.should == transaction.customer_details.id
411
+ transaction.vault_shipping_address.id.should == transaction.vault_customer.addresses[0].id
412
+ shipping_address = transaction.vault_customer.addresses[0]
413
+ shipping_address.first_name.should == "Carl"
414
+ shipping_address.last_name.should == "Jones"
415
+ shipping_address.company.should == "Braintree"
416
+ shipping_address.street_address.should == "123 E Main St"
417
+ shipping_address.extended_address.should == "Suite 403"
418
+ shipping_address.locality.should == "Chicago"
419
+ shipping_address.region.should == "IL"
420
+ shipping_address.postal_code.should == "60622"
421
+ shipping_address.country_name.should == "United States of America"
422
+ end
423
+
361
424
  it "submits for settlement if given transaction[options][submit_for_settlement]" do
362
425
  result = Braintree::Transaction.sale(
363
426
  :amount => "100",
@@ -372,7 +435,7 @@ describe Braintree::Transaction do
372
435
  result.success?.should == true
373
436
  result.transaction.status.should == "submitted_for_settlement"
374
437
  end
375
-
438
+
376
439
  it "can specify the customer id and payment method token" do
377
440
  customer_id = "customer_#{rand(1000000)}"
378
441
  payment_mehtod_token = "credit_card_#{rand(1000000)}"
@@ -399,7 +462,7 @@ describe Braintree::Transaction do
399
462
  transaction.credit_card_details.token.should == payment_mehtod_token
400
463
  transaction.vault_credit_card.token.should == payment_mehtod_token
401
464
  end
402
-
465
+
403
466
  it "returns an error result if validations fail" do
404
467
  params = {
405
468
  :transaction => {
@@ -428,12 +491,12 @@ describe Braintree::Transaction do
428
491
  )
429
492
  transaction.id.should =~ /^\w{6}$/
430
493
  transaction.type.should == "sale"
431
- transaction.amount.should == Braintree::Test::TransactionAmounts::Authorize
494
+ transaction.amount.should == BigDecimal.new(Braintree::Test::TransactionAmounts::Authorize)
432
495
  transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
433
496
  transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
434
497
  transaction.credit_card_details.expiration_date.should == "05/2009"
435
498
  end
436
-
499
+
437
500
  it "raises a ValidationsFailed if invalid" do
438
501
  expect do
439
502
  Braintree::Transaction.sale!(
@@ -468,10 +531,10 @@ describe Braintree::Transaction do
468
531
  :expiration_date => "06/2009"
469
532
  }
470
533
  )
471
- transaction.amount.should == "1000.00"
534
+ transaction.amount.should == BigDecimal.new("1000.00")
472
535
  result = Braintree::Transaction.submit_for_settlement(transaction.id, "999.99")
473
536
  result.success?.should == true
474
- result.transaction.amount.should == "999.99"
537
+ result.transaction.amount.should == BigDecimal.new("999.99")
475
538
  result.transaction.status.should == "submitted_for_settlement"
476
539
  result.transaction.updated_at.between?(Time.now - 5, Time.now).should == true
477
540
  end
@@ -484,7 +547,7 @@ describe Braintree::Transaction do
484
547
  :expiration_date => "06/2009"
485
548
  }
486
549
  )
487
- transaction.amount.should == "1000.00"
550
+ transaction.amount.should == BigDecimal.new("1000.00")
488
551
  result = Braintree::Transaction.submit_for_settlement(transaction.id, "1000.01")
489
552
  result.success?.should == false
490
553
  result.errors.for(:transaction).on(:amount)[0].code.should == Braintree::ErrorCodes::Transaction::SettlementAmountIsTooLarge
@@ -527,13 +590,13 @@ describe Braintree::Transaction do
527
590
  :expiration_date => "06/2009"
528
591
  }
529
592
  )
530
- transaction.amount.should == "1000.00"
593
+ transaction.amount.should == BigDecimal.new("1000.00")
531
594
  expect do
532
595
  Braintree::Transaction.submit_for_settlement!(transaction.id, "1000.01")
533
596
  end.to raise_error(Braintree::ValidationsFailed)
534
597
  end
535
598
  end
536
-
599
+
537
600
  describe "self.credit" do
538
601
  it "returns a successful result with type=credit if successful" do
539
602
  result = Braintree::Transaction.credit(
@@ -546,12 +609,12 @@ describe Braintree::Transaction do
546
609
  result.success?.should == true
547
610
  result.transaction.id.should =~ /^\w{6}$/
548
611
  result.transaction.type.should == "credit"
549
- result.transaction.amount.should == Braintree::Test::TransactionAmounts::Authorize
612
+ result.transaction.amount.should == BigDecimal.new(Braintree::Test::TransactionAmounts::Authorize)
550
613
  result.transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
551
614
  result.transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
552
615
  result.transaction.credit_card_details.expiration_date.should == "05/2009"
553
616
  end
554
-
617
+
555
618
  it "returns an error result if validations fail" do
556
619
  params = {
557
620
  :transaction => {
@@ -568,7 +631,7 @@ describe Braintree::Transaction do
568
631
  result.errors.for(:transaction).on(:amount)[0].code.should == Braintree::ErrorCodes::Transaction::AmountIsRequired
569
632
  end
570
633
  end
571
-
634
+
572
635
  describe "self.credit!" do
573
636
  it "returns the transaction if valid" do
574
637
  transaction = Braintree::Transaction.credit!(
@@ -580,12 +643,12 @@ describe Braintree::Transaction do
580
643
  )
581
644
  transaction.id.should =~ /^\w{6}$/
582
645
  transaction.type.should == "credit"
583
- transaction.amount.should == Braintree::Test::TransactionAmounts::Authorize
646
+ transaction.amount.should == BigDecimal.new(Braintree::Test::TransactionAmounts::Authorize)
584
647
  transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
585
648
  transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
586
649
  transaction.credit_card_details.expiration_date.should == "05/2009"
587
650
  end
588
-
651
+
589
652
  it "raises a ValidationsFailed if invalid" do
590
653
  expect do
591
654
  Braintree::Transaction.credit!(
@@ -598,7 +661,7 @@ describe Braintree::Transaction do
598
661
  end.to raise_error(Braintree::ValidationsFailed)
599
662
  end
600
663
  end
601
-
664
+
602
665
  describe "self.create_from_transparent_redirect" do
603
666
  it "returns a successful result if successful" do
604
667
  params = {
@@ -620,15 +683,15 @@ describe Braintree::Transaction do
620
683
  result.success?.should == true
621
684
  transaction = result.transaction
622
685
  transaction.type.should == "sale"
623
- transaction.amount.should == "1000.00"
686
+ transaction.amount.should == BigDecimal.new("1000.00")
624
687
  transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
625
688
  transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
626
689
  transaction.credit_card_details.expiration_date.should == "05/2009"
627
690
  end
628
-
691
+
629
692
  it "can put any param in tr_data" do
630
693
  params = {
631
-
694
+
632
695
  }
633
696
  tr_data_params = {
634
697
  :transaction => {
@@ -679,7 +742,7 @@ describe Braintree::Transaction do
679
742
  transaction.id.should =~ /\A\w{6}\z/
680
743
  transaction.type.should == "sale"
681
744
  transaction.status.should == "authorized"
682
- transaction.amount.should == "100.00"
745
+ transaction.amount.should == BigDecimal.new("100.00")
683
746
  transaction.order_id.should == "123"
684
747
  transaction.processor_response_code.should == "1000"
685
748
  transaction.created_at.between?(Time.now - 5, Time.now).should == true
@@ -717,7 +780,7 @@ describe Braintree::Transaction do
717
780
  transaction.shipping_details.postal_code.should == "60103"
718
781
  transaction.shipping_details.country_name.should == "United States of America"
719
782
  end
720
-
783
+
721
784
  it "returns an error result if validations fail" do
722
785
  params = {
723
786
  :transaction => {
@@ -740,7 +803,7 @@ describe Braintree::Transaction do
740
803
  result.errors.for(:transaction).on(:amount)[0].code.should == Braintree::ErrorCodes::Transaction::AmountIsRequired
741
804
  end
742
805
  end
743
-
806
+
744
807
  describe "self.find" do
745
808
  it "finds the transaction with the given id" do
746
809
  result = Braintree::Transaction.create(
@@ -793,7 +856,7 @@ describe Braintree::Transaction do
793
856
  end
794
857
  end
795
858
 
796
- describe "void!" do
859
+ describe "self.void!" do
797
860
  it "returns the transaction if successful" do
798
861
  transaction = Braintree::Transaction.sale!(
799
862
  :amount => Braintree::Test::TransactionAmounts::Authorize,
@@ -820,17 +883,18 @@ describe Braintree::Transaction do
820
883
  end.to raise_error(Braintree::ValidationsFailed)
821
884
  end
822
885
  end
823
-
886
+
824
887
  describe "refund" do
825
888
  it "returns a successful result if successful" do
826
- transaction = find_transaction_to_refund
889
+ transaction = create_transaction_to_refund
890
+ transaction.status.should == "settled"
827
891
  result = transaction.refund
828
892
  result.success?.should == true
829
893
  result.new_transaction.type.should == "credit"
830
894
  end
831
895
 
832
896
  it "returns an error if already refunded" do
833
- transaction = find_transaction_to_refund
897
+ transaction = create_transaction_to_refund
834
898
  result = transaction.refund
835
899
  result.success?.should == true
836
900
  result = transaction.refund
@@ -874,10 +938,10 @@ describe Braintree::Transaction do
874
938
  :expiration_date => "06/2009"
875
939
  }
876
940
  )
877
- transaction.amount.should == "1000.00"
941
+ transaction.amount.should == BigDecimal.new("1000.00")
878
942
  result = transaction.submit_for_settlement("999.99")
879
943
  result.success?.should == true
880
- transaction.amount.should == "999.99"
944
+ transaction.amount.should == BigDecimal.new("999.99")
881
945
  end
882
946
 
883
947
  it "updates the transaction attributes" do
@@ -888,10 +952,10 @@ describe Braintree::Transaction do
888
952
  :expiration_date => "06/2009"
889
953
  }
890
954
  )
891
- transaction.amount.should == "1000.00"
955
+ transaction.amount.should == BigDecimal.new("1000.00")
892
956
  result = transaction.submit_for_settlement("999.99")
893
957
  result.success?.should == true
894
- transaction.amount.should == "999.99"
958
+ transaction.amount.should == BigDecimal.new("999.99")
895
959
  transaction.status.should == "submitted_for_settlement"
896
960
  transaction.updated_at.between?(Time.now - 5, Time.now).should == true
897
961
  end
@@ -904,7 +968,7 @@ describe Braintree::Transaction do
904
968
  :expiration_date => "06/2009"
905
969
  }
906
970
  )
907
- transaction.amount.should == "1000.00"
971
+ transaction.amount.should == BigDecimal.new("1000.00")
908
972
  result = transaction.submit_for_settlement("1000.01")
909
973
  result.success?.should == false
910
974
  result.errors.for(:transaction).on(:amount)[0].code.should == Braintree::ErrorCodes::Transaction::SettlementAmountIsTooLarge
@@ -934,13 +998,13 @@ describe Braintree::Transaction do
934
998
  :expiration_date => "06/2009"
935
999
  }
936
1000
  )
937
- transaction.amount.should == "1000.00"
1001
+ transaction.amount.should == BigDecimal.new("1000.00")
938
1002
  expect do
939
1003
  transaction.submit_for_settlement!("1000.01")
940
1004
  end.to raise_error(Braintree::ValidationsFailed)
941
1005
  end
942
1006
  end
943
-
1007
+
944
1008
  describe "search" do
945
1009
  describe "advanced" do
946
1010
  it "pretty much works in one big fell swoop/hash" do
@@ -1026,12 +1090,12 @@ describe Braintree::Transaction do
1026
1090
  transactions = Braintree::Transaction.search "1111"
1027
1091
  transactions.total_items.should > 0
1028
1092
  end
1029
-
1093
+
1030
1094
  it "is paged" do
1031
1095
  transactions = Braintree::Transaction.search "1111", :page => 2
1032
1096
  transactions.current_page_number.should == 2
1033
1097
  end
1034
-
1098
+
1035
1099
  it "can traverse pages" do
1036
1100
  transactions = Braintree::Transaction.search "1111", :page => 1
1037
1101
  transactions.next_page.current_page_number.should == 2
@@ -1054,7 +1118,7 @@ describe Braintree::Transaction do
1054
1118
  transaction.status_history[1].status.should == "submitted_for_settlement"
1055
1119
  end
1056
1120
  end
1057
-
1121
+
1058
1122
  describe "vault_credit_card" do
1059
1123
  it "returns the Braintree::CreditCard if the transaction credit card is stored in the vault" do
1060
1124
  customer = Braintree::Customer.create!(
@@ -1066,7 +1130,7 @@ describe Braintree::Transaction do
1066
1130
  transaction = customer.credit_cards[0].sale(:amount => "100.00").transaction
1067
1131
  transaction.vault_credit_card.should == customer.credit_cards[0]
1068
1132
  end
1069
-
1133
+
1070
1134
  it "returns nil if the transaction credit card is not stored in the vault" do
1071
1135
  transaction = Braintree::Transaction.create!(
1072
1136
  :amount => "100.00",
@@ -1091,7 +1155,7 @@ describe Braintree::Transaction do
1091
1155
  transaction = customer.credit_cards[0].sale(:amount => "100.00").transaction
1092
1156
  transaction.vault_customer.should == customer
1093
1157
  end
1094
-
1158
+
1095
1159
  it "returns nil if the transaction customer is not stored in the vault" do
1096
1160
  transaction = Braintree::Transaction.create!(
1097
1161
  :amount => "100.00",
@@ -1104,7 +1168,7 @@ describe Braintree::Transaction do
1104
1168
  transaction.vault_customer.should == nil
1105
1169
  end
1106
1170
  end
1107
-
1171
+
1108
1172
  describe "void" do
1109
1173
  it "returns a successful result if successful" do
1110
1174
  result = Braintree::Transaction.create(
@@ -1178,15 +1242,23 @@ describe Braintree::Transaction do
1178
1242
  request.body = Braintree::Util.hash_to_query_string(params)
1179
1243
  response = http.request(request)
1180
1244
  end
1181
- query_string = response["Location"].split("?", 2).last
1245
+ query_string = response["Location"].split("?", 2).last
1182
1246
  query_string
1183
1247
  end
1184
1248
 
1185
- def find_transaction_to_refund
1186
- settled_transactions = Braintree::Transaction.search "settled"
1187
- found = settled_transactions.detect do |t|
1188
- t.status == "settled" && !t.refunded?
1189
- end
1190
- found || raise("unfortunately your test is not as you intended because we could not find a settled transaction that hasn't already been refunded")
1249
+ def create_transaction_to_refund
1250
+ transaction = Braintree::Transaction.sale!(
1251
+ :amount => Braintree::Test::TransactionAmounts::Authorize,
1252
+ :credit_card => {
1253
+ :number => Braintree::Test::CreditCardNumbers::Visa,
1254
+ :expiration_date => "05/2009"
1255
+ },
1256
+ :options => {
1257
+ :submit_for_settlement => true
1258
+ }
1259
+ )
1260
+
1261
+ response = Braintree::Http.put "/transactions/#{transaction.id}/settle"
1262
+ Braintree::Transaction.find(transaction.id)
1191
1263
  end
1192
1264
  end