braintree 3.3.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/braintree.gemspec +1 -1
  3. data/lib/braintree.rb +2 -1
  4. data/lib/braintree/account_updater_daily_report.rb +1 -1
  5. data/lib/braintree/address.rb +1 -1
  6. data/lib/braintree/apple_pay.rb +1 -1
  7. data/lib/braintree/apple_pay_card.rb +1 -1
  8. data/lib/braintree/apple_pay_options.rb +1 -1
  9. data/lib/braintree/authorization_adjustment.rb +1 -1
  10. data/lib/braintree/client_token.rb +1 -1
  11. data/lib/braintree/configuration.rb +11 -11
  12. data/lib/braintree/connected_merchant_paypal_status_changed.rb +1 -1
  13. data/lib/braintree/connected_merchant_status_transitioned.rb +1 -1
  14. data/lib/braintree/credit_card.rb +2 -2
  15. data/lib/braintree/credit_card_gateway.rb +3 -3
  16. data/lib/braintree/credit_card_verification.rb +5 -5
  17. data/lib/braintree/credit_card_verification_search.rb +1 -1
  18. data/lib/braintree/customer.rb +2 -2
  19. data/lib/braintree/customer_search.rb +1 -1
  20. data/lib/braintree/disbursement.rb +1 -1
  21. data/lib/braintree/dispute.rb +1 -1
  22. data/lib/braintree/dispute_gateway.rb +2 -2
  23. data/lib/braintree/dispute_search.rb +2 -2
  24. data/lib/braintree/document_upload.rb +1 -1
  25. data/lib/braintree/error_codes.rb +7 -0
  26. data/lib/braintree/google_pay_card.rb +1 -1
  27. data/lib/braintree/granted_payment_instrument_update.rb +1 -1
  28. data/lib/braintree/graphql_client.rb +7 -7
  29. data/lib/braintree/http.rb +3 -3
  30. data/lib/braintree/local_payment_completed.rb +1 -1
  31. data/lib/braintree/local_payment_reversed.rb +19 -0
  32. data/lib/braintree/merchant.rb +1 -1
  33. data/lib/braintree/merchant_account.rb +1 -1
  34. data/lib/braintree/merchant_account_gateway.rb +1 -1
  35. data/lib/braintree/merchant_gateway.rb +1 -1
  36. data/lib/braintree/modification.rb +1 -1
  37. data/lib/braintree/oauth_credentials.rb +1 -1
  38. data/lib/braintree/oauth_gateway.rb +5 -5
  39. data/lib/braintree/payment_instrument_type.rb +10 -10
  40. data/lib/braintree/payment_method_gateway.rb +3 -3
  41. data/lib/braintree/payment_method_nonce_gateway.rb +1 -1
  42. data/lib/braintree/plan.rb +1 -1
  43. data/lib/braintree/processor_response_types.rb +3 -3
  44. data/lib/braintree/revoked_payment_method_metadata.rb +1 -1
  45. data/lib/braintree/samsung_pay_card.rb +1 -1
  46. data/lib/braintree/settlement_batch_summary.rb +2 -2
  47. data/lib/braintree/subscription.rb +6 -6
  48. data/lib/braintree/transaction.rb +32 -24
  49. data/lib/braintree/transaction_gateway.rb +23 -4
  50. data/lib/braintree/transaction_line_item.rb +1 -1
  51. data/lib/braintree/transaction_search.rb +3 -1
  52. data/lib/braintree/unknown_payment_method.rb +1 -1
  53. data/lib/braintree/us_bank_account.rb +3 -3
  54. data/lib/braintree/us_bank_account_verification.rb +1 -1
  55. data/lib/braintree/us_bank_account_verification_gateway.rb +1 -1
  56. data/lib/braintree/util.rb +4 -4
  57. data/lib/braintree/venmo_account.rb +1 -1
  58. data/lib/braintree/version.rb +1 -1
  59. data/lib/braintree/visa_checkout_card.rb +2 -2
  60. data/lib/braintree/webhook_notification.rb +28 -19
  61. data/lib/braintree/webhook_notification_gateway.rb +5 -5
  62. data/lib/braintree/webhook_testing_gateway.rb +10 -0
  63. data/lib/braintree/xml/generator.rb +5 -4
  64. data/lib/braintree/xml/libxml.rb +1 -1
  65. data/lib/braintree/xml/parser.rb +10 -10
  66. data/spec/integration/braintree/add_on_spec.rb +1 -1
  67. data/spec/integration/braintree/address_spec.rb +24 -24
  68. data/spec/integration/braintree/advanced_search_spec.rb +45 -45
  69. data/spec/integration/braintree/apple_pay_spec.rb +3 -3
  70. data/spec/integration/braintree/braintree_gateway_spec.rb +2 -1
  71. data/spec/integration/braintree/client_api/client_token_spec.rb +14 -14
  72. data/spec/integration/braintree/client_api/spec_helper.rb +5 -5
  73. data/spec/integration/braintree/credit_card_spec.rb +119 -119
  74. data/spec/integration/braintree/credit_card_verification_search_spec.rb +2 -2
  75. data/spec/integration/braintree/credit_card_verification_spec.rb +1 -1
  76. data/spec/integration/braintree/customer_search_spec.rb +8 -8
  77. data/spec/integration/braintree/customer_spec.rb +165 -165
  78. data/spec/integration/braintree/dispute_search_spec.rb +3 -3
  79. data/spec/integration/braintree/dispute_spec.rb +6 -6
  80. data/spec/integration/braintree/error_codes_spec.rb +1 -1
  81. data/spec/integration/braintree/http_spec.rb +2 -2
  82. data/spec/integration/braintree/merchant_account_spec.rb +25 -26
  83. data/spec/integration/braintree/merchant_spec.rb +12 -12
  84. data/spec/integration/braintree/oauth_spec.rb +11 -11
  85. data/spec/integration/braintree/payment_method_nonce_spec.rb +12 -12
  86. data/spec/integration/braintree/payment_method_spec.rb +165 -165
  87. data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +9 -9
  88. data/spec/integration/braintree/paypal_account_spec.rb +28 -28
  89. data/spec/integration/braintree/samsung_pay_card_spec.rb +9 -9
  90. data/spec/integration/braintree/settlement_batch_summary_spec.rb +8 -8
  91. data/spec/integration/braintree/subscription_spec.rb +133 -133
  92. data/spec/integration/braintree/test/transaction_amounts_spec.rb +2 -2
  93. data/spec/integration/braintree/test_transaction_spec.rb +10 -10
  94. data/spec/integration/braintree/transaction_search_spec.rb +93 -67
  95. data/spec/integration/braintree/transaction_spec.rb +498 -344
  96. data/spec/integration/braintree/transaction_us_bank_account_spec.rb +20 -20
  97. data/spec/integration/braintree/us_bank_account_spec.rb +6 -6
  98. data/spec/integration/braintree/us_bank_account_verification_search_spec.rb +7 -7
  99. data/spec/integration/braintree/us_bank_account_verification_spec.rb +8 -8
  100. data/spec/integration/braintree/visa_checkout_card_spec.rb +5 -5
  101. data/spec/integration/spec_helper.rb +2 -2
  102. data/spec/oauth_test_helper.rb +1 -1
  103. data/spec/script/httpsd.rb +6 -6
  104. data/spec/spec_helper.rb +4 -3
  105. data/spec/unit/braintree/address_spec.rb +1 -1
  106. data/spec/unit/braintree/apple_pay_card_spec.rb +1 -1
  107. data/spec/unit/braintree/client_token_spec.rb +2 -2
  108. data/spec/unit/braintree/configuration_spec.rb +42 -42
  109. data/spec/unit/braintree/credit_card_spec.rb +7 -7
  110. data/spec/unit/braintree/credit_card_verification_search_spec.rb +1 -1
  111. data/spec/unit/braintree/credit_card_verification_spec.rb +2 -2
  112. data/spec/unit/braintree/customer_spec.rb +3 -3
  113. data/spec/unit/braintree/disbursement_spec.rb +7 -7
  114. data/spec/unit/braintree/dispute_spec.rb +8 -8
  115. data/spec/unit/braintree/error_result_spec.rb +5 -5
  116. data/spec/unit/braintree/errors_spec.rb +8 -8
  117. data/spec/unit/braintree/http_spec.rb +5 -5
  118. data/spec/unit/braintree/merchant_account_spec.rb +1 -1
  119. data/spec/unit/braintree/payment_method_spec.rb +1 -1
  120. data/spec/unit/braintree/paypal_account_spec.rb +2 -2
  121. data/spec/unit/braintree/resource_collection_spec.rb +9 -9
  122. data/spec/unit/braintree/subscription_search_spec.rb +1 -1
  123. data/spec/unit/braintree/successful_result_spec.rb +1 -1
  124. data/spec/unit/braintree/three_d_secure_info_spec.rb +1 -1
  125. data/spec/unit/braintree/transaction/credit_card_details_spec.rb +3 -3
  126. data/spec/unit/braintree/transaction/customer_details_spec.rb +1 -1
  127. data/spec/unit/braintree/transaction/deposit_details_spec.rb +2 -2
  128. data/spec/unit/braintree/transaction/paypal_details_spec.rb +1 -1
  129. data/spec/unit/braintree/transaction_search_spec.rb +12 -12
  130. data/spec/unit/braintree/transaction_spec.rb +25 -17
  131. data/spec/unit/braintree/util_spec.rb +18 -18
  132. data/spec/unit/braintree/validation_error_collection_spec.rb +36 -36
  133. data/spec/unit/braintree/webhook_notification_spec.rb +72 -56
  134. data/spec/unit/braintree/xml_spec.rb +31 -31
  135. metadata +3 -3
  136. data/lib/braintree/settlement_batch.rb +0 -0
@@ -11,12 +11,12 @@ describe Braintree::Util do
11
11
  end
12
12
 
13
13
  it "symbolizes nested keys" do
14
- hash = {"a" => {"b" => {"c" => "d" }}}
14
+ hash = {"a" => {"b" => {"c" => "d"}}}
15
15
  Braintree::Util.symbolize_keys(hash).should == {:a => {:b => {:c => "d"}}}
16
16
  end
17
17
 
18
18
  it "symbolizes nested keys in arrays" do
19
- hash = {"a" => ["b" => {"c" => "d" }]}
19
+ hash = {"a" => ["b" => {"c" => "d"}]}
20
20
  Braintree::Util.symbolize_keys(hash).should == {:a => [:b => {:c => "d"}]}
21
21
  end
22
22
  end
@@ -44,7 +44,7 @@ describe Braintree::Util do
44
44
  :nested_allowed => "ok",
45
45
  :nested_allowed2 => "also ok",
46
46
  :nested_invalid => "bad"
47
- }
47
+ },
48
48
  )
49
49
  end.to raise_error(ArgumentError, "invalid keys: nested[nested_invalid], top_level_invalid")
50
50
  end
@@ -57,7 +57,7 @@ describe Braintree::Util do
57
57
  :custom_fields => {
58
58
  :custom_allowed => "ok",
59
59
  :custom_allowed2 => "also ok",
60
- }
60
+ },
61
61
  )
62
62
  end.to_not raise_error
63
63
  end
@@ -70,7 +70,7 @@ describe Braintree::Util do
70
70
  :custom_fields => {
71
71
  :bad_nesting => "very bad"
72
72
  }
73
- }
73
+ },
74
74
  )
75
75
  end.to raise_error(ArgumentError, "invalid keys: allowed[custom_fields][bad_nesting]")
76
76
  end
@@ -89,7 +89,7 @@ describe Braintree::Util do
89
89
  :super_deep_allowed => "yep",
90
90
  :real_deep_invalid => "nope"
91
91
  }
92
- }
92
+ },
93
93
  )
94
94
  end.to raise_error(ArgumentError, "invalid keys: nested[deeply_allowed][real_deep_invalid], nested[nested_invalid], top_level_invalid")
95
95
  end
@@ -101,7 +101,7 @@ describe Braintree::Util do
101
101
  :add_ons => {
102
102
  :update => [{:amount => 10}],
103
103
  :add => [{:amount => 5}]
104
- }
104
+ },
105
105
  )
106
106
  end.to_not raise_error
107
107
  end
@@ -113,7 +113,7 @@ describe Braintree::Util do
113
113
  :add_ons => {
114
114
  :update => [{:foo => 10}],
115
115
  :add => [{:bar => 5}]
116
- }
116
+ },
117
117
  )
118
118
  end.to raise_error(ArgumentError, /invalid keys: add_ons\[add\]\[bar\], add_ons\[update\]\[foo\]/)
119
119
  end
@@ -127,7 +127,7 @@ describe Braintree::Util do
127
127
  :custom_fields => {
128
128
  :custom_allowed => "ok",
129
129
  :custom_allowed2 => "also ok",
130
- }
130
+ },
131
131
  )
132
132
  expect(response).to eq(true)
133
133
  end
@@ -147,7 +147,7 @@ describe Braintree::Util do
147
147
  :add_ons => {
148
148
  :update => [{:foo => 10}],
149
149
  :add => [{:bar => 5}]
150
- }
150
+ },
151
151
  )
152
152
  expect(response).to eq(false)
153
153
  end
@@ -165,7 +165,7 @@ describe Braintree::Util do
165
165
  :super_deep_allowed => "yep",
166
166
  :real_deep_invalid => "nope"
167
167
  }
168
- }
168
+ },
169
169
  )
170
170
  expect(response).to eq(false)
171
171
  end
@@ -200,13 +200,13 @@ describe Braintree::Util do
200
200
  describe "self._flatten_valid_keys" do
201
201
  it "flattens hash keys" do
202
202
  Braintree::Util._flatten_valid_keys(
203
- [:top_level, {:nested => [:nested_allowed, :nested_allowed2]}]
203
+ [:top_level, {:nested => [:nested_allowed, :nested_allowed2]}],
204
204
  ).should == ["nested[nested_allowed2]", "nested[nested_allowed]", "top_level"]
205
205
  end
206
206
 
207
207
  it "allows wildcards with the :_any_key_ symbol" do
208
208
  Braintree::Util._flatten_valid_keys(
209
- [:top_level, {:nested => :_any_key_}]
209
+ [:top_level, {:nested => :_any_key_}],
210
210
  ).should == ["nested[_any_key_]", "top_level"]
211
211
  end
212
212
  end
@@ -236,11 +236,11 @@ describe Braintree::Util do
236
236
  result.should == []
237
237
  end
238
238
 
239
- it "raises an UnexpectedError if nil data is provided" do
240
- expect do
241
- Braintree::Util.extract_attribute_as_array(nil, :abc)
242
- end.to raise_error(Braintree::UnexpectedError, /Unprocessable entity due to an invalid request/)
243
- end
239
+ it "raises an UnexpectedError if nil data is provided" do
240
+ expect do
241
+ Braintree::Util.extract_attribute_as_array(nil, :abc)
242
+ end.to raise_error(Braintree::UnexpectedError, /Unprocessable entity due to an invalid request/)
243
+ end
244
244
  end
245
245
 
246
246
  describe "self.hash_to_query_string" do
@@ -5,7 +5,7 @@ describe Braintree::ValidationErrorCollection do
5
5
  context "blue response" do
6
6
  describe "initialize" do
7
7
  it "builds an error object given an array of hashes" do
8
- hash = {:errors => [{ :attribute => "some model attribute", :code => 1, :message => "bad juju" }]}
8
+ hash = {:errors => [{:attribute => "some model attribute", :code => 1, :message => "bad juju"}]}
9
9
  collection = Braintree::ValidationErrorCollection.new(hash)
10
10
  error = collection[0]
11
11
  error.attribute.should == "some model attribute"
@@ -17,9 +17,9 @@ describe Braintree::ValidationErrorCollection do
17
17
  describe "for" do
18
18
  it "provides access to nested errors" do
19
19
  hash = {
20
- :errors => [{ :attribute => "some model attribute", :code => 1, :message => "bad juju" }],
20
+ :errors => [{:attribute => "some model attribute", :code => 1, :message => "bad juju"}],
21
21
  :nested => {
22
- :errors => [{ :attribute => "number", :code => 2, :message => "badder juju"}]
22
+ :errors => [{:attribute => "number", :code => 2, :message => "badder juju"}]
23
23
  }
24
24
  }
25
25
  errors = Braintree::ValidationErrorCollection.new(hash)
@@ -45,7 +45,7 @@ describe Braintree::ValidationErrorCollection do
45
45
  ],
46
46
  :level1 => {
47
47
  :errors => [{:attribute => "name", :code => "code2", :message => "message2"}]
48
- }
48
+ },
49
49
  )
50
50
  errors.inspect.should == "#<Braintree::ValidationErrorCollection errors:[(code1) message1], level1:[(code2) message2]>"
51
51
  end
@@ -60,7 +60,7 @@ describe Braintree::ValidationErrorCollection do
60
60
  :level2 => {
61
61
  :errors => [{:attribute => "name", :code => "code3", :message => "message3"}],
62
62
  }
63
- }
63
+ },
64
64
  )
65
65
  errors.inspect.should == "#<Braintree::ValidationErrorCollection errors:[(code1) message1], level1:[(code2) message2], level1/level2:[(code3) message3]>"
66
66
  end
@@ -74,12 +74,12 @@ describe Braintree::ValidationErrorCollection do
74
74
  {:attribute => "not name", :code => 3, :message => "is invalid"}
75
75
  ])
76
76
  errors.on("name").size.should == 2
77
- errors.on("name").map{ |e| e.code }.should == [1, 2]
77
+ errors.on("name").map { |e| e.code }.should == [1, 2]
78
78
  end
79
79
 
80
80
  it "has indifferent access" do
81
81
  errors = Braintree::ValidationErrorCollection.new(:errors => [
82
- { :attribute => "name", :code => 3, :message => "is too long" },
82
+ {:attribute => "name", :code => 3, :message => "is too long"},
83
83
  ])
84
84
  errors.on(:name).size.should == 1
85
85
  errors.on(:name)[0].code.should == 3
@@ -99,10 +99,10 @@ describe Braintree::ValidationErrorCollection do
99
99
 
100
100
  it "returns the size of nested errors as well" do
101
101
  errors = Braintree::ValidationErrorCollection.new(
102
- :errors => [{ :attribute => "some model attribute", :code => 1, :message => "bad juju" }],
102
+ :errors => [{:attribute => "some model attribute", :code => 1, :message => "bad juju"}],
103
103
  :nested => {
104
- :errors => [{ :attribute => "number", :code => 2, :message => "badder juju"}]
105
- }
104
+ :errors => [{:attribute => "number", :code => 2, :message => "badder juju"}]
105
+ },
106
106
  )
107
107
  errors.deep_size.should == 2
108
108
  end
@@ -110,17 +110,17 @@ describe Braintree::ValidationErrorCollection do
110
110
  it "returns the size of multiple nestings of errors" do
111
111
  errors = Braintree::ValidationErrorCollection.new(
112
112
  :errors => [
113
- { :attribute => "one", :code => 1, :message => "bad juju" },
114
- { :attribute => "two", :code => 1, :message => "bad juju" }],
113
+ {:attribute => "one", :code => 1, :message => "bad juju"},
114
+ {:attribute => "two", :code => 1, :message => "bad juju"}],
115
115
  :nested => {
116
- :errors => [{ :attribute => "three", :code => 2, :message => "badder juju"}],
116
+ :errors => [{:attribute => "three", :code => 2, :message => "badder juju"}],
117
117
  :nested_again => {
118
- :errors => [{ :attribute => "four", :code => 2, :message => "badder juju"}]
118
+ :errors => [{:attribute => "four", :code => 2, :message => "badder juju"}]
119
119
  }
120
120
  },
121
121
  :same_level => {
122
- :errors => [{ :attribute => "five", :code => 2, :message => "badder juju"}],
123
- }
122
+ :errors => [{:attribute => "five", :code => 2, :message => "badder juju"}],
123
+ },
124
124
  )
125
125
  errors.deep_size.should == 5
126
126
  end
@@ -130,17 +130,17 @@ describe Braintree::ValidationErrorCollection do
130
130
  it "returns errors from all levels" do
131
131
  errors = Braintree::ValidationErrorCollection.new(
132
132
  :errors => [
133
- { :attribute => "one", :code => 1, :message => "bad juju" },
134
- { :attribute => "two", :code => 2, :message => "bad juju" }],
133
+ {:attribute => "one", :code => 1, :message => "bad juju"},
134
+ {:attribute => "two", :code => 2, :message => "bad juju"}],
135
135
  :nested => {
136
- :errors => [{ :attribute => "three", :code => 3, :message => "badder juju"}],
136
+ :errors => [{:attribute => "three", :code => 3, :message => "badder juju"}],
137
137
  :nested_again => {
138
- :errors => [{ :attribute => "four", :code => 4, :message => "badder juju"}]
138
+ :errors => [{:attribute => "four", :code => 4, :message => "badder juju"}]
139
139
  }
140
140
  },
141
141
  :same_level => {
142
- :errors => [{ :attribute => "five", :code => 5, :message => "badder juju"}],
143
- }
142
+ :errors => [{:attribute => "five", :code => 5, :message => "badder juju"}],
143
+ },
144
144
  )
145
145
  errors.deep_errors.map { |e| e.code }.sort.should == [1, 2, 3, 4, 5]
146
146
  end
@@ -150,27 +150,27 @@ describe Braintree::ValidationErrorCollection do
150
150
  it "returns errors on one level" do
151
151
  errors = Braintree::ValidationErrorCollection.new(
152
152
  :errors => [
153
- { :attribute => "one", :code => 1, :message => "bad juju" },
154
- { :attribute => "two", :code => 2, :message => "bad juju" }],
153
+ {:attribute => "one", :code => 1, :message => "bad juju"},
154
+ {:attribute => "two", :code => 2, :message => "bad juju"}],
155
155
  :nested => {
156
- :errors => [{ :attribute => "three", :code => 3, :message => "badder juju"}],
156
+ :errors => [{:attribute => "three", :code => 3, :message => "badder juju"}],
157
157
  :nested_again => {
158
- :errors => [{ :attribute => "four", :code => 4, :message => "badder juju"}]
158
+ :errors => [{:attribute => "four", :code => 4, :message => "badder juju"}]
159
159
  }
160
- }
160
+ },
161
161
  )
162
- errors.shallow_errors.map {|e| e.code}.should == [1, 2]
163
- errors.for(:nested).shallow_errors.map {|e| e.code}.should == [3]
162
+ errors.shallow_errors.map { |e| e.code }.should == [1, 2]
163
+ errors.for(:nested).shallow_errors.map { |e| e.code }.should == [3]
164
164
  end
165
165
 
166
166
  it "returns an clone of the real array" do
167
167
  errors = Braintree::ValidationErrorCollection.new(
168
168
  :errors => [
169
- { :attribute => "one", :code => 1, :message => "bad juju" },
170
- { :attribute => "two", :code => 2, :message => "bad juju" }]
169
+ {:attribute => "one", :code => 1, :message => "bad juju"},
170
+ {:attribute => "two", :code => 2, :message => "bad juju"}],
171
171
  )
172
172
  errors.shallow_errors.pop
173
- errors.shallow_errors.map {|e| e.code}.should == [1, 2]
173
+ errors.shallow_errors.map { |e| e.code }.should == [1, 2]
174
174
  end
175
175
  end
176
176
  end
@@ -368,10 +368,10 @@ describe Braintree::ValidationErrorCollection do
368
368
  }
369
369
  }
370
370
  errors = Braintree::ValidationErrorCollection.new(hash)
371
- errors.shallow_errors.map {|e| e.code}.should == [1]
372
- errors.for(:nested).shallow_errors.map {|e| e.code}.should == [2,3]
373
- errors.for(:nested).for(:deeply_nested).shallow_errors.map {|e| e.code}.should == [4]
374
- errors.for(:nested_again).shallow_errors.map {|e| e.code}.should == [5]
371
+ errors.shallow_errors.map { |e| e.code }.should == [1]
372
+ errors.for(:nested).shallow_errors.map { |e| e.code }.should == [2,3]
373
+ errors.for(:nested).for(:deeply_nested).shallow_errors.map { |e| e.code }.should == [4]
374
+ errors.for(:nested_again).shallow_errors.map { |e| e.code }.should == [5]
375
375
  end
376
376
  end
377
377
  end
@@ -5,7 +5,7 @@ describe Braintree::WebhookNotification do
5
5
  it "builds a sample notification and signature given an identifier and kind" do
6
6
  sample_notification = Braintree::WebhookTesting.sample_notification(
7
7
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
8
- "my_id"
8
+ "my_id",
9
9
  )
10
10
 
11
11
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -18,7 +18,7 @@ describe Braintree::WebhookNotification do
18
18
  it "builds a sample notification for a partner merchant connected webhook" do
19
19
  sample_notification = Braintree::WebhookTesting.sample_notification(
20
20
  Braintree::WebhookNotification::Kind::PartnerMerchantConnected,
21
- "my_id"
21
+ "my_id",
22
22
  )
23
23
 
24
24
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -35,7 +35,7 @@ describe Braintree::WebhookNotification do
35
35
  it "builds a sample notification for a partner merchant disconnected webhook" do
36
36
  sample_notification = Braintree::WebhookTesting.sample_notification(
37
37
  Braintree::WebhookNotification::Kind::PartnerMerchantDisconnected,
38
- "my_id"
38
+ "my_id",
39
39
  )
40
40
 
41
41
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -48,7 +48,7 @@ describe Braintree::WebhookNotification do
48
48
  it "builds a sample notification for a partner merchant declined webhook" do
49
49
  sample_notification = Braintree::WebhookTesting.sample_notification(
50
50
  Braintree::WebhookNotification::Kind::PartnerMerchantDeclined,
51
- "my_id"
51
+ "my_id",
52
52
  )
53
53
 
54
54
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -62,7 +62,7 @@ describe Braintree::WebhookNotification do
62
62
  sample_notification = Braintree::WebhookTesting.sample_notification(
63
63
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
64
64
  "my_id",
65
- "my_source_merchant_id"
65
+ "my_source_merchant_id",
66
66
  )
67
67
 
68
68
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -73,7 +73,7 @@ describe Braintree::WebhookNotification do
73
73
  it "doesn't include source merchant IDs if not supplied" do
74
74
  sample_notification = Braintree::WebhookTesting.sample_notification(
75
75
  Braintree::WebhookNotification::Kind::PartnerMerchantDeclined,
76
- "my_id"
76
+ "my_id",
77
77
  )
78
78
 
79
79
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -85,7 +85,7 @@ describe Braintree::WebhookNotification do
85
85
  it "builds a sample notification for a status transitioned webhook" do
86
86
  sample_notification = Braintree::WebhookTesting.sample_notification(
87
87
  Braintree::WebhookNotification::Kind::ConnectedMerchantStatusTransitioned,
88
- "my_id"
88
+ "my_id",
89
89
  )
90
90
 
91
91
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -102,7 +102,7 @@ describe Braintree::WebhookNotification do
102
102
  it "builds a sample notification for a paypal status changed webhook" do
103
103
  sample_notification = Braintree::WebhookTesting.sample_notification(
104
104
  Braintree::WebhookNotification::Kind::ConnectedMerchantPayPalStatusChanged,
105
- "my_id"
105
+ "my_id",
106
106
  )
107
107
 
108
108
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -116,10 +116,10 @@ describe Braintree::WebhookNotification do
116
116
  paypal_status_changed.action.should == "link"
117
117
  end
118
118
 
119
- it 'builds a sample notification for OAuth application revocation' do
119
+ it "builds a sample notification for OAuth application revocation" do
120
120
  sample_notification = Braintree::WebhookTesting.sample_notification(
121
121
  Braintree::WebhookNotification::Kind::OAuthAccessRevoked,
122
- 'my_id'
122
+ "my_id",
123
123
  )
124
124
 
125
125
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -139,7 +139,7 @@ describe Braintree::WebhookNotification do
139
139
  it "builds a sample notification for a dispute opened webhook" do
140
140
  sample_notification = Braintree::WebhookTesting.sample_notification(
141
141
  Braintree::WebhookNotification::Kind::DisputeOpened,
142
- dispute_id
142
+ dispute_id,
143
143
  )
144
144
 
145
145
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -155,7 +155,7 @@ describe Braintree::WebhookNotification do
155
155
  it "builds a sample notification for a dispute lost webhook" do
156
156
  sample_notification = Braintree::WebhookTesting.sample_notification(
157
157
  Braintree::WebhookNotification::Kind::DisputeLost,
158
- dispute_id
158
+ dispute_id,
159
159
  )
160
160
 
161
161
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -171,7 +171,7 @@ describe Braintree::WebhookNotification do
171
171
  it "builds a sample notification for a dispute won webhook" do
172
172
  sample_notification = Braintree::WebhookTesting.sample_notification(
173
173
  Braintree::WebhookNotification::Kind::DisputeWon,
174
- dispute_id
174
+ dispute_id,
175
175
  )
176
176
 
177
177
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -187,7 +187,7 @@ describe Braintree::WebhookNotification do
187
187
  it "builds a sample notification for a dispute accepted webhook" do
188
188
  sample_notification = Braintree::WebhookTesting.sample_notification(
189
189
  Braintree::WebhookNotification::Kind::DisputeAccepted,
190
- dispute_id
190
+ dispute_id,
191
191
  )
192
192
 
193
193
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -203,7 +203,7 @@ describe Braintree::WebhookNotification do
203
203
  it "builds a sample notification for a dispute disputed webhook" do
204
204
  sample_notification = Braintree::WebhookTesting.sample_notification(
205
205
  Braintree::WebhookNotification::Kind::DisputeDisputed,
206
- dispute_id
206
+ dispute_id,
207
207
  )
208
208
 
209
209
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -219,7 +219,7 @@ describe Braintree::WebhookNotification do
219
219
  it "builds a sample notification for a dispute expired webhook" do
220
220
  sample_notification = Braintree::WebhookTesting.sample_notification(
221
221
  Braintree::WebhookNotification::Kind::DisputeExpired,
222
- dispute_id
222
+ dispute_id,
223
223
  )
224
224
 
225
225
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -235,7 +235,7 @@ describe Braintree::WebhookNotification do
235
235
  it "is compatible with the previous dispute won webhook interface" do
236
236
  sample_notification = Braintree::WebhookTesting.sample_notification(
237
237
  Braintree::WebhookNotification::Kind::DisputeWon,
238
- dispute_id
238
+ dispute_id,
239
239
  )
240
240
 
241
241
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -267,7 +267,7 @@ describe Braintree::WebhookNotification do
267
267
  it "builds a sample notification for a transaction disbursed webhook" do
268
268
  sample_notification = Braintree::WebhookTesting.sample_notification(
269
269
  Braintree::WebhookNotification::Kind::TransactionDisbursed,
270
- "my_id"
270
+ "my_id",
271
271
  )
272
272
 
273
273
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -281,7 +281,7 @@ describe Braintree::WebhookNotification do
281
281
  it "builds a sample notification for a disbursement_exception webhook" do
282
282
  sample_notification = Braintree::WebhookTesting.sample_notification(
283
283
  Braintree::WebhookNotification::Kind::DisbursementException,
284
- "my_id"
284
+ "my_id",
285
285
  )
286
286
 
287
287
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -300,7 +300,7 @@ describe Braintree::WebhookNotification do
300
300
  it "builds a sample notification for a disbursement webhook" do
301
301
  sample_notification = Braintree::WebhookTesting.sample_notification(
302
302
  Braintree::WebhookNotification::Kind::Disbursement,
303
- "my_id"
303
+ "my_id",
304
304
  )
305
305
 
306
306
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -321,7 +321,7 @@ describe Braintree::WebhookNotification do
321
321
  it "builds a sample notification for a settlement webhook" do
322
322
  sample_notification = Braintree::WebhookTesting.sample_notification(
323
323
  Braintree::WebhookNotification::Kind::TransactionSettled,
324
- "my_id"
324
+ "my_id",
325
325
  )
326
326
 
327
327
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -338,7 +338,7 @@ describe Braintree::WebhookNotification do
338
338
  it "builds a sample notification for a settlement declined webhook" do
339
339
  sample_notification = Braintree::WebhookTesting.sample_notification(
340
340
  Braintree::WebhookNotification::Kind::TransactionSettlementDeclined,
341
- "my_id"
341
+ "my_id",
342
342
  )
343
343
 
344
344
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -357,7 +357,7 @@ describe Braintree::WebhookNotification do
357
357
  it "builds a sample notification for a merchant account approved webhook" do
358
358
  sample_notification = Braintree::WebhookTesting.sample_notification(
359
359
  Braintree::WebhookNotification::Kind::SubMerchantAccountApproved,
360
- "my_id"
360
+ "my_id",
361
361
  )
362
362
 
363
363
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -372,7 +372,7 @@ describe Braintree::WebhookNotification do
372
372
  it "builds a sample notification for a merchant account declined webhook" do
373
373
  sample_notification = Braintree::WebhookTesting.sample_notification(
374
374
  Braintree::WebhookNotification::Kind::SubMerchantAccountDeclined,
375
- "my_id"
375
+ "my_id",
376
376
  )
377
377
 
378
378
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -391,7 +391,7 @@ describe Braintree::WebhookNotification do
391
391
  it "builds a sample notification for a subscription charged successfully webhook" do
392
392
  sample_notification = Braintree::WebhookTesting.sample_notification(
393
393
  Braintree::WebhookNotification::Kind::SubscriptionChargedSuccessfully,
394
- "my_id"
394
+ "my_id",
395
395
  )
396
396
 
397
397
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -406,7 +406,7 @@ describe Braintree::WebhookNotification do
406
406
  it "builds a sample notification for a subscription charged unsuccessfully webhook" do
407
407
  sample_notification = Braintree::WebhookTesting.sample_notification(
408
408
  Braintree::WebhookNotification::Kind::SubscriptionChargedUnsuccessfully,
409
- "my_id"
409
+ "my_id",
410
410
  )
411
411
 
412
412
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -422,7 +422,7 @@ describe Braintree::WebhookNotification do
422
422
  it "includes a valid signature" do
423
423
  sample_notification = Braintree::WebhookTesting.sample_notification(
424
424
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
425
- "my_id"
425
+ "my_id",
426
426
  )
427
427
  expected_signature = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, sample_notification[:bt_payload])
428
428
 
@@ -434,7 +434,7 @@ describe Braintree::WebhookNotification do
434
434
  it "builds a sample notification for an account_updater_daily_report webhook" do
435
435
  sample_notification = Braintree::WebhookTesting.sample_notification(
436
436
  Braintree::WebhookNotification::Kind::AccountUpdaterDailyReport,
437
- "my_id"
437
+ "my_id",
438
438
  )
439
439
 
440
440
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -449,44 +449,44 @@ describe Braintree::WebhookNotification do
449
449
  it "builds a sample notification for a GrantorUpdatedGrantedPaymentMethod webhook" do
450
450
  sample_notification = Braintree::WebhookTesting.sample_notification(
451
451
  Braintree::WebhookNotification::Kind::GrantorUpdatedGrantedPaymentMethod,
452
- "my_id"
452
+ "my_id",
453
453
  )
454
454
 
455
455
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
456
456
  update = notification.granted_payment_instrument_update
457
457
 
458
458
  notification.kind.should == Braintree::WebhookNotification::Kind::GrantorUpdatedGrantedPaymentMethod
459
- update.grant_owner_merchant_id.should == 'vczo7jqrpwrsi2px'
460
- update.grant_recipient_merchant_id.should == 'cf0i8wgarszuy6hc'
461
- update.payment_method_nonce.should == 'ee257d98-de40-47e8-96b3-a6954ea7a9a4'
462
- update.token.should == 'abc123z'
463
- update.updated_fields.should == ['expiration-month', 'expiration-year']
459
+ update.grant_owner_merchant_id.should == "vczo7jqrpwrsi2px"
460
+ update.grant_recipient_merchant_id.should == "cf0i8wgarszuy6hc"
461
+ update.payment_method_nonce.should == "ee257d98-de40-47e8-96b3-a6954ea7a9a4"
462
+ update.token.should == "abc123z"
463
+ update.updated_fields.should == ["expiration-month", "expiration-year"]
464
464
  end
465
465
 
466
466
  it "builds a sample notification for a RecipientUpdatedGrantedPaymentMethod webhook" do
467
467
  sample_notification = Braintree::WebhookTesting.sample_notification(
468
468
  Braintree::WebhookNotification::Kind::RecipientUpdatedGrantedPaymentMethod,
469
- "my_id"
469
+ "my_id",
470
470
  )
471
471
 
472
472
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
473
473
  update = notification.granted_payment_instrument_update
474
474
 
475
475
  notification.kind.should == Braintree::WebhookNotification::Kind::RecipientUpdatedGrantedPaymentMethod
476
- update.grant_owner_merchant_id.should == 'vczo7jqrpwrsi2px'
477
- update.grant_recipient_merchant_id.should == 'cf0i8wgarszuy6hc'
478
- update.payment_method_nonce.should == 'ee257d98-de40-47e8-96b3-a6954ea7a9a4'
479
- update.token.should == 'abc123z'
480
- update.updated_fields.should == ['expiration-month', 'expiration-year']
476
+ update.grant_owner_merchant_id.should == "vczo7jqrpwrsi2px"
477
+ update.grant_recipient_merchant_id.should == "cf0i8wgarszuy6hc"
478
+ update.payment_method_nonce.should == "ee257d98-de40-47e8-96b3-a6954ea7a9a4"
479
+ update.token.should == "abc123z"
480
+ update.updated_fields.should == ["expiration-month", "expiration-year"]
481
481
  end
482
482
  end
483
483
 
484
484
  context "granted_payment_instrument_revoked" do
485
485
  let(:gateway) do
486
486
  config = Braintree::Configuration.new(
487
- :merchant_id => 'merchant_id',
488
- :public_key => 'wrong_public_key',
489
- :private_key => 'wrong_private_key'
487
+ :merchant_id => "merchant_id",
488
+ :public_key => "wrong_public_key",
489
+ :private_key => "wrong_private_key",
490
490
  )
491
491
  Braintree::Gateway.new(config)
492
492
  end
@@ -618,7 +618,7 @@ describe Braintree::WebhookNotification do
618
618
  it "builds a sample notification for a payment_method_revoked_by_customer webhook" do
619
619
  sample_notification = Braintree::WebhookTesting.sample_notification(
620
620
  Braintree::WebhookNotification::Kind::PaymentMethodRevokedByCustomer,
621
- "my_payment_method_token"
621
+ "my_payment_method_token",
622
622
  )
623
623
 
624
624
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -635,7 +635,7 @@ describe Braintree::WebhookNotification do
635
635
  it "builds a sample notification for a local_payment webhook" do
636
636
  sample_notification = Braintree::WebhookTesting.sample_notification(
637
637
  Braintree::WebhookNotification::Kind::LocalPaymentCompleted,
638
- "my_id"
638
+ "my_id",
639
639
  )
640
640
 
641
641
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
@@ -652,6 +652,22 @@ describe Braintree::WebhookNotification do
652
652
  end
653
653
  end
654
654
 
655
+
656
+ context "local_payment_reversed" do
657
+ it "builds a sample notification for a local_payment webhook" do
658
+ sample_notification = Braintree::WebhookTesting.sample_notification(
659
+ Braintree::WebhookNotification::Kind::LocalPaymentReversed,
660
+ "my_id",
661
+ )
662
+
663
+ notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
664
+ notification.kind.should == Braintree::WebhookNotification::Kind::LocalPaymentReversed
665
+
666
+ local_payment_reversed = notification.local_payment_reversed
667
+ local_payment_reversed.payment_id.should == "PAY-XYZ123"
668
+ end
669
+ end
670
+
655
671
  describe "parse" do
656
672
  it "raises InvalidSignature error when the signature is nil" do
657
673
  expect do
@@ -668,7 +684,7 @@ describe Braintree::WebhookNotification do
668
684
  it "raises InvalidSignature error when the signature is completely invalid" do
669
685
  sample_notification = Braintree::WebhookTesting.sample_notification(
670
686
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
671
- "my_id"
687
+ "my_id",
672
688
  )
673
689
 
674
690
  expect do
@@ -679,13 +695,13 @@ describe Braintree::WebhookNotification do
679
695
  it "raises InvalidSignature error with a message when the public key is not found" do
680
696
  sample_notification = Braintree::WebhookTesting.sample_notification(
681
697
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
682
- "my_id"
698
+ "my_id",
683
699
  )
684
700
 
685
701
  config = Braintree::Configuration.new(
686
- :merchant_id => 'merchant_id',
687
- :public_key => 'wrong_public_key',
688
- :private_key => 'wrong_private_key'
702
+ :merchant_id => "merchant_id",
703
+ :public_key => "wrong_public_key",
704
+ :private_key => "wrong_private_key",
689
705
  )
690
706
  gateway = Braintree::Gateway.new(config)
691
707
 
@@ -697,7 +713,7 @@ describe Braintree::WebhookNotification do
697
713
  it "raises InvalidSignature error if the payload has been changed" do
698
714
  sample_notification = Braintree::WebhookTesting.sample_notification(
699
715
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
700
- "my_id"
716
+ "my_id",
701
717
  )
702
718
 
703
719
  expect do
@@ -708,7 +724,7 @@ describe Braintree::WebhookNotification do
708
724
  it "raises InvalidSignature error with a message complaining about invalid characters" do
709
725
  sample_notification = Braintree::WebhookTesting.sample_notification(
710
726
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
711
- "my_id"
727
+ "my_id",
712
728
  )
713
729
 
714
730
  expect do
@@ -719,7 +735,7 @@ describe Braintree::WebhookNotification do
719
735
  it "allows all valid characters" do
720
736
  sample_notification = Braintree::WebhookTesting.sample_notification(
721
737
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
722
- "my_id"
738
+ "my_id",
723
739
  )
724
740
 
725
741
  sample_notification[:bt_payload] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+=/\n"
@@ -736,7 +752,7 @@ describe Braintree::WebhookNotification do
736
752
  it "retries a payload with a newline" do
737
753
  sample_notification = Braintree::WebhookTesting.sample_notification(
738
754
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
739
- "my_id"
755
+ "my_id",
740
756
  )
741
757
 
742
758
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload].rstrip)
@@ -751,7 +767,7 @@ describe Braintree::WebhookNotification do
751
767
  it "returns true for check webhook kinds" do
752
768
  sample_notification = Braintree::WebhookTesting.sample_notification(
753
769
  Braintree::WebhookNotification::Kind::Check,
754
- nil
770
+ nil,
755
771
  )
756
772
 
757
773
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload].rstrip)
@@ -762,7 +778,7 @@ describe Braintree::WebhookNotification do
762
778
  it "returns false for non-check webhook kinds" do
763
779
  sample_notification = Braintree::WebhookTesting.sample_notification(
764
780
  Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
765
- nil
781
+ nil,
766
782
  )
767
783
 
768
784
  notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload].rstrip)