braintree 2.104.1 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/braintree.gemspec +6 -3
  4. data/lib/braintree.rb +3 -17
  5. data/lib/braintree/address.rb +0 -22
  6. data/lib/braintree/base_module.rb +6 -0
  7. data/lib/braintree/configuration.rb +1 -1
  8. data/lib/braintree/credit_card.rb +0 -75
  9. data/lib/braintree/credit_card_gateway.rb +3 -32
  10. data/lib/braintree/credit_card_verification.rb +13 -0
  11. data/lib/braintree/customer.rb +3 -74
  12. data/lib/braintree/customer_gateway.rb +0 -23
  13. data/lib/braintree/dispute.rb +1 -7
  14. data/lib/braintree/dispute/{history_event.rb → status_history.rb} +3 -1
  15. data/lib/braintree/dispute_gateway.rb +2 -7
  16. data/lib/braintree/error_codes.rb +139 -170
  17. data/lib/braintree/exceptions.rb +5 -3
  18. data/lib/braintree/gateway.rb +0 -14
  19. data/lib/braintree/{android_pay_card.rb → google_pay_card.rb} +1 -2
  20. data/lib/braintree/merchant_account_gateway.rb +2 -0
  21. data/lib/braintree/payment_instrument_type.rb +1 -5
  22. data/lib/braintree/payment_method_gateway.rb +4 -9
  23. data/lib/braintree/payment_method_parser.rb +1 -8
  24. data/lib/braintree/subscription.rb +5 -5
  25. data/lib/braintree/successful_result.rb +0 -1
  26. data/lib/braintree/test/nonce.rb +4 -23
  27. data/lib/braintree/transaction.rb +2 -79
  28. data/lib/braintree/transaction/disbursement_details.rb +1 -0
  29. data/lib/braintree/transaction/{android_pay_details.rb → google_pay_details.rb} +1 -1
  30. data/lib/braintree/transaction/subscription_details.rb +2 -0
  31. data/lib/braintree/transaction_gateway.rb +12 -21
  32. data/lib/braintree/transaction_search.rb +0 -1
  33. data/lib/braintree/util.rb +17 -2
  34. data/lib/braintree/version.rb +2 -2
  35. data/lib/braintree/webhook_notification.rb +0 -10
  36. data/lib/braintree/webhook_testing_gateway.rb +0 -43
  37. data/lib/braintree/xml/libxml.rb +1 -0
  38. data/lib/braintree/xml/parser.rb +11 -34
  39. data/spec/integration/braintree/address_spec.rb +2 -89
  40. data/spec/integration/braintree/client_api/spec_helper.rb +0 -26
  41. data/spec/integration/braintree/credit_card_spec.rb +6 -471
  42. data/spec/integration/braintree/customer_spec.rb +22 -362
  43. data/spec/integration/braintree/dispute_search_spec.rb +2 -2
  44. data/spec/integration/braintree/dispute_spec.rb +1 -2
  45. data/spec/integration/braintree/payment_method_spec.rb +77 -120
  46. data/spec/integration/braintree/subscription_spec.rb +11 -16
  47. data/spec/integration/braintree/transaction_search_spec.rb +3 -3
  48. data/spec/integration/braintree/transaction_spec.rb +83 -511
  49. data/spec/integration/spec_helper.rb +1 -4
  50. data/spec/spec_helper.rb +1 -11
  51. data/spec/unit/braintree/address_spec.rb +0 -8
  52. data/spec/unit/braintree/credit_card_spec.rb +1 -20
  53. data/spec/unit/braintree/customer_spec.rb +0 -12
  54. data/spec/unit/braintree/dispute_spec.rb +1 -12
  55. data/spec/unit/braintree/http_spec.rb +3 -3
  56. data/spec/unit/braintree/transaction_spec.rb +1 -35
  57. data/spec/unit/braintree/util_spec.rb +37 -3
  58. data/spec/unit/braintree/webhook_notification_spec.rb +1 -1
  59. data/spec/unit/braintree/xml/parser_spec.rb +21 -16
  60. metadata +26 -30
  61. data/lib/braintree/amex_express_checkout_card.rb +0 -40
  62. data/lib/braintree/coinbase_account.rb +0 -34
  63. data/lib/braintree/europe_bank_account.rb +0 -36
  64. data/lib/braintree/europe_bank_account_gateway.rb +0 -17
  65. data/lib/braintree/ideal_payment.rb +0 -61
  66. data/lib/braintree/ideal_payment_gateway.rb +0 -19
  67. data/lib/braintree/masterpass_card.rb +0 -83
  68. data/lib/braintree/transaction/amex_express_checkout_details.rb +0 -21
  69. data/lib/braintree/transaction/coinbase_details.rb +0 -16
  70. data/lib/braintree/transaction/ideal_payment_details.rb +0 -19
  71. data/lib/braintree/transaction/masterpass_card_details.rb +0 -49
  72. data/lib/braintree/transparent_redirect.rb +0 -40
  73. data/lib/braintree/transparent_redirect_gateway.rb +0 -105
  74. data/lib/braintree/xml/rexml.rb +0 -71
  75. data/spec/hacks/tcp_socket.rb +0 -18
  76. data/spec/integration/braintree/coinbase_spec.rb +0 -34
  77. data/spec/integration/braintree/masterpass_card_spec.rb +0 -97
  78. data/spec/integration/braintree/transparent_redirect_spec.rb +0 -268
  79. data/spec/unit/braintree/transparent_redirect_spec.rb +0 -223
  80. data/spec/unit/braintree/xml/rexml_spec.rb +0 -51
@@ -1,223 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
-
3
- describe Braintree::TransparentRedirect do
4
- describe "self.create_credit_card_data" do
5
- it "raises an exception if any keys are invalid" do
6
- expect do
7
- Braintree::TransparentRedirect.create_credit_card_data(
8
- :credit_card => {:number => "ok", :invalid_key => "bad"}
9
- )
10
- end.to raise_error(ArgumentError, "invalid keys: credit_card[invalid_key]")
11
- end
12
- end
13
-
14
- describe "self.create_customer_data" do
15
- it "raises an exception if any keys are invalid" do
16
- expect do
17
- Braintree::TransparentRedirect.create_customer_data(
18
- :customer => {:first_name => "ok", :invalid_key => "bad"}
19
- )
20
- end.to raise_error(ArgumentError, "invalid keys: customer[invalid_key]")
21
- end
22
- end
23
-
24
- describe "self.parse_and_validate_query_string" do
25
- it "returns the parsed query string params if the hash is valid" do
26
- query_string_without_hash = "one=1&two=2&http_status=200"
27
- hash = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, query_string_without_hash)
28
-
29
- query_string_with_hash = "#{query_string_without_hash}&hash=#{hash}"
30
- result = Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string query_string_with_hash
31
- result.should == {:one => "1", :two => "2", :http_status => "200", :hash => hash}
32
- end
33
-
34
- it "returns the parsed query string params if the hash is valid and hash is first parameter" do
35
- query_string_without_hash = "one=1&two=2&http_status=200"
36
- hash = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, query_string_without_hash)
37
-
38
- query_string_with_hash = "hash=#{hash}&#{query_string_without_hash}"
39
- result = Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string query_string_with_hash
40
- result.should == {:one => "1", :two => "2", :http_status => "200", :hash => hash}
41
- end
42
-
43
- it "returns the parsed query string params regardless of hash position if the hash is valid" do
44
- query_string_without_hash = "one=1&two=2&http_status=200"
45
- hash = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, query_string_without_hash)
46
-
47
- query_string_with_hash = "one=1&hash=#{hash}&two=2&http_status=200"
48
- result = Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string query_string_with_hash
49
- result.should == {:one => "1", :two => "2", :http_status => "200", :hash => hash}
50
- end
51
-
52
- it "raises Braintree::ForgedQueryString if the hash param is not valid" do
53
- query_string_without_hash = "http_status=200&one=1&two=2"
54
- hash = Digest::SHA1.hexdigest("invalid#{query_string_without_hash}")
55
-
56
- query_string_with_hash = "#{query_string_without_hash}&hash=#{hash}"
57
- expect do
58
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string query_string_with_hash
59
- end.to raise_error(Braintree::ForgedQueryString)
60
- end
61
-
62
- it "raises Braintree::ForgedQueryString if hash is missing from the query string" do
63
- expect do
64
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string "http_status=200&query_string=without_a_hash"
65
- end.to raise_error(Braintree::ForgedQueryString)
66
- end
67
-
68
- it "does not raise Braintree::ForgedQueryString if query string is url encoded" do
69
- url_encoded_query_string_without_hash = "http_status%3D200%26nested_param%5Bsub_param%5D%3Dtesting"
70
- url_decoded_query_string_without_hash = Braintree::Util.url_decode(url_encoded_query_string_without_hash)
71
-
72
- hash = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, url_decoded_query_string_without_hash)
73
-
74
- url_encoded_query_string = "#{url_encoded_query_string_without_hash}&hash=#{hash}"
75
-
76
- expect do
77
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string url_encoded_query_string
78
- end.to raise_error(Braintree::UnexpectedError)
79
- end
80
-
81
- it "does not raise Braintree::ForgedQueryString if query string is url decoded" do
82
- url_decoded_query_string_without_hash = "http_status=200&nested_param[sub_param]=testing"
83
- url_encoded_query_string_without_hash = Braintree::Util.url_encode(url_decoded_query_string_without_hash)
84
-
85
- hash = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, url_encoded_query_string_without_hash)
86
-
87
- url_decoded_query_string = "#{url_decoded_query_string_without_hash}&hash=#{hash}"
88
-
89
- expect do
90
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string url_decoded_query_string
91
- end.to_not raise_error
92
- end
93
-
94
- it "does not raise Braintree::ForgedQueryString if the query string is partially encoded" do
95
- url_partially_encoded_query_string_without_hash = "http_status=200&nested_param%5Bsub_param%5D=testing"
96
-
97
- hash = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, url_partially_encoded_query_string_without_hash)
98
-
99
- url_partially_encoded_query_string = "#{url_partially_encoded_query_string_without_hash}&hash=#{hash}"
100
-
101
- expect do
102
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string url_partially_encoded_query_string
103
- end.to_not raise_error
104
- end
105
-
106
- it "raises an AuthenticationError if authentication fails" do
107
- expect do
108
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=401")
109
- end.to raise_error(Braintree::AuthenticationError)
110
- end
111
-
112
- it "raises an AuthorizationError if authorization fails" do
113
- expect do
114
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=403")
115
- end.to raise_error(Braintree::AuthorizationError)
116
- end
117
-
118
- it "raises an UnexpectedError if http_status is not in query string" do
119
- expect do
120
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("no_http_status=x")
121
- end.to raise_error(Braintree::UnexpectedError, "expected query string to have an http_status param")
122
- end
123
-
124
- it "raises a ServerError if the server 500's" do
125
- expect do
126
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=500")
127
- end.to raise_error(Braintree::ServerError)
128
- end
129
-
130
- it "raises a DownForMaintenanceError if the server is down for maintenance" do
131
- expect do
132
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=503")
133
- end.to raise_error(Braintree::DownForMaintenanceError)
134
- end
135
-
136
- it "raises an UnexpectedError if some other code is returned" do
137
- expect do
138
- Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=600")
139
- end.to raise_error(Braintree::UnexpectedError, "Unexpected HTTP_RESPONSE 600")
140
- end
141
- end
142
-
143
- describe "self.transaction_data" do
144
- it "raises an exception if any keys are invalid" do
145
- expect do
146
- Braintree::TransparentRedirect.transaction_data(
147
- :transaction => {:amount => "100.00", :invalid_key => "bad"}
148
- )
149
- end.to raise_error(ArgumentError, "invalid keys: transaction[invalid_key]")
150
- end
151
-
152
- it "raises an exception if not given a type" do
153
- expect do
154
- Braintree::TransparentRedirect.transaction_data(
155
- :redirect_url => "http://example.com",
156
- :transaction => {:amount => "100.00"}
157
- )
158
- end.to raise_error(ArgumentError, "expected transaction[type] of sale or credit, was: nil")
159
- end
160
-
161
- it "raises an exception if not given a type of sale or credit" do
162
- expect do
163
- Braintree::TransparentRedirect.transaction_data(
164
- :redirect_url => "http://example.com",
165
- :transaction => {:amount => "100.00", :type => "auth"}
166
- )
167
- end.to raise_error(ArgumentError, "expected transaction[type] of sale or credit, was: \"auth\"")
168
- end
169
- end
170
-
171
- describe "self.update_credit_card_data" do
172
- it "raises an exception if any keys are invalid" do
173
- expect do
174
- Braintree::TransparentRedirect.update_credit_card_data(
175
- :credit_card => {:number => "ok", :invalid_key => "bad"}
176
- )
177
- end.to raise_error(ArgumentError, "invalid keys: credit_card[invalid_key]")
178
- end
179
-
180
- it "raises an exception if not given a payment_method_token" do
181
- expect do
182
- Braintree::TransparentRedirect.update_credit_card_data({})
183
- end.to raise_error(ArgumentError, "expected params to contain :payment_method_token of payment method to update")
184
- end
185
- end
186
-
187
- describe "self.update_customer_data" do
188
- it "raises an exception if any keys are invalid" do
189
- expect do
190
- Braintree::TransparentRedirect.update_customer_data(
191
- :customer => {:first_name => "ok", :invalid_key => "bad"}
192
- )
193
- end.to raise_error(ArgumentError, "invalid keys: customer[invalid_key]")
194
- end
195
-
196
- it "raises an exception if not given a customer_id" do
197
- expect do
198
- Braintree::TransparentRedirect.update_customer_data({})
199
- end.to raise_error(ArgumentError, "expected params to contain :customer_id of customer to update")
200
- end
201
- end
202
-
203
- describe "self._data" do
204
- it "raises an exception if :redirect_url isn't given" do
205
- expect do
206
- Braintree::TransparentRedirect.create_customer_data(:redirect_url => nil)
207
- end.to raise_error(ArgumentError, "expected params to contain :redirect_url")
208
- end
209
-
210
- it "only encodes tr data once" do
211
- tr_data = Braintree::TransparentRedirect.create_customer_data(:redirect_url => "example.com")
212
-
213
- tr_data.should include("|")
214
- tr_data.should include("&")
215
- end
216
- end
217
-
218
- def add_hash_to_query_string(query_string_without_hash)
219
- hash = Braintree::SignatureService.new(Braintree::Configuration.private_key).hash(query_string_without_hash)
220
- query_string_without_hash + "&hash=" + hash
221
- end
222
- end
223
-
@@ -1,51 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
-
3
- describe Braintree::Xml::Rexml do
4
- describe "self.parse" do
5
- it "typecasts integers" do
6
- xml = "<root><foo type=\"integer\">123</foo></root>"
7
- Braintree::Xml::Rexml.parse(xml).should == {"root"=>{"foo"=>{"__content__"=>"123", "type"=>"integer"}}}
8
- end
9
-
10
- it "works with dashes or underscores" do
11
- xml = <<-END
12
- <root>
13
- <dash-es />
14
- <under_scores />
15
- </root>
16
- END
17
- Braintree::Xml::Rexml.parse(xml).should == {"root"=>{"dash-es"=>{}, "under_scores"=>{}}}
18
- end
19
-
20
- it "uses nil if nil=true, otherwise uses empty string" do
21
- xml = <<-END
22
- <root>
23
- <a_nil_value nil="true"></a_nil_value>
24
- <an_empty_string></an_empty_string>
25
- </root>
26
- END
27
- Braintree::Xml::Rexml.parse(xml).should == {"root"=>{"a_nil_value"=>{"nil"=>"true"}, "an_empty_string"=>{}}}
28
- end
29
-
30
- it "typecasts dates and times" do
31
- xml = <<-END
32
- <root>
33
- <created-at type="datetime">2009-10-28T10:19:49Z</created-at>
34
- </root>
35
- END
36
- Braintree::Xml::Rexml.parse(xml).should == {"root"=>{"created-at"=>{"__content__"=>"2009-10-28T10:19:49Z", "type"=>"datetime"}}}
37
- end
38
-
39
- it "builds an array if type=array" do
40
- xml = <<-END
41
- <root>
42
- <customers type="array">
43
- <customer><name>Adam</name></customer>
44
- <customer><name>Ben</name></customer>
45
- </customers>
46
- </root>
47
- END
48
- Braintree::Xml::Rexml.parse(xml).should == {"root"=>{"customers"=>{"type"=>"array", "customer"=>[{"name"=>{"__content__"=>"Adam"}}, {"name"=>{"__content__"=>"Ben"}}]}}}
49
- end
50
- end
51
- end