App-Test-Generator
view release on metacpan or search on metacpan
t/params_validate.t view on Meta::CPAN
#!/usr/bin/env perl
use strict;
use warnings;
# use Test::DescribeMe qw(extended);
use Test::Most;
use Test::Needs 'Params::Validate';
use File::Temp qw(tempdir);
use File::Spec;
# Load the module
BEGIN {
use_ok('App::Test::Generator::SchemaExtractor');
}
# Helper to create a temporary Perl module file
sub create_test_module {
my ($content) = @_;
my $dir = tempdir(CLEANUP => 1);
my $file = File::Spec->catfile($dir, 'TestModule.pm');
open my $fh, '>', $file or die "Cannot create $file: $!";
print $fh $content;
close $fh;
return $file;
}
# Helper to create an extractor for testing
sub create_extractor {
my ($module_content) = @_;
my $module_file = create_test_module($module_content);
return App::Test::Generator::SchemaExtractor->new(
input_file => $module_file,
output_dir => tempdir(CLEANUP => 1),
verbose => 0,
);
}
# Basic default value patterns
subtest 'Extact schema from Params::Validate' => sub {
my $module = <<'END_MODULE';
use Params::Validate qw(validate SCALAR ARRAYREF);
sub format_user {
my %args = validate(
@_,
{
username => {
type => SCALAR,
optional => 0,
},
roles => {
type => ARRAYREF,
optional => 1,
default => [],
},
uppercase => {
type => SCALAR,
optional => 1,
default => 0,
callbacks => {
'is boolean' => sub { $_[0] == 0 || $_[0] == 1 },
},
},
}
);
my $name = $args{username};
$name = uc($name) if $args{uppercase};
return join(':', $name, @{ $args{roles} });
}
END_MODULE
my $extractor = create_extractor($module);
# Extract all schemas
my $schemas = $extractor->extract_all();
ok(defined($schemas));
# use Data::Dumper;
# diag(Dumper($schemas));
# Verify we determined the input for format_user
my $format_user_schema = $schemas->{format_user};
ok($format_user_schema, 'Found format_user method schema');
my $format_user_input = $format_user_schema->{input};
ok($format_user_input, 'Found input method schema');
cmp_deeply($format_user_input, {
'uppercase' => {
'optional' => 1,
'default' => 0,
'type' => 'string' # FIXME: would be good to say boolean here!
}, 'username' => {
'type' => 'string',
'optional' => 0
}, 'roles' => {
'optional' => 1,
'type' => 'arrayref',
'default' => []
}
});
done_testing();
};
done_testing();
( run in 0.958 second using v1.01-cache-2.11-cpan-140bd7fdf52 )