/
transaction_spec.rb
166 lines (148 loc) · 6.02 KB
/
transaction_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
require File.dirname(__FILE__) + "/../spec_helper"
describe Braintree::Transaction do
describe "self.create" do
it "raises an exception if hash includes an invalid key" do
expect do
Braintree::Transaction.create(:amount => "Joe", :invalid_key => "foo")
end.to raise_error(ArgumentError, "invalid keys: invalid_key")
end
end
describe "self.create_from_transparent_redirect" do
it "raises an exception if the query string is forged" do
expect do
Braintree::Transaction.create_from_transparent_redirect("http_status=200&forged=query_string")
end.to raise_error(Braintree::ForgedQueryString)
end
end
describe "self.create_transaction_url" do
it "returns the url" do
port = Braintree::Configuration.port
Braintree::Transaction.create_transaction_url.should == "http://localhost:#{port}/merchants/integration_merchant_id/transactions/all/create_via_transparent_redirect_request"
end
end
describe "self.submit_for_settlement" do
it "raises an ArgumentError if transaction_id is an invalid format" do
expect do
Braintree::Transaction.submit_for_settlement("invalid-transaction-id")
end.to raise_error(ArgumentError, "transaction_id is invalid")
end
end
describe "initialize" do
it "sets up customer attributes in customer_details" do
transaction = Braintree::Transaction._new(
:customer => {
:id => "123",
:first_name => "Adam",
:last_name => "Taylor",
:company => "Ledner LLC",
:email => "adam.taylor@lednerllc.com",
:website => "lednerllc.com",
:phone => "1-999-652-4189 x56883",
:fax => "012-161-8055"
}
)
transaction.customer_details.id.should == "123"
transaction.customer_details.first_name.should == "Adam"
transaction.customer_details.last_name.should == "Taylor"
transaction.customer_details.company.should == "Ledner LLC"
transaction.customer_details.email.should == "adam.taylor@lednerllc.com"
transaction.customer_details.website.should == "lednerllc.com"
transaction.customer_details.phone.should == "1-999-652-4189 x56883"
transaction.customer_details.fax.should == "012-161-8055"
end
it "sets up credit card attributes in credit_card_details" do
transaction = Braintree::Transaction._new(
:credit_card => {
:token => "mzg2",
:bin => "411111",
:last_4 => "1111",
:card_type => "Visa",
:expiration_month => "08",
:expiration_year => "2009",
:customer_location => "US"
}
)
transaction.credit_card_details.token.should == "mzg2"
transaction.credit_card_details.bin.should == "411111"
transaction.credit_card_details.last_4.should == "1111"
transaction.credit_card_details.card_type.should == "Visa"
transaction.credit_card_details.expiration_month.should == "08"
transaction.credit_card_details.expiration_year.should == "2009"
transaction.credit_card_details.customer_location.should == "US"
end
it "sets up history attributes in status_history" do
time = Time.utc(2010,1,14)
transaction = Braintree::Transaction._new(
:status_history => [
{ :timestamp => time, :amount => "12.00", :transaction_source => "API",
:user => "larry", :status => "authorized" },
{ :timestamp => Time.utc(2010,1,15), :amount => "12.00", :transaction_source => "API",
:user => "curly", :status => "scheduled_for_settlement"}
])
transaction.status_history.size.should == 2
transaction.status_history[0].user.should == "larry"
transaction.status_history[0].amount.should == "12.00"
transaction.status_history[0].status.should == "authorized"
transaction.status_history[0].transaction_source.should == "API"
transaction.status_history[0].timestamp.should == time
transaction.status_history[1].user.should == "curly"
end
it "handles receiving custom as an empty string" do
transaction = Braintree::Transaction._new(
:custom => "\n "
)
end
it "accepts amount as either a String or a BigDecimal" do
Braintree::Transaction._new(:amount => "12.34").amount.should == BigDecimal.new("12.34")
Braintree::Transaction._new(:amount => BigDecimal.new("12.34")).amount.should == BigDecimal.new("12.34")
end
it "blows up if amount is not a string or BigDecimal" do
expect {
Braintree::Transaction._new(:amount => 12.34)
}.to raise_error(/Argument must be a String or BigDecimal/)
end
end
describe "inspect" do
it "includes the id, type, amount, and status first" do
transaction = Braintree::Transaction._new(
:id => "1234",
:type => "sale",
:amount => "100.00",
:status => "authorized"
)
output = transaction.inspect
output.should include(%Q(#<Braintree::Transaction id: "1234", type: "sale", amount: "100.0", status: "authorized"))
end
end
describe "==" do
it "returns true when it should" do
first = Braintree::Transaction._new(:id => 123)
second = Braintree::Transaction._new(:id => 123)
first.should == second
second.should == first
end
it "returns false when it should" do
first = Braintree::Transaction._new(:id => 123)
second = Braintree::Transaction._new(:id => 124)
first.should_not == second
second.should_not == first
end
end
describe "new" do
it "is protected" do
expect do
Braintree::Transaction.new
end.to raise_error(NoMethodError, /protected method .new/)
end
end
describe "refunded?" do
it "is true if the transaciton has been refunded" do
transaction = Braintree::Transaction._new(:refund_id => "123")
transaction.refunded?.should == true
end
it "is false if the transaciton has not been refunded" do
transaction = Braintree::Transaction._new(:refund_id => nil)
transaction.refunded?.should == false
end
end
end