1use strict;
2use warnings;
3use Test::More;
4use HTML::FormHandler::Test;
5
6{
7    package MyApp::Form::Nested::View;
8    use HTML::FormHandler::Moose::Role;
9
10    sub build_render_list { ['fset1'] }
11    has_block 'fset1' => ( tag => 'fieldset', label => 'First Fieldset',
12        render_list => ['foo', 'bar', 'pax', 'fset1.sub1', 'fset1.sub2'],
13    );
14    has_block 'fset1.sub1' => ( tag => 'div', label => 'More Stuff',
15        class => ['sub1'],
16        render_list => ['fee', 'fie', 'fo'],
17    );
18    has_block 'fset1.sub2' => ( tag => 'div', label => 'And Even More',
19        class => ['sub2'],
20        render_list => ['fum', 'man'],
21    );
22
23}
24{
25    package MyApp::Form::Nested;
26    use HTML::FormHandler::Moose;
27    extends 'HTML::FormHandler';
28    with 'MyApp::Form::Nested::View';
29
30    has '+name' => ( default => 'nested_form' );
31    has_field 'foo';
32    has_field 'bar';
33    has_field 'pax';
34    has_field 'fee';
35    has_field 'fie';
36    has_field 'fo';
37    has_field 'fum';
38    has_field 'man';
39
40}
41
42my $form = MyApp::Form::Nested->new;
43ok( $form, 'form built' );
44$form->process;
45my $rendered = $form->render;
46my $expected =
47'<form id="nested_form" method="post">
48  <div class="form_messages"></div>
49  <fieldset><legend>First Fieldset</legend>
50    <div>
51      <label for="foo">Foo</label>
52      <input type="text" id="foo" name="foo" value="">
53    </div>
54    <div>
55      <label for="bar">Bar</label>
56      <input type="text" id="bar" name="bar" value="">
57    </div>
58    <div>
59      <label for="pax">Pax</label>
60      <input type="text" id="pax" name="pax" value="">
61    </div>
62    <div class="sub1">
63      <span>More Stuff</span>
64      <div>
65        <label for="fee">Fee</label>
66        <input type="text" id="fee" name="fee" value="">
67      </div>
68      <div>
69        <label for="fie">Fie</label>
70        <input type="text" id="fie" name="fie" value="">
71      </div>
72      <div>
73        <label for="fo">Fo</label>
74        <input type="text" id="fo" name="fo" value="">
75      </div>
76    </div>
77    <div class="sub2">
78      <span>And Even More</span>
79      <div>
80        <label for="fum">Fum</label>
81        <input type="text" id="fum" name="fum" value="">
82      </div>
83      <div>
84        <label for="man">Man</label>
85        <input type="text" id="man" name="man" value="">
86      </div>
87    </div>
88  </fieldset>
89</form>';
90is_html( $rendered, $expected, 'got expected rendering' );
91
92done_testing;
93