braintree 2.104.1 → 3.0.1

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 (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