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