braintree 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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