-
Notifications
You must be signed in to change notification settings - Fork 195
/
credit_card_spec.rb
150 lines (129 loc) · 5.06 KB
/
credit_card_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
require File.dirname(__FILE__) + "/../spec_helper"
describe Braintree::CreditCard do
describe "self.create" do
it "raises an exception if attributes contain an invalid key" do
expect do
Braintree::CreditCard.create(:invalid_key => 'val')
end.to raise_error(ArgumentError, "invalid keys: invalid_key")
end
end
describe "self.create_signature" do
it "should include customer_id" do
Braintree::CreditCard._create_signature.should include(:customer_id)
end
end
describe "self.update_signature" do
it "should not include customer_id" do
Braintree::CreditCard._update_signature.should_not include(:customer_id)
end
end
describe "self.create_from_transparent_redirect" do
it "raises an exception if the query string is forged" do
expect do
Braintree::CreditCard.create_from_transparent_redirect("http_status=200&forged=query_string")
end.to raise_error(Braintree::ForgedQueryString)
end
end
describe "self.create_credit_card_url" do
it "returns the url" do
port = Braintree::Configuration.port
Braintree::CreditCard.create_credit_card_url.should == "http://localhost:#{port}/merchants/integration_merchant_id/payment_methods/all/create_via_transparent_redirect_request"
end
end
describe "==" do
it "returns true if given a credit card with the same token" do
first = Braintree::CreditCard._new(:token => 123)
second = Braintree::CreditCard._new(:token => 123)
first.should == second
second.should == first
end
it "returns false if given a credit card with a different token" do
first = Braintree::CreditCard._new(:token => 123)
second = Braintree::CreditCard._new(:token => 124)
first.should_not == second
second.should_not == first
end
it "returns false if not given a credit card" do
credit_card = Braintree::CreditCard._new(:token => 123)
credit_card.should_not == "not a credit card"
end
end
describe "default?" do
it "is true if the credit card is the default credit card for the customer" do
Braintree::CreditCard._new(:default => true).default?.should == true
end
it "is false if the credit card is not the default credit card for the customer" do
Braintree::CreditCard._new(:default => false).default?.should == false
end
end
describe "expired?" do
it "is true if the payment method is this year and the month has passed" do
SpecHelper.stub_time_dot_now(Time.mktime(2009, 10, 20)) do
expired_pm = Braintree::CreditCard._new(:expiration_month => "09", :expiration_year => "2009")
expired_pm.expired?.should == true
end
end
it "is true if the payment method is in a previous year" do
expired_pm = Braintree::CreditCard._new(:expiration_month => "12", :expiration_year => (Time.now.year - 1).to_s)
expired_pm.expired?.should == true
end
it "is false if the payment method is not expired" do
not_expired_pm = Braintree::CreditCard._new(:expiration_month => "01", :expiration_year => (Time.now.year + 1).to_s)
not_expired_pm.expired?.should == false
end
end
describe "inspect" do
it "includes the token first" do
output = Braintree::CreditCard._new(:token => "cc123").inspect
output.should include("#<Braintree::CreditCard token: \"cc123\",")
end
it "includes all customer attributes" do
credit_card = Braintree::CreditCard._new(
:bin => "411111",
:card_type => "Visa",
:cardholder_name => "John Miller",
:created_at => Time.now,
:customer_id => "cid1",
:expiration_month => "01",
:expiration_year => "2020",
:last_4 => "1111",
:token => "tok1",
:updated_at => Time.now
)
output = credit_card.inspect
output.should include(%q(bin: "411111"))
output.should include(%q(card_type: "Visa"))
output.should include(%q(cardholder_name: "John Miller"))
output.should include(%q(customer_id: "cid1"))
output.should include(%q(expiration_month: "01"))
output.should include(%q(expiration_year: "2020"))
output.should include(%q(last_4: "1111"))
output.should include(%q(token: "tok1"))
output.should include(%Q(updated_at: #{credit_card.updated_at.inspect}))
output.should include(%Q(created_at: #{credit_card.created_at.inspect}))
end
end
describe "masked_number" do
it "uses the bin and last_4 to build the masked number" do
credit_card = Braintree::CreditCard._new(
:bin => "510510",
:last_4 => "5100"
)
credit_card.masked_number.should == "510510******5100"
end
end
describe "self.update" do
it "raises an exception if attributes contain an invalid key" do
expect do
Braintree::CreditCard._new({}).update(:invalid_key => 'val')
end.to raise_error(ArgumentError, "invalid keys: invalid_key")
end
end
describe "self.new" do
it "is protected" do
expect do
Braintree::CreditCard.new
end.to raise_error(NoMethodError, /protected method .new/)
end
end
end