test_plan_settings_form.rb

 1# frozen_string_literal: true
 2
 3require "test_helper"
 4require "customer"
 5require "form_template"
 6require "monthly_data_limit"
 7
 8class PlanSettingsFormTest < Minitest::Test
 9	def render(data_limit: nil, plan_name: "test_usd")
10		customer = customer(plan_name: plan_name)
11		limits = MonthlyDataLimit.for_currency(customer.currency, CONFIG)
12		FormTemplate.render(
13			"plan_settings",
14			customer: customer,
15			sims: [OpenStruct.new],
16			data_limit: data_limit,
17			monthly_data_limit_step: limits[:step],
18			monthly_data_limit_max: limits[:max]
19		)
20	end
21
22	def test_monthly_data_limit_is_integer_field
23		field = render.field("monthly_data_limit")
24		validate = field.find(
25			"ns:validate",
26			ns: "http://jabber.org/protocol/xdata-validate"
27		).first
28
29		assert_equal "text-single", field.type
30		assert_equal "xs:integer", validate[:datatype]
31	end
32
33	def test_monthly_data_limit_has_slider_range
34		validate = render.field("monthly_data_limit").find(
35			"ns:validate",
36			ns: "http://jabber.org/protocol/xdata-validate"
37		).first
38		range = validate.children.first
39
40		assert_equal "range", range.name
41		assert_equal "0", range[:min]
42		assert_equal "50", range[:max]
43	end
44
45	def test_monthly_data_limit_options_step_by_five_gb_cost
46		options = render.field("monthly_data_limit").options.map(&:value)
47
48		assert_equal (0..50).step(5).map(&:to_s), options
49	end
50
51	def test_monthly_data_limit_defaults_to_one_five_gb_step
52		assert_equal "5", render.field("monthly_data_limit").value
53	end
54
55	def test_monthly_data_limit_uses_customer_currency
56		field = render(plan_name: "test_cad").field("monthly_data_limit")
57		validate = field.find(
58			"ns:validate",
59			ns: "http://jabber.org/protocol/xdata-validate"
60		).first
61		range = validate.children.first
62
63		assert_equal "60", range[:max]
64		assert_equal "6", field.value
65		assert_equal (0..60).step(6).map(&:to_s), field.options.map(&:value)
66	end
67
68	def test_monthly_data_limit_keeps_existing_value
69		field = render(data_limit: "10").field("monthly_data_limit")
70
71		assert_equal "10", field.value
72	end
73end