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