1# frozen_string_literal: true
2
3require "test_helper"
4require "payment_methods"
5
6class PaymentMethodsTest < Minitest::Test
7 def test_for
8 braintree_customer = Minitest::Mock.new
9 braintree_customer.expect(:payment_methods, [
10 OpenStruct.new(card_type: "Test", last_4: "1234")
11 ])
12 methods = PaymentMethods.for(braintree_customer, [])
13 assert_kind_of PaymentMethods, methods
14 assert_equal 1, methods.to_a.length
15 refute methods.empty?
16 end
17
18 def test_for_badcards
19 braintree_customer = Minitest::Mock.new
20 braintree_customer.expect(:payment_methods, [
21 OpenStruct.new(
22 card_type: "Test",
23 last_4: "1234",
24 unique_number_identifier: "wut"
25 )
26 ])
27 methods = PaymentMethods.for(braintree_customer, ["wut"])
28 assert_kind_of PaymentMethods, methods
29 assert_equal 0, methods.to_a.length
30 assert methods.empty?
31 end
32
33 def test_for_expired_cards
34 braintree_customer = Minitest::Mock.new
35 braintree_customer.expect(:payment_methods, [
36 OpenStruct.new(
37 card_type: "Test",
38 last_4: "1234",
39 unique_number_identifier: "abc",
40 expired?: true
41 )
42 ])
43
44 methods = PaymentMethods.for(braintree_customer, [])
45 assert_kind_of PaymentMethods, methods
46 assert_equal 0, methods.to_a.length
47 assert methods.empty?
48 end
49
50 def test_for_badcards_and_expired_cards
51 braintree_customer = Minitest::Mock.new
52 braintree_customer.expect(:payment_methods, [
53 OpenStruct.new(
54 card_type: "Test",
55 last_4: "1234",
56 unique_number_identifier: "abc",
57 expired?: true
58 )
59 ])
60
61 methods = PaymentMethods.for(braintree_customer, ["abc"])
62 assert_kind_of PaymentMethods, methods
63 assert_equal 0, methods.to_a.length
64 assert methods.empty?
65 end
66
67 def test_for_non_expired_cards
68 braintree_customer = Minitest::Mock.new
69 braintree_customer.expect(:payment_methods, [
70 OpenStruct.new(
71 card_type: "Test",
72 last_4: "1234",
73 unique_number_identifier: "abc",
74 expired?: false
75 )
76 ])
77
78 methods = PaymentMethods.for(braintree_customer, [])
79 assert_kind_of PaymentMethods, methods
80 assert_equal 1, methods.to_a.length
81 refute methods.empty?
82 end
83
84 def test_for_no_methods
85 braintree_customer = Minitest::Mock.new
86 braintree_customer.expect(:payment_methods, [])
87 methods = PaymentMethods.for(braintree_customer, [])
88 assert_kind_of PaymentMethods, methods
89 assert_raises do
90 methods.to_list_single
91 end
92 assert_equal 0, methods.to_a.length
93 assert methods.empty?
94 end
95
96 def test_default_payment_method
97 methods = PaymentMethods.new([
98 OpenStruct.new(card_type: "Test", last_4: "1234"),
99 OpenStruct.new(card_type: "Test", last_4: "1234", default?: true)
100 ])
101 assert_equal methods.fetch(1), methods.default_payment_method
102 end
103
104 def test_default_payment_method_index
105 methods = PaymentMethods.new([
106 OpenStruct.new(card_type: "Test", last_4: "1234"),
107 OpenStruct.new(card_type: "Test", last_4: "1234", default?: true)
108 ])
109 assert_equal "1", methods.default_payment_method_index
110 end
111
112 def test_to_options
113 methods = PaymentMethods.new([
114 OpenStruct.new(card_type: "Test", last_4: "1234")
115 ])
116 assert_equal(
117 [
118 { value: "0", label: "Test 1234" }
119 ],
120 methods.to_options
121 )
122 end
123
124 def test_to_list_single
125 methods = PaymentMethods.new([
126 OpenStruct.new(card_type: "Test", last_4: "1234")
127 ])
128 assert_equal(
129 {
130 var: "payment_method",
131 type: "list-single",
132 label: "Credit card to pay with",
133 required: true,
134 value: nil,
135 options: [
136 { value: "0", label: "Test 1234" }
137 ]
138 },
139 methods.to_list_single
140 )
141 end
142
143 class EmptyTest < Minitest::Test
144 def test_to_list_single
145 assert_raises do
146 PaymentMethods::Empty.new.to_list_single
147 end
148 end
149 end
150end