# frozen_string_literal: true

require "test_helper"
require "customer"
require "form_template"
require "monthly_data_limit"

class PlanSettingsFormTest < Minitest::Test
	def render(data_limit: nil, plan_name: "test_usd")
		customer = customer(plan_name: plan_name)
		limits = MonthlyDataLimit.for_currency(customer.currency, CONFIG)
		FormTemplate.render(
			"plan_settings",
			customer: customer,
			sims: [OpenStruct.new],
			data_limit: data_limit,
			monthly_data_limit_step: limits[:step],
			monthly_data_limit_max: limits[:max]
		)
	end

	def test_monthly_data_limit_is_integer_field
		field = render.field("monthly_data_limit")
		validate = field.find(
			"ns:validate",
			ns: "http://jabber.org/protocol/xdata-validate"
		).first

		assert_equal "text-single", field.type
		assert_equal "xs:integer", validate[:datatype]
	end

	def test_monthly_data_limit_has_slider_range
		validate = render.field("monthly_data_limit").find(
			"ns:validate",
			ns: "http://jabber.org/protocol/xdata-validate"
		).first
		range = validate.children.first

		assert_equal "range", range.name
		assert_equal "0", range[:min]
		assert_equal "50", range[:max]
	end

	def test_monthly_data_limit_options_step_by_five_gb_cost
		options = render.field("monthly_data_limit").options.map(&:value)

		assert_equal (0..50).step(5).map(&:to_s), options
	end

	def test_monthly_data_limit_defaults_to_one_five_gb_step
		assert_equal "5", render.field("monthly_data_limit").value
	end

	def test_monthly_data_limit_uses_customer_currency
		field = render(plan_name: "test_cad").field("monthly_data_limit")
		validate = field.find(
			"ns:validate",
			ns: "http://jabber.org/protocol/xdata-validate"
		).first
		range = validate.children.first

		assert_equal "60", range[:max]
		assert_equal "6", field.value
		assert_equal (0..60).step(6).map(&:to_s), field.options.map(&:value)
	end

	def test_monthly_data_limit_keeps_existing_value
		field = render(data_limit: "10").field("monthly_data_limit")

		assert_equal "10", field.value
	end
end
