test_buy_account_credit_form.rb

  1# frozen_string_literal: true
  2
  3require "test_helper"
  4require "buy_account_credit_form"
  5require "customer"
  6require "credit_card_sale"
  7
  8CustomerFinancials::BRAINTREE = Minitest::Mock.new
  9CustomerFinancials::REDIS = Minitest::Mock.new
 10TrustLevelRepo::REDIS = Minitest::Mock.new
 11TrustLevelRepo::DB = Minitest::Mock.new
 12
 13class BuyAccountCreditFormTest < Minitest::Test
 14	def setup
 15		@payment_method = OpenStruct.new(card_type: "Test", last_4: "1234")
 16		@max_top_up_amount = 130
 17		@form = BuyAccountCreditForm.new(
 18			BigDecimal("15.1234"),
 19			PaymentMethods.new([@payment_method]),
 20			@max_top_up_amount
 21		)
 22	end
 23
 24	def test_for
 25		braintree_customer = Minitest::Mock.new
 26		CustomerFinancials::BRAINTREE.expect(:customer, braintree_customer)
 27		CustomerFinancials::REDIS.expect(:smembers, [], ["block_credit_cards"])
 28		braintree_customer.expect(
 29			:find,
 30			EMPromise.resolve(OpenStruct.new(payment_methods: [])),
 31			["test"]
 32		)
 33
 34		TrustLevelRepo::REDIS.expect(
 35			:get,
 36			EMPromise.resolve("Customer"),
 37			["jmp_customer_trust_level-test"]
 38		)
 39		TrustLevelRepo::REDIS.expect(
 40			:get,
 41			EMPromise.resolve(nil),
 42			["jmp_customer_activater-test"]
 43		)
 44		CustomerPlan::DB.expect(
 45			:query_one, {}, [String, "test"]
 46		)
 47		TrustLevelRepo::DB.expect(
 48			:query_one,
 49			EMPromise.resolve({}),
 50			[String, "test"], default: {}
 51		)
 52		TrustLevelRepo::DB.expect(
 53			:query_one,
 54			EMPromise.resolve({}),
 55			[String, "test"], default: {}
 56		)
 57
 58		assert_kind_of(
 59			BuyAccountCreditForm,
 60			BuyAccountCreditForm.for(customer).sync
 61		)
 62
 63		assert_mock CustomerPlan::DB
 64		assert_mock TrustLevelRepo::REDIS
 65		assert_mock TrustLevelRepo::DB
 66	end
 67	em :test_for
 68
 69	def test_form
 70		iq_form = @form.form
 71		assert_equal :form, iq_form.type
 72		assert_equal "Buy Account Credit", iq_form.title
 73		assert_equal(
 74			[
 75				Blather::Stanza::X::Field.new(
 76					type: "fixed",
 77					label: "Current balance",
 78					value: "$15.12"
 79				),
 80				Blather::Stanza::X::Field.new(
 81					type: "list-single",
 82					var: "payment_method",
 83					label: "Credit card to pay with",
 84					required: true,
 85					options: [{ label: "Test 1234", value: "0" }]
 86				),
 87				Blather::Stanza::X::Field.new(
 88					var: "amount",
 89					label: "Amount of credit to buy",
 90					required: true
 91				)
 92			],
 93			iq_form.fields
 94		)
 95	end
 96
 97	def test_parse_amount
 98		iq_form = Blather::Stanza::X.new
 99		iq_form.fields = [{ var: "amount", value: "123" }]
100		assert_equal "123", @form.parse(iq_form)[:amount]
101	end
102
103	def test_parse_payment_method
104		iq_form = Blather::Stanza::X.new
105		iq_form.fields = [
106			{ var: "payment_method", value: "0" },
107			{ var: "amount", value: "15" }
108		]
109		assert_equal @payment_method, @form.parse(iq_form)[:payment_method]
110	end
111
112	def test_parse_amount_too_low
113		iq_form = Blather::Stanza::X.new
114		iq_form.fields = [
115			{ var: "payment_method", value: "0" },
116			{ var: "amount", value: "10" }
117		]
118		assert_raises(AmountTooLowError) do
119			@form.parse(iq_form)
120		end
121	end
122end