/t/defaults.t

http://github.com/gshank/html-formhandler · Raku · 169 lines · 141 code · 28 blank · 0 comment · 17 complexity · 674047c5eea899df4241d91100d63792 MD5 · raw file

  1. use strict;
  2. use warnings;
  3. use Test::More;
  4. use lib 't/lib';
  5. {
  6. package Test::Defaults;
  7. use HTML::FormHandler::Moose;
  8. extends 'HTML::FormHandler';
  9. has_field 'foo' => ( default => 'default_foo' );
  10. has_field 'bar' => ( default => '' );
  11. has_field 'bax' => ( default => 'default_bax' );
  12. }
  13. my $form = Test::Defaults->new;
  14. my $cmp_fif = {
  15. foo => 'default_foo',
  16. bar => '',
  17. bax => 'default_bax',
  18. };
  19. is_deeply( $form->fif, $cmp_fif, 'fif has right defaults' );
  20. $form->process( params => {} );
  21. is_deeply( $form->fif, $cmp_fif, 'fif has right defaults' );
  22. my $init_obj = { foo => '', bar => 'testing', bax => '' };
  23. $form->process( init_object => $init_obj, params => {} );
  24. is_deeply( $form->fif, { foo => '', bar => 'testing', bax => '' }, 'object overrides defaults');
  25. {
  26. package Test::DefaultsX;
  27. use HTML::FormHandler::Moose;
  28. extends 'HTML::FormHandler';
  29. has_field 'foo' => ( default => 'default_foo', default_over_obj => 'default_foo' );
  30. has_field 'bar' => ( default => '', default_over_obj => '' );
  31. has_field 'bax' => ( default => 'default_bax', default_over_obj => 'default_bax' );
  32. }
  33. $form = Test::DefaultsX->new;
  34. $form->process( init_object => $init_obj, params => {} );
  35. is_deeply( $form->fif, $cmp_fif, 'fif uses defaults overriding object' );
  36. {
  37. package My::Form;
  38. use HTML::FormHandler::Moose;
  39. extends 'HTML::FormHandler';
  40. has '+name' => ( default => 'testform_' );
  41. has_field 'optname' => ( temp => 'First' );
  42. has_field 'reqname' => ( required => 1 );
  43. has_field 'somename';
  44. }
  45. $form = My::Form->new( init_object => {reqname => 'Starting Perl',
  46. optname => 'Over Again' } );
  47. ok( $form, 'non-db form created OK');
  48. is( $form->field('optname')->value, 'Over Again', 'get right value from form');
  49. $form->process({});
  50. ok( !$form->validated, 'form validated' );
  51. is( $form->field('reqname')->fif, 'Starting Perl',
  52. 'get right fif with init_object');
  53. {
  54. package My::Form;
  55. use HTML::FormHandler::Moose;
  56. extends 'HTML::FormHandler';
  57. has '+name' => ( default => 'initform_' );
  58. has_field 'foo';
  59. has_field 'bar';
  60. has_field 'baz';
  61. has_field 'bax' => ( default => 'default_bax' );
  62. has '+init_object' => ( default => sub { { foo => 'initfoo' } } );
  63. sub default_bar { 'init_value_bar' }
  64. sub init_value_baz { 'init_value_baz' }
  65. }
  66. $form = My::Form->new;
  67. ok( $form->field('foo')->value, 'initfoo' );
  68. ok( $form->field('bar')->value, 'init_value_bar' );
  69. ok( $form->field('baz')->value, 'init_value_baz' );
  70. ok( $form->field('bax')->value, 'default_bax' );
  71. {
  72. package Mock::Object;
  73. use Moose;
  74. has 'foo' => ( is => 'rw' );
  75. has 'bar' => ( is => 'rw' );
  76. has 'baz' => ( is => 'rw' );
  77. }
  78. {
  79. package Test::Object;
  80. use HTML::FormHandler::Moose;
  81. extends 'HTML::FormHandler';
  82. with 'HTML::FormHandler::Model::Object';
  83. sub BUILD {
  84. my $self = shift;
  85. my $var = 'test';
  86. }
  87. has_field 'foo';
  88. has_field 'bar';
  89. has_field 'baz';
  90. has_field 'bax' => ( default => 'bax_from_default' );
  91. has_field 'zero' => ( type => 'PosInteger', default => 0 );
  92. has_field 'foo_list' => ( type => 'Multiple', default => [1,3],
  93. options => [{ value => 1, label => 'One'},
  94. { value => 2, label => 'Two'},
  95. { value => 3, label => 'Three'},
  96. ]
  97. );
  98. sub init_object {
  99. my $self = shift;
  100. return { bar => 'initbar' };
  101. }
  102. }
  103. my $obj = Mock::Object->new( foo => 'myfoo', bar => 'mybar', baz => 'mybaz' );
  104. $form = Test::Object->new;
  105. $form->process( item => $obj, item_id => 1, params => {} );
  106. is( $form->field('foo')->value, 'myfoo', 'field value from item');
  107. is( $form->field('bar')->value, 'mybar', 'field value from item');
  108. is( $form->field('bax')->value, 'bax_from_default', 'non-item field value from default' );
  109. is( $form->field('zero')->value, 0, 'zero default works');
  110. is_deeply( $form->field('foo_list')->value, [1,3], 'multiple default works' );
  111. {
  112. package Test::Form;
  113. use HTML::FormHandler::Moose;
  114. extends 'HTML::FormHandler';
  115. has 'quuz' => ( is => 'ro', default => 'some_quux' );
  116. has_field 'foo';
  117. has_field 'bar';
  118. sub init_object {
  119. my $self = shift;
  120. return { foo => $self->quuz, bar => 'bar!' };
  121. }
  122. }
  123. $form = Test::Form->new;
  124. is( $form->field('foo')->value, 'some_quux', 'field initialized by init_object' );
  125. {
  126. package Mock::Object;
  127. use Moose;
  128. has 'meow' => ( is => 'rw' );
  129. }
  130. {
  131. package Test::Object;
  132. use HTML::FormHandler::Moose;
  133. extends 'HTML::FormHandler';
  134. with 'HTML::FormHandler::Model::Object';
  135. has_field 'meow' => ( default => 'this_should_get_overridden' );
  136. }
  137. $obj = Mock::Object->new( meow => 'the_real_meow' );
  138. $form = Test::Object->new;
  139. $form->process( item => $obj, item_id => 1, params => {} );
  140. is( $form->field('meow')->value, 'the_real_meow', 'defaults should not override actual item values');
  141. done_testing;