1# frozen_string_literal: true
2
3require "test_helper"
4require "form_template"
5
6class FormTemplateTest < Minitest::Test
7 def test_form_one_field
8 template = FormTemplate.new(<<~TEMPLATE)
9 form!
10 title "TITLE"
11 instructions "INSTRUCTIONS"
12 field(var: "thevar", label: "thelabel")
13 TEMPLATE
14 form = template.render
15 assert_equal :form, form.type
16 assert_equal "TITLE", form.title
17 assert_equal "INSTRUCTIONS", form.instructions
18 assert_equal 1, form.fields.length
19 assert_equal "thevar", form.fields[0].var
20 assert_equal "thelabel", form.fields[0].label
21 end
22
23 def test_form_two_fields
24 template = FormTemplate.new(<<~TEMPLATE)
25 form!
26 field(var: "thevar", label: "thelabel")
27 field(var: "thevar2", label: "thelabel2")
28 TEMPLATE
29 form = template.render
30 assert_equal 2, form.fields.length
31 assert_equal "thevar", form.fields[0].var
32 assert_equal "thelabel", form.fields[0].label
33 assert_equal "thevar2", form.fields[1].var
34 assert_equal "thelabel2", form.fields[1].label
35 end
36
37 def test_result_no_fields
38 template = FormTemplate.new(<<~TEMPLATE)
39 result!
40 title "TITLE"
41 instructions "INSTRUCTIONS"
42 TEMPLATE
43 form = template.render
44 assert_equal :result, form.type
45 assert_equal "TITLE", form.title
46 assert_equal "INSTRUCTIONS", form.instructions
47 end
48
49 def test_no_type
50 template = FormTemplate.new(<<~TEMPLATE)
51 title "TITLE"
52 instructions "INSTRUCTIONS"
53 TEMPLATE
54 assert_raises { template.render }
55 end
56
57 def test_custom_xml
58 template = FormTemplate.new(<<~TEMPLATE)
59 form!
60 xml.whoever @arg
61 TEMPLATE
62 form = template.render(arg: "abc")
63 assert_equal "abc", form.at("whoever").content
64 end
65end