File: num_extra.t

package info (click to toggle)
libhtml-formhandler-perl 0.40057-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,320 kB
  • ctags: 685
  • sloc: perl: 8,849; makefile: 2
file content (69 lines) | stat: -rw-r--r-- 2,153 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
use strict;
use warnings;
use Test::More;

{
    package Test::User::Repeatable;
    use HTML::FormHandler::Moose;
    extends 'HTML::FormHandler';

    has_field 'user_name';
    has_field 'occupation';
    has_field 'employers' => ( type => 'Repeatable', num_extra => 1 );
    has_field 'employers.employer_id' => ( type => 'PrimaryKey' );
    has_field 'employers.name';
    has_field 'employers.address';
}
my $form = Test::User::Repeatable->new;
my $unemployed_params = {
   user_name => "No Employer",
   occupation => "Unemployed",
   'employers.0.employer_id' => '', # empty string
   'employers.0.name' => '',
   'employers.0.address' => ''
};
$form->process( $unemployed_params);
ok( $form->validated, "User with empty employer validates" );
is_deeply( $form->value, { employers => [], user_name => 'No Employer', occupation => 'Unemployed' },
    'creates right value for empty repeatable' );
is_deeply( $form->fif, $unemployed_params, 'right fif for empty repeatable' );
$form->field('employers')->add_extra;
my $expected_fif = {
   'employers.0.address' => '',
   'employers.0.employer_id' => '',
   'employers.0.name' => '',
   'employers.1.address' => '',
   'employers.1.employer_id' => '',
   'employers.1.name' => '',
   'occupation' => 'Unemployed',
   'user_name' => 'No Employer',
};

is_deeply( $form->fif, $expected_fif, 'fif is correct with additional element' );

my $obj = {
    occupation => 'Flaneur',
    user_name  => 'billy',
    employers => [
        { name => 'First Employer', address => '', employer_id => 1 },
        { name => 'Second Employer', address => '', employer_id => 2 },
    ],
};

$form->process( init_object => $obj );
$expected_fif = {
   'occupation' => 'Flaneur',
   'user_name' => 'billy',
   'employers.0.address' => '',
   'employers.0.employer_id' => 1,
   'employers.0.name' => 'First Employer',
   'employers.1.address' => '',
   'employers.1.employer_id' => 2,
   'employers.1.name' => 'Second Employer',
   'employers.2.address' => '',
   'employers.2.employer_id' => '',
   'employers.2.name' => '',
};
is_deeply( $form->fif, $expected_fif, 'fif is correct with num_extra' );

done_testing;