# frozen_string_literal: true

require "test_helper"

require "ostruct"
require "customer"

require_relative "../lib/sim_order"
require_relative "../lib/sim_kind"

class SIMKindTest < Minitest::Test
	def setup
		@sim_form = Blather::Stanza::Iq::Command.new.tap { |iq|
			iq.form.fields = [{ var: "sim_kind", value: "sim" }]
		}

		@esim_form = Blather::Stanza::Iq::Command.new.tap { |iq|
			iq.form.fields = [{ var: "sim_kind", value: "esim" }]
		}

		@invalid_form = Blather::Stanza::Iq::Command.new.tap { |iq|
			iq.form.fields = [{ var: "sim_kind", value: "invalid" }]
		}

		@missing_form = Blather::Stanza::Iq::Command.new.tap { |iq|
			iq.form.fields = []
		}
	end

	def test_initialize_with_sim
		kind = SIMKind.new("sim")
		assert_equal SIMOrder, kind.klass
	end

	def test_initialize_with_esim
		kind = SIMKind.new("esim")
		assert_equal SIMOrder::ESIM, kind.klass
	end

	def test_initialize_with_invalid_variant
		kind = SIMKind.new("invalid")
		assert_nil kind.klass
	end

	def test_initialize_with_nil
		kind = SIMKind.new(nil)
		assert_nil kind.klass
	end

	def test_from_form_with_sim
		kind = SIMKind.from_form(@sim_form.form)
		assert_equal SIMOrder, kind.klass
	end

	def test_from_form_with_esim
		kind = SIMKind.from_form(@esim_form.form)
		assert_equal SIMOrder::ESIM, kind.klass
	end

	def test_cfg_returns_nil_when_customer_currency_nil
		kind = SIMKind.new("sim")
		cust = customer(currency: nil)
		assert_nil kind.cfg(cust.currency)
	end

	def test_cfg_returns_nil_when_config_missing_variant
		kind = SIMKind.new("invalid")
		cust = customer(currency: :USD)
		assert_nil kind.cfg(cust.currency)
	end

	def test_cfg_returns_nil_when_config_missing_currency
		kind = SIMKind.new("sim")
		cust = customer(currency: :EUR)
		assert_nil kind.cfg(cust.currency)
	end
end
