Form-Sensible-Reflector-MySQL

 view release on metacpan or  search on metacpan

t/510_floats.t  view on Meta::CPAN

use strict;
use warnings;
use utf8;
use lib qw( ../lib lib ../t/lib t/lib);

package test;

# Tests floats

use Test::Most;

BEGIN {
	use Local::Fixtures;
	use Local::Tests;
}

if ( not $Local::Fixtures::dbh ){
	plan skip_all => 'No DBH - please set ENV{DBI_USER} and ENV{DBI_PASS}'; 
} 

use Form::Sensible;
use Form::Sensible::Reflector::MySQL;


my (@rv);
	
my $options = { 
	form_name => $Local::Fixtures::table_name,
	no_db_defaults => 1,
};

my $reflector = Form::Sensible::Reflector::MySQL->new();

# FLOAT(n,m)
my $col = 'my_floatnm';
my $form  = $reflector->reflect_from($Local::Fixtures::dbh, 
	{
		%$options,
		only_columns => [$col]
	}
);

is( scalar $form->get_fields, 1, 'number of fields');

$form->field($col)->value( 'a test string' );

isnt( 
	scalar keys %{ $form->validate->error_fields }, 
	0, 
	$col.' NaN produces errors'
);

like( 
	$form->validate->error_fields->{$col}->[0],
	qr'not a valid', 'NaN'
); 


is(
	$form->field('my_floatnm')->{upper_bound},
	999.99,
	'upper bound of float'
);
is(
	$form->field('my_floatnm')->{lower_bound},
	-999.99,
	'lower bound of float'
);

$form->field('my_floatnm')->value( 9999 );
@rv = $form->field('my_floatnm')->validate;
#like( $rv[0], qr'higher', 'float too high'); 
like( $rv[0], qr'3', 'float too high'); 

$form->field('my_floatnm')->value( 99.999 );
like( 
	$form->validate->error_fields->{$col}->[0],
	qr'3',
	'NaN error'
); 

$form->field('my_floatnm')->value( 999.99 );
is( 
	scalar (keys %{$form->validate->error_fields}),
	0,
	'no errors'
);

$form->field($col)->value( 18446744073709551615 );
TODO: {
	local $TODO = 'Error messages vary between versions of Form::Sensible';
	# http://www.cpantesters.org/cpan/report/3af9e5c6-520e-11e0-8a1e-03415704ce1c
	like( 
		$form->validate->error_fields->{$col}->[0],
		qr'3'
	); 
}

is(
	$form->field($col)->{upper_bound},
	999.99,
	'upper bound of s float'
);
is(
	$form->field($col)->{lower_bound},
	-999.99,
	'lower bound of s float'
);

$form->field($col)->value( 10000 );
@rv = $form->field($col)->validate;
#like( $rv[0], qr'higher', 'float too high'); 
like( $rv[0], qr'3', 'float too high'); 



# FLOAT(n)
$col = 'my_floatn';
$form  = $reflector->reflect_from($Local::Fixtures::dbh, 
	{
		%$options,
		only_columns => [qw[ my_floatn ]]
	}
);

$form->field('my_floatn')->value( 'a test string' );

isnt( scalar keys %{ $form->validate->error_fields }, 0, 'has errors');

like( 
	$form->validate->error_fields->{'my_floatn'}->[0],
	qr'not a valid',
	'NaN'
); 

$form->field($col)->value( 18446744073709551615 );
isnt( 
	$form->validate->error_fields->{$col}->[0],
	'Invalid number format', 'NaN'
); 

done_testing(15);



( run in 0.704 second using v1.01-cache-2.11-cpan-39bf76dae61 )