# frozen_string_literal: true

require "test_helper"
require "alt_top_up_form"
require "customer"

class AltTopUpFormTest < Minitest::Test
	def test_for
		CustomerFinancials::REDIS.expect(
			:smembers,
			EMPromise.resolve([]),
			["jmp_customer_btc_addresses-test"]
		)
		assert_kind_of(
			AltTopUpForm,
			AltTopUpForm.for(customer).sync
		)
	end
	em :test_for

	def test_for_addresses
		CustomerFinancials::REDIS.expect(
			:smembers,
			EMPromise.resolve(["testaddr"]),
			["jmp_customer_btc_addresses-test"]
		)
		assert_kind_of(
			AltTopUpForm,
			AltTopUpForm.for(customer).sync
		)
	end
	em :test_for_addresses

	def test_for_cad
		CustomerFinancials::REDIS.expect(
			:smembers,
			EMPromise.resolve([]),
			["jmp_customer_btc_addresses-test"]
		)
		assert_kind_of(
			AltTopUpForm,
			AltTopUpForm.for(customer(plan_name: "test_cad")).sync
		)
	end
	em :test_for_cad

	def test_form_addrs
		assert_kind_of(
			Blather::Stanza::X,
			AltTopUpForm.new(
				customer,
				AltTopUpForm::AddBtcAddressField.new
			).form
		)
	end

	def test_form_new_addrs
		assert_kind_of(
			Blather::Stanza::X,
			AltTopUpForm.new(
				customer,
				AltTopUpForm::AddBtcAddressField::AddNewBtcAddressField.new
			).form
		)
	end

	def test_parse_true
		iq_form = Blather::Stanza::X.new
		iq_form.fields = [
			{ var: "add_btc_address", value: "true" }
		]
		assert AltTopUpForm.new(customer).parse(iq_form)[:add_btc_address]
	end

	def test_parse_1
		iq_form = Blather::Stanza::X.new
		iq_form.fields = [
			{ var: "add_btc_address", value: "1" }
		]
		assert AltTopUpForm.new(customer).parse(iq_form)[:add_btc_address]
	end

	def test_parse_false
		iq_form = Blather::Stanza::X.new
		iq_form.fields = [
			{ var: "add_btc_address", value: "false" }
		]
		refute AltTopUpForm.new(customer).parse(iq_form)[:add_btc_address]
	end

	def test_parse_not_presend
		iq_form = Blather::Stanza::X.new
		refute AltTopUpForm.new(customer).parse(iq_form)[:add_btc_address]
	end
end
