Brannigan
view release on metacpan or search on metacpan
t/05-defaults.t view on Meta::CPAN
$b->process('dynamic_defaults', $params1);
$b->process('dynamic_defaults', $params2);
isnt($params1->{id}, $params2->{id}, 'Different random IDs generated');
is($params1->{author}, $params2->{author}, 'Static defaults are same');
}
# Complex defaults (arrays and hashes)
$b->register_schema('complex_defaults', {
params => {
tags => {
array => 1,
default => ['untagged']
},
metadata => {
hash => 1,
default => { version => 1, type => 'default' }
},
options => {
default => sub { { auto_save => 1, debug => 0 } }
}
}
});
{
my $params = {};
my $rejects = $b->process('complex_defaults', $params);
is($rejects, undef, 'Processing with complex defaults succeeds');
is($params->{tags}, ['untagged'], 'Array default applied');
is($params->{metadata}, { version => 1, type => 'default' }, 'Hash default applied');
is($params->{options}, { auto_save => 1, debug => 0 }, 'Dynamic hash default applied');
}
# Defaults should be validated
$b->register_schema('validated_defaults', {
params => {
status => {
default => 'pending',
one_of => ['pending', 'active', 'inactive']
},
count => {
default => 10,
integer => 1,
min_value => 1
}
}
});
{
my $params = {};
my $rejects = $b->process('validated_defaults', $params);
is($rejects, undef, 'Valid defaults pass validation');
is($params->{status}, 'pending', 'Valid default applied');
is($params->{count}, 10, 'Valid numeric default applied');
}
# Test that defaults don't apply to required parameters that fail
$b->register_schema('required_no_default', {
params => {
name => { required => 1 },
backup_name => { default => 'unnamed' }
}
});
{
my $params = {}; # Missing required name
my $rejects = $b->process('required_no_default', $params);
is($rejects, { name => { required => 1 } }, 'Required parameter failure');
is($params->{backup_name}, 'unnamed', 'Default still applied to non-required params');
}
# Edge case: empty string and zero values should not trigger defaults
$b->register_schema('edge_cases', {
params => {
description => { default => 'No description' },
count => { default => 1, integer => 1 },
flag => { default => 'true' }
}
});
{
my $params = { description => '', count => 0, flag => 'false' };
my $rejects = $b->process('edge_cases', $params);
is($rejects, undef, 'Edge case processing succeeds');
is($params->{description}, '', 'Empty string preserved (not replaced with default)');
is($params->{count}, 0, 'Zero value preserved (not replaced with default)');
is($params->{flag}, 'false', 'False value preserved (not replaced with default)');
}
# =============================================================================
# ARRAY ITEM DEFAULTS TESTS
# =============================================================================
# Test array item defaults specifically
$b->register_schema('array_defaults_test', {
params => {
items => {
array => 1,
values => {
hash => 1,
keys => {
name => { required => 1 },
active => { default => 1 },
priority => { default => 3 },
created_at => { default => sub { 'test_time' } }
}
}
}
}
});
# Test with missing defaults
{
my $params = {
items => [
{ name => 'First' },
{ name => 'Second', active => 0 },
{ name => 'Third', priority => 5 }
]
};
my $rejects = $b->process('array_defaults_test', $params);
is($rejects, undef, 'Array defaults validation succeeds');
# Check defaults were applied
is($params->{items}->[0]->{active}, 1, 'First item active default applied');
is($params->{items}->[0]->{priority}, 3, 'First item priority default applied');
is($params->{items}->[0]->{created_at}, 'test_time', 'First item function default applied');
( run in 1.115 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )