braintree 2.4.0 → 2.5.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.
- data/README.rdoc +4 -0
- data/lib/braintree.rb +43 -32
- data/lib/braintree/add_on.rb +4 -0
- data/lib/braintree/address.rb +18 -72
- data/lib/braintree/address_gateway.rb +76 -0
- data/lib/braintree/advanced_search.rb +31 -13
- data/lib/braintree/base_module.rb +6 -0
- data/lib/braintree/configuration.rb +57 -39
- data/lib/braintree/credit_card.rb +75 -129
- data/lib/braintree/credit_card_gateway.rb +133 -0
- data/lib/braintree/credit_card_verification.rb +8 -0
- data/lib/braintree/customer.rb +70 -123
- data/lib/braintree/customer_gateway.rb +121 -0
- data/lib/braintree/digest.rb +2 -2
- data/lib/braintree/discount.rb +4 -0
- data/lib/braintree/error_codes.rb +50 -5
- data/lib/braintree/error_result.rb +4 -18
- data/lib/braintree/errors.rb +1 -2
- data/lib/braintree/exceptions.rb +11 -16
- data/lib/braintree/gateway.rb +39 -0
- data/lib/braintree/http.rb +30 -26
- data/lib/braintree/modification.rb +23 -0
- data/lib/braintree/resource_collection.rb +1 -1
- data/lib/braintree/subscription.rb +29 -129
- data/lib/braintree/subscription_gateway.rb +122 -0
- data/lib/braintree/subscription_search.rb +6 -7
- data/lib/braintree/successful_result.rb +1 -12
- data/lib/braintree/test/credit_card_numbers.rb +4 -2
- data/lib/braintree/test/transaction_amounts.rb +3 -0
- data/lib/braintree/transaction.rb +83 -243
- data/lib/braintree/transaction/credit_card_details.rb +4 -4
- data/lib/braintree/transaction_gateway.rb +124 -0
- data/lib/braintree/transaction_search.rb +5 -3
- data/lib/braintree/transparent_redirect.rb +19 -112
- data/lib/braintree/transparent_redirect_gateway.rb +105 -0
- data/lib/braintree/util.rb +4 -0
- data/lib/braintree/validation_error.rb +1 -0
- data/lib/braintree/validation_error_collection.rb +5 -23
- data/lib/braintree/version.rb +2 -2
- data/lib/braintree/xml/parser.rb +1 -1
- data/lib/braintree/xml/rexml.rb +2 -2
- data/spec/integration/braintree/advanced_search_spec.rb +532 -0
- data/spec/integration/braintree/credit_card_spec.rb +5 -8
- data/spec/integration/braintree/http_spec.rb +53 -39
- data/spec/integration/braintree/subscription_spec.rb +678 -213
- data/spec/integration/braintree/transaction_search_spec.rb +318 -43
- data/spec/integration/braintree/transaction_spec.rb +134 -3
- data/spec/integration/braintree/transparent_redirect_spec.rb +1 -1
- data/spec/spec_helper.rb +55 -4
- data/spec/unit/braintree/address_spec.rb +8 -8
- data/spec/unit/braintree/base_module_spec.rb +1 -1
- data/spec/unit/braintree/configuration_spec.rb +34 -29
- data/spec/unit/braintree/credit_card_spec.rb +14 -12
- data/spec/unit/braintree/credit_card_verification_spec.rb +16 -0
- data/spec/unit/braintree/customer_spec.rb +10 -8
- data/spec/unit/braintree/digest_spec.rb +8 -17
- data/spec/unit/braintree/error_result_spec.rb +12 -2
- data/spec/unit/braintree/http_spec.rb +2 -2
- data/spec/unit/braintree/subscription_search_spec.rb +77 -0
- data/spec/unit/braintree/subscription_spec.rb +16 -8
- data/spec/unit/braintree/transaction_spec.rb +17 -12
- data/spec/unit/braintree/transparent_redirect_spec.rb +12 -12
- data/spec/unit/braintree/util_spec.rb +24 -0
- data/spec/unit/braintree/xml/parser_spec.rb +1 -1
- data/spec/unit/braintree_spec.rb +1 -1
- metadata +16 -5
@@ -3,12 +3,13 @@ require File.dirname(__FILE__) + "/../spec_helper"
|
|
3
3
|
describe Braintree::Customer do
|
4
4
|
describe "inspect" do
|
5
5
|
it "includes the id first" do
|
6
|
-
output = Braintree::Customer._new({:first_name => 'Dan', :id => '1234'}).inspect
|
6
|
+
output = Braintree::Customer._new(:gateway, {:first_name => 'Dan', :id => '1234'}).inspect
|
7
7
|
output.should include("#<Braintree::Customer id: \"1234\",")
|
8
8
|
end
|
9
9
|
|
10
10
|
it "includes all customer attributes" do
|
11
11
|
customer = Braintree::Customer._new(
|
12
|
+
:gateway,
|
12
13
|
:company => "Company",
|
13
14
|
:email => "e@mail.com",
|
14
15
|
:fax => "483-438-5821",
|
@@ -50,7 +51,7 @@ describe Braintree::Customer do
|
|
50
51
|
|
51
52
|
describe "self.create_signature" do
|
52
53
|
it "should be what we expect" do
|
53
|
-
Braintree::
|
54
|
+
Braintree::CustomerGateway._create_signature.should == [
|
54
55
|
:company,
|
55
56
|
:email,
|
56
57
|
:fax,
|
@@ -90,7 +91,7 @@ describe Braintree::Customer do
|
|
90
91
|
|
91
92
|
describe "self.update_signature" do
|
92
93
|
it "should be what we expect" do
|
93
|
-
Braintree::
|
94
|
+
Braintree::CustomerGateway._update_signature.should == [
|
94
95
|
:company,
|
95
96
|
:email,
|
96
97
|
:fax,
|
@@ -144,23 +145,23 @@ describe Braintree::Customer do
|
|
144
145
|
|
145
146
|
describe "==" do
|
146
147
|
it "returns true when given a customer with the same id" do
|
147
|
-
first = Braintree::Customer._new(:id => 123)
|
148
|
-
second = Braintree::Customer._new(:id => 123)
|
148
|
+
first = Braintree::Customer._new(:gateway, :id => 123)
|
149
|
+
second = Braintree::Customer._new(:gateway, :id => 123)
|
149
150
|
|
150
151
|
first.should == second
|
151
152
|
second.should == first
|
152
153
|
end
|
153
154
|
|
154
155
|
it "returns false when given a customer with a different id" do
|
155
|
-
first = Braintree::Customer._new(:id => 123)
|
156
|
-
second = Braintree::Customer._new(:id => 124)
|
156
|
+
first = Braintree::Customer._new(:gateway, :id => 123)
|
157
|
+
second = Braintree::Customer._new(:gateway, :id => 124)
|
157
158
|
|
158
159
|
first.should_not == second
|
159
160
|
second.should_not == first
|
160
161
|
end
|
161
162
|
|
162
163
|
it "returns false when not given a customer" do
|
163
|
-
customer = Braintree::Customer._new(:id => 123)
|
164
|
+
customer = Braintree::Customer._new(:gateway, :id => 123)
|
164
165
|
customer.should_not == "not a customer"
|
165
166
|
end
|
166
167
|
end
|
@@ -168,6 +169,7 @@ describe Braintree::Customer do
|
|
168
169
|
describe "initialize" do
|
169
170
|
it "converts payment method hashes into payment method objects" do
|
170
171
|
customer = Braintree::Customer._new(
|
172
|
+
:gateway,
|
171
173
|
:credit_cards => [
|
172
174
|
{:token => "pm1"},
|
173
175
|
{:token => "pm2"}
|
@@ -3,29 +3,20 @@ require File.dirname(__FILE__) + "/../spec_helper"
|
|
3
3
|
describe Braintree::Digest do
|
4
4
|
describe "self.hexdigest" do
|
5
5
|
it "returns the sha1 hmac of the input string (test case 6 from RFC 2202)" do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Braintree::Digest.hexdigest(data).should == "aa4ae5e15272d00e95705637ce8a3b55ed402112"
|
11
|
-
ensure
|
12
|
-
Braintree::Configuration.private_key = original_key
|
13
|
-
end
|
6
|
+
original_key = Braintree::Configuration.private_key
|
7
|
+
private_key = "\xaa" * 80
|
8
|
+
data = "Test Using Larger Than Block-Size Key - Hash Key First"
|
9
|
+
Braintree::Digest.hexdigest(private_key, data).should == "aa4ae5e15272d00e95705637ce8a3b55ed402112"
|
14
10
|
end
|
15
11
|
|
16
12
|
it "returns the sha1 hmac of the input string (test case 7 from RFC 2202)" do
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
data = "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
|
21
|
-
Braintree::Digest.hexdigest(data).should == "e8e99d0f45237d786d6bbaa7965c7808bbff1a91"
|
22
|
-
ensure
|
23
|
-
Braintree::Configuration.private_key = original_key
|
24
|
-
end
|
13
|
+
private_key = "\xaa" * 80
|
14
|
+
data = "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
|
15
|
+
Braintree::Digest.hexdigest(private_key, data).should == "e8e99d0f45237d786d6bbaa7965c7808bbff1a91"
|
25
16
|
end
|
26
17
|
|
27
18
|
it "doesn't blow up if message is nil" do
|
28
|
-
expect { Braintree::Digest.hexdigest(nil) }.to_not raise_error
|
19
|
+
expect { Braintree::Digest.hexdigest("key", nil) }.to_not raise_error
|
29
20
|
end
|
30
21
|
end
|
31
22
|
end
|
@@ -5,7 +5,13 @@ describe Braintree::ErrorResult do
|
|
5
5
|
it "ignores data other than params, errors, and message" do
|
6
6
|
# so that we can add more data into the response in the future without breaking the client lib
|
7
7
|
expect do
|
8
|
-
result = Braintree::ErrorResult.new(
|
8
|
+
result = Braintree::ErrorResult.new(
|
9
|
+
:gateway,
|
10
|
+
:params => "params",
|
11
|
+
:errors => {:errors => []},
|
12
|
+
:extra => "is ignored",
|
13
|
+
:message => "foo bar"
|
14
|
+
)
|
9
15
|
end.to_not raise_error
|
10
16
|
end
|
11
17
|
end
|
@@ -20,12 +26,13 @@ describe Braintree::ErrorResult do
|
|
20
26
|
}
|
21
27
|
}
|
22
28
|
}
|
23
|
-
result = Braintree::ErrorResult.new(:params => "params", :errors => errors)
|
29
|
+
result = Braintree::ErrorResult.new(:gateway, :params => "params", :errors => errors)
|
24
30
|
result.inspect.should == "#<Braintree::ErrorResult params:{...} errors:<level1:[(code1) message], level1/level2:[(code2) message2]>>"
|
25
31
|
end
|
26
32
|
|
27
33
|
it "includes the credit_card_verification if there is one" do
|
28
34
|
result = Braintree::ErrorResult.new(
|
35
|
+
:gateway,
|
29
36
|
:params => "params",
|
30
37
|
:errors => {},
|
31
38
|
:verification => {},
|
@@ -36,6 +43,7 @@ describe Braintree::ErrorResult do
|
|
36
43
|
|
37
44
|
it "does not include the credit_card_verification if there isn't one" do
|
38
45
|
result = Braintree::ErrorResult.new(
|
46
|
+
:gateway,
|
39
47
|
:params => "params",
|
40
48
|
:errors => {},
|
41
49
|
:verification => nil,
|
@@ -46,6 +54,7 @@ describe Braintree::ErrorResult do
|
|
46
54
|
|
47
55
|
it "includes the transaction if there is one" do
|
48
56
|
result = Braintree::ErrorResult.new(
|
57
|
+
:gateway,
|
49
58
|
:params => "params",
|
50
59
|
:errors => {},
|
51
60
|
:verification => nil,
|
@@ -56,6 +65,7 @@ describe Braintree::ErrorResult do
|
|
56
65
|
|
57
66
|
it "does not include the transaction if there isn't one" do
|
58
67
|
result = Braintree::ErrorResult.new(
|
68
|
+
:gateway,
|
59
69
|
:params => "params",
|
60
70
|
:errors => {},
|
61
71
|
:verification => nil,
|
@@ -15,7 +15,7 @@ END
|
|
15
15
|
[Braintree] <last-name>Doe</last-name>
|
16
16
|
[Braintree] </customer>
|
17
17
|
END
|
18
|
-
Braintree::Http._format_and_sanitize_body_for_log(input_xml).should == expected_xml
|
18
|
+
Braintree::Http.new(:config)._format_and_sanitize_body_for_log(input_xml).should == expected_xml
|
19
19
|
end
|
20
20
|
|
21
21
|
it "sanitizes credit card number and cvv" do
|
@@ -36,7 +36,7 @@ END
|
|
36
36
|
[Braintree] <cvv>***</cvv>
|
37
37
|
[Braintree] </customer>
|
38
38
|
END
|
39
|
-
Braintree::Http._format_and_sanitize_body_for_log(input_xml).should == expected_xml
|
39
|
+
Braintree::Http.new(:config)._format_and_sanitize_body_for_log(input_xml).should == expected_xml
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -10,6 +10,7 @@ module Braintree
|
|
10
10
|
search.status.in(
|
11
11
|
Subscription::Status::Active,
|
12
12
|
Subscription::Status::Canceled,
|
13
|
+
Subscription::Status::Expired,
|
13
14
|
Subscription::Status::PastDue
|
14
15
|
)
|
15
16
|
end.should_not raise_error
|
@@ -31,5 +32,81 @@ module Braintree
|
|
31
32
|
search.to_hash.should == {:days_past_due => {:is => "30"}}
|
32
33
|
end
|
33
34
|
end
|
35
|
+
|
36
|
+
context "merchant_account_id" do
|
37
|
+
it "builds a hash using the in operator" do
|
38
|
+
search = SubscriptionSearch.new
|
39
|
+
search.merchant_account_id.in "ma_id1", "ma_id2"
|
40
|
+
|
41
|
+
search.to_hash.should == {:merchant_account_id => ["ma_id1", "ma_id2"]}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "plan_id" do
|
46
|
+
it "starts_with" do
|
47
|
+
search = SubscriptionSearch.new
|
48
|
+
search.plan_id.starts_with "plan_"
|
49
|
+
|
50
|
+
search.to_hash.should == {:plan_id => {:starts_with => "plan_"}}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "ends_with" do
|
54
|
+
search = SubscriptionSearch.new
|
55
|
+
search.plan_id.ends_with "_id"
|
56
|
+
|
57
|
+
search.to_hash.should == {:plan_id => {:ends_with => "_id"}}
|
58
|
+
end
|
59
|
+
|
60
|
+
it "is" do
|
61
|
+
search = SubscriptionSearch.new
|
62
|
+
search.plan_id.is "p_id"
|
63
|
+
|
64
|
+
search.to_hash.should == {:plan_id => {:is => "p_id"}}
|
65
|
+
end
|
66
|
+
|
67
|
+
it "is_not" do
|
68
|
+
search = SubscriptionSearch.new
|
69
|
+
search.plan_id.is_not "p_id"
|
70
|
+
|
71
|
+
search.to_hash.should == {:plan_id => {:is_not => "p_id"}}
|
72
|
+
end
|
73
|
+
|
74
|
+
it "contains" do
|
75
|
+
search = SubscriptionSearch.new
|
76
|
+
search.plan_id.contains "p_id"
|
77
|
+
|
78
|
+
search.to_hash.should == {:plan_id => {:contains => "p_id"}}
|
79
|
+
end
|
80
|
+
|
81
|
+
it "in" do
|
82
|
+
search = SubscriptionSearch.new
|
83
|
+
search.plan_id.in ["plan1", "plan2"]
|
84
|
+
|
85
|
+
search.to_hash.should == {:plan_id => ["plan1", "plan2"]}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "days_past_due" do
|
90
|
+
it "is a range node" do
|
91
|
+
search = SubscriptionSearch.new
|
92
|
+
search.days_past_due.should be_kind_of(Braintree::AdvancedSearch::RangeNode)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "billing_cycles_remaining" do
|
97
|
+
it "is a range node" do
|
98
|
+
search = SubscriptionSearch.new
|
99
|
+
search.billing_cycles_remaining.should be_kind_of(Braintree::AdvancedSearch::RangeNode)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "id" do
|
104
|
+
it "is" do
|
105
|
+
search = SubscriptionSearch.new
|
106
|
+
search.id.is "s_id"
|
107
|
+
|
108
|
+
search.to_hash.should == {:id => {:is => "s_id"}}
|
109
|
+
end
|
110
|
+
end
|
34
111
|
end
|
35
112
|
end
|
@@ -1,15 +1,23 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/../spec_helper"
|
2
2
|
|
3
3
|
describe Braintree::Subscription do
|
4
|
+
def default_params
|
5
|
+
{
|
6
|
+
:add_ons => [],
|
7
|
+
:discounts => [],
|
8
|
+
:transactions => []
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
4
12
|
context "price" do
|
5
13
|
it "accepts price as either a String or a BigDecimal" do
|
6
|
-
Braintree::Subscription._new(:price => "12.34"
|
7
|
-
Braintree::Subscription._new(:price => BigDecimal.new("12.34")
|
14
|
+
Braintree::Subscription._new(:gateway, default_params.merge(:price => "12.34")).price.should == BigDecimal.new("12.34")
|
15
|
+
Braintree::Subscription._new(:gateway, default_params.merge(:price => BigDecimal.new("12.34"))).price.should == BigDecimal.new("12.34")
|
8
16
|
end
|
9
17
|
|
10
18
|
it "blows up if price is not a string or BigDecimal" do
|
11
19
|
expect {
|
12
|
-
Braintree::Subscription._new(:price => 12.34
|
20
|
+
Braintree::Subscription._new(:gateway, default_params.merge(:price => 12.34))
|
13
21
|
}.to raise_error(/Argument must be a String or BigDecimal/)
|
14
22
|
end
|
15
23
|
end
|
@@ -26,19 +34,19 @@ describe Braintree::Subscription do
|
|
26
34
|
|
27
35
|
describe "==" do
|
28
36
|
it "returns true for subscriptions with the same id" do
|
29
|
-
subscription1 = Braintree::Subscription._new(:id => "123"
|
30
|
-
subscription2 = Braintree::Subscription._new(:id => "123"
|
37
|
+
subscription1 = Braintree::Subscription._new(:gateway, default_params.merge(:id => "123"))
|
38
|
+
subscription2 = Braintree::Subscription._new(:gateway, default_params.merge(:id => "123"))
|
31
39
|
subscription1.should == subscription2
|
32
40
|
end
|
33
41
|
|
34
42
|
it "returns false for subscriptions with different ids" do
|
35
|
-
subscription1 = Braintree::Subscription._new(:id => "123"
|
36
|
-
subscription2 = Braintree::Subscription._new(:id => "not_123"
|
43
|
+
subscription1 = Braintree::Subscription._new(:gateway, default_params.merge(:id => "123"))
|
44
|
+
subscription2 = Braintree::Subscription._new(:gateway, default_params.merge(:id => "not_123"))
|
37
45
|
subscription1.should_not == subscription2
|
38
46
|
end
|
39
47
|
|
40
48
|
it "returns false if not comparing to a subscription" do
|
41
|
-
subscription = Braintree::Subscription._new(:id => "123"
|
49
|
+
subscription = Braintree::Subscription._new(:gateway, default_params.merge(:id => "123"))
|
42
50
|
subscription.should_not == "not a subscription"
|
43
51
|
end
|
44
52
|
end
|
@@ -19,7 +19,7 @@ describe Braintree::Transaction do
|
|
19
19
|
|
20
20
|
describe "self.create_transaction_url" do
|
21
21
|
it "returns the url" do
|
22
|
-
port = Braintree::Configuration.port
|
22
|
+
port = Braintree::Configuration.instantiate.port
|
23
23
|
Braintree::Transaction.create_transaction_url.should == "http://localhost:#{port}/merchants/integration_merchant_id/transactions/all/create_via_transparent_redirect_request"
|
24
24
|
end
|
25
25
|
end
|
@@ -35,6 +35,7 @@ describe Braintree::Transaction do
|
|
35
35
|
describe "initialize" do
|
36
36
|
it "sets up customer attributes in customer_details" do
|
37
37
|
transaction = Braintree::Transaction._new(
|
38
|
+
:gateway,
|
38
39
|
:customer => {
|
39
40
|
:id => "123",
|
40
41
|
:first_name => "Adam",
|
@@ -58,6 +59,7 @@ describe Braintree::Transaction do
|
|
58
59
|
|
59
60
|
it "sets up credit card attributes in credit_card_details" do
|
60
61
|
transaction = Braintree::Transaction._new(
|
62
|
+
:gateway,
|
61
63
|
:credit_card => {
|
62
64
|
:token => "mzg2",
|
63
65
|
:bin => "411111",
|
@@ -80,6 +82,7 @@ describe Braintree::Transaction do
|
|
80
82
|
it "sets up history attributes in status_history" do
|
81
83
|
time = Time.utc(2010,1,14)
|
82
84
|
transaction = Braintree::Transaction._new(
|
85
|
+
:gateway,
|
83
86
|
:status_history => [
|
84
87
|
{ :timestamp => time, :amount => "12.00", :transaction_source => "API",
|
85
88
|
:user => "larry", :status => Braintree::Transaction::Status::Authorized },
|
@@ -97,18 +100,19 @@ describe Braintree::Transaction do
|
|
97
100
|
|
98
101
|
it "handles receiving custom as an empty string" do
|
99
102
|
transaction = Braintree::Transaction._new(
|
103
|
+
:gateway,
|
100
104
|
:custom => "\n "
|
101
105
|
)
|
102
106
|
end
|
103
107
|
|
104
108
|
it "accepts amount as either a String or a BigDecimal" do
|
105
|
-
Braintree::Transaction._new(:amount => "12.34").amount.should == BigDecimal.new("12.34")
|
106
|
-
Braintree::Transaction._new(:amount => BigDecimal.new("12.34")).amount.should == BigDecimal.new("12.34")
|
109
|
+
Braintree::Transaction._new(:gateway, :amount => "12.34").amount.should == BigDecimal.new("12.34")
|
110
|
+
Braintree::Transaction._new(:gateway, :amount => BigDecimal.new("12.34")).amount.should == BigDecimal.new("12.34")
|
107
111
|
end
|
108
112
|
|
109
113
|
it "blows up if amount is not a string or BigDecimal" do
|
110
114
|
expect {
|
111
|
-
Braintree::Transaction._new(:amount => 12.34)
|
115
|
+
Braintree::Transaction._new(:gateway, :amount => 12.34)
|
112
116
|
}.to raise_error(/Argument must be a String or BigDecimal/)
|
113
117
|
end
|
114
118
|
end
|
@@ -116,6 +120,7 @@ describe Braintree::Transaction do
|
|
116
120
|
describe "inspect" do
|
117
121
|
it "includes the id, type, amount, and status first" do
|
118
122
|
transaction = Braintree::Transaction._new(
|
123
|
+
:gateway,
|
119
124
|
:id => "1234",
|
120
125
|
:type => "sale",
|
121
126
|
:amount => "100.00",
|
@@ -128,29 +133,29 @@ describe Braintree::Transaction do
|
|
128
133
|
|
129
134
|
describe "==" do
|
130
135
|
it "returns true for transactions with the same id" do
|
131
|
-
first = Braintree::Transaction._new(:id => 123)
|
132
|
-
second = Braintree::Transaction._new(:id => 123)
|
136
|
+
first = Braintree::Transaction._new(:gateway, :id => 123)
|
137
|
+
second = Braintree::Transaction._new(:gateway, :id => 123)
|
133
138
|
|
134
139
|
first.should == second
|
135
140
|
second.should == first
|
136
141
|
end
|
137
142
|
|
138
143
|
it "returns false for transactions with different ids" do
|
139
|
-
first = Braintree::Transaction._new(:id => 123)
|
140
|
-
second = Braintree::Transaction._new(:id => 124)
|
144
|
+
first = Braintree::Transaction._new(:gateway, :id => 123)
|
145
|
+
second = Braintree::Transaction._new(:gateway, :id => 124)
|
141
146
|
|
142
147
|
first.should_not == second
|
143
148
|
second.should_not == first
|
144
149
|
end
|
145
150
|
|
146
151
|
it "returns false when comparing to nil" do
|
147
|
-
Braintree::Transaction._new({}).should_not == nil
|
152
|
+
Braintree::Transaction._new(:gateway, {}).should_not == nil
|
148
153
|
end
|
149
154
|
|
150
155
|
it "returns false when comparing to non-transactions" do
|
151
156
|
same_id_different_object = Object.new
|
152
157
|
def same_id_different_object.id; 123; end
|
153
|
-
transaction = Braintree::Transaction._new(:id => 123)
|
158
|
+
transaction = Braintree::Transaction._new(:gateway, :id => 123)
|
154
159
|
transaction.should_not == same_id_different_object
|
155
160
|
end
|
156
161
|
end
|
@@ -165,12 +170,12 @@ describe Braintree::Transaction do
|
|
165
170
|
|
166
171
|
describe "refunded?" do
|
167
172
|
it "is true if the transaciton has been refunded" do
|
168
|
-
transaction = Braintree::Transaction._new(:refund_id => "123")
|
173
|
+
transaction = Braintree::Transaction._new(:gateway, :refund_id => "123")
|
169
174
|
transaction.refunded?.should == true
|
170
175
|
end
|
171
176
|
|
172
177
|
it "is false if the transaciton has not been refunded" do
|
173
|
-
transaction = Braintree::Transaction._new(:refund_id => nil)
|
178
|
+
transaction = Braintree::Transaction._new(:gateway, :refund_id => nil)
|
174
179
|
transaction.refunded?.should == false
|
175
180
|
end
|
176
181
|
end
|
@@ -24,10 +24,10 @@ describe Braintree::TransparentRedirect do
|
|
24
24
|
describe "self.parse_and_validate_query_string" do
|
25
25
|
it "returns the parsed query string params if the hash is valid" do
|
26
26
|
query_string_without_hash = "one=1&two=2&http_status=200"
|
27
|
-
hash = Braintree::Digest.hexdigest(query_string_without_hash)
|
27
|
+
hash = Braintree::Digest.hexdigest(Braintree::Configuration.private_key, query_string_without_hash)
|
28
28
|
|
29
29
|
query_string_with_hash = "#{query_string_without_hash}&hash=#{hash}"
|
30
|
-
result = Braintree::
|
30
|
+
result = Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string query_string_with_hash
|
31
31
|
result.should == {:one => "1", :two => "2", :http_status => "200", :hash => hash}
|
32
32
|
end
|
33
33
|
|
@@ -37,49 +37,49 @@ describe Braintree::TransparentRedirect do
|
|
37
37
|
|
38
38
|
query_string_with_hash = "#{query_string_without_hash}&hash=#{hash}"
|
39
39
|
expect do
|
40
|
-
Braintree::
|
40
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string query_string_with_hash
|
41
41
|
end.to raise_error(Braintree::ForgedQueryString)
|
42
42
|
end
|
43
43
|
|
44
44
|
it "raises Braintree::ForgedQueryString if hash is missing from the query string" do
|
45
45
|
expect do
|
46
|
-
Braintree::
|
46
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string "http_status=200&query_string=without_a_hash"
|
47
47
|
end.to raise_error(Braintree::ForgedQueryString)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "raises an AuthenticationError if authentication fails" do
|
51
51
|
expect do
|
52
|
-
Braintree::
|
52
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=401")
|
53
53
|
end.to raise_error(Braintree::AuthenticationError)
|
54
54
|
end
|
55
55
|
|
56
56
|
it "raises an AuthorizationError if authorization fails" do
|
57
57
|
expect do
|
58
|
-
Braintree::
|
58
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=403")
|
59
59
|
end.to raise_error(Braintree::AuthorizationError)
|
60
60
|
end
|
61
61
|
|
62
62
|
it "raises an UnexpectedError if http_status is not in query string" do
|
63
63
|
expect do
|
64
|
-
Braintree::
|
64
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("no_http_status=x")
|
65
65
|
end.to raise_error(Braintree::UnexpectedError, "expected query string to have an http_status param")
|
66
66
|
end
|
67
67
|
|
68
68
|
it "raises a ServerError if the server 500's" do
|
69
69
|
expect do
|
70
|
-
Braintree::
|
70
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=500")
|
71
71
|
end.to raise_error(Braintree::ServerError)
|
72
72
|
end
|
73
73
|
|
74
74
|
it "raises a DownForMaintenanceError if the server is down for maintenance" do
|
75
75
|
expect do
|
76
|
-
Braintree::
|
76
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=503")
|
77
77
|
end.to raise_error(Braintree::DownForMaintenanceError)
|
78
78
|
end
|
79
79
|
|
80
80
|
it "raises an UnexpectedError if some other code is returned" do
|
81
81
|
expect do
|
82
|
-
Braintree::
|
82
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string add_hash_to_query_string("http_status=600")
|
83
83
|
end.to raise_error(Braintree::UnexpectedError, "Unexpected HTTP_RESPONSE 600")
|
84
84
|
end
|
85
85
|
end
|
@@ -147,13 +147,13 @@ describe Braintree::TransparentRedirect do
|
|
147
147
|
describe "self._data" do
|
148
148
|
it "raises an exception if :redirect_url isn't given" do
|
149
149
|
expect do
|
150
|
-
Braintree::TransparentRedirect.
|
150
|
+
Braintree::TransparentRedirect.create_customer_data(:redirect_url => nil)
|
151
151
|
end.to raise_error(ArgumentError, "expected params to contain :redirect_url")
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
155
|
def add_hash_to_query_string(query_string_without_hash)
|
156
|
-
hash = Braintree::
|
156
|
+
hash = Braintree::Configuration.gateway.transparent_redirect._hash(query_string_without_hash)
|
157
157
|
query_string_without_hash + "&hash=" + hash
|
158
158
|
end
|
159
159
|
end
|