# 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"]
		)
		CustomerFinancials::REDIS.expect(
			:smembers,
			EMPromise.resolve([]),
			["jmp_customer_bch_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"]
		)
		CustomerFinancials::REDIS.expect(
			:smembers,
			EMPromise.resolve([]),
			["jmp_customer_bch_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"]
		)
		CustomerFinancials::REDIS.expect(
			:smembers,
			EMPromise.resolve([]),
			["jmp_customer_bch_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, ["some_addr"], []
			).form
		)
	end

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

	def test_parse_complete
		iq_form = Blather::Stanza::X.new
		iq_form.fields = [
			{ var: "http://jabber.org/protocol/commands#actions", value: "complete" }
		]
		assert_kind_of(
			AltTopUpForm::NoOp,
			AltTopUpForm.new(customer, [], []).parse(iq_form)
		)
	end

	def test_parse_btc
		iq_form = Blather::Stanza::X.new
		iq_form.fields = [
			{ var: "http://jabber.org/protocol/commands#actions", value: "BTC" }
		]
		assert_kind_of(
			AltTopUpForm::BitcoinAddress,
			AltTopUpForm.new(customer, [], []).parse(iq_form)
		)
	end

	def test_parse_xmr
		iq_form = Blather::Stanza::X.new
		iq_form.fields = [
			{ var: "http://jabber.org/protocol/commands#actions", value: "XMR" }
		]
		assert_kind_of(
			AltTopUpForm::SimpleSwapAddress,
			AltTopUpForm.new(customer, [], []).parse(iq_form)
		)
	end
end
