Concierge-Users
view release on metacpan or search on metacpan
t/02-setup.t view on Meta::CPAN
my $storage_dir = "$temp_base/type-changes";
my $config = make_config($storage_dir, 'database', {
field_overrides => [
{
field_name => 'title',
type => 'enum', # Change from text to enum
options => ['*Engineer', 'Manager', 'Director', 'Staff'],
label => 'Job Title',
required => 1,
},
],
});
my $result = Concierge::Users->setup($config);
ok($result->{success}, 'Setup with type change succeeds');
my $users = Concierge::Users->new($result->{config_file});
my $title_def = $users->get_field_definition('title');
is($title_def->{type}, 'enum', 'Type changed from text to enum');
is($title_def->{label}, 'Job Title', 'Label overridden');
is($title_def->{required}, 1, 'Required flag overridden');
is($title_def->{options}, ['*Engineer', 'Manager', 'Director', 'Staff'],
'Options set for converted enum field');
# Test that enum validation works
my $test_user = {
user_id => 'emp1',
moniker => 'Employee',
title => 'Manager',
};
my $reg_result = $users->register_user($test_user);
ok($reg_result->{success}, 'User registered with converted enum field');
my $get_result = $users->get_user('emp1');
is($get_result->{user}{title}, 'Manager', 'Enum value stored correctly');
# Test validation rejects non-enum values
my $bad_user = {
user_id => 'emp2',
moniker => 'Employee2',
title => 'Some random text',
};
my $bad_result = $users->register_user($bad_user);
ok(!$bad_result->{success}, 'Rejects non-enum value for converted field');
# Cleanup
remove_tree($storage_dir);
};
# ==============================================================================
# Test Group 10: Field Overrides - Protected Fields
# ==============================================================================
subtest 'Field overrides - protected fields' => sub {
use Capture::Tiny qw/ capture_stderr /;
my $storage_dir = "$temp_base/protected-fields";
# Blocked attribute on user_id: warns with new message, setup still succeeds
my $config1 = make_config($storage_dir . '/test1', 'database', {
field_overrides => [
{
field_name => 'user_id',
max_length => 50,
},
],
});
my ($stderr1, $result1) = capture_stderr sub {
Concierge::Users->setup($config1);
};
like($stderr1, qr/Field 'user_id' is protected; ignoring: max_length/,
'Warns about blocked attribute on protected user_id field');
ok($result1->{success}, 'Setup still succeeds despite blocked override on protected field');
# Blocked attribute on created_date: warns, setup succeeds
my $config2 = make_config($storage_dir . '/test2', 'database', {
field_overrides => [
{
field_name => 'created_date',
required => 1,
},
],
});
my ($stderr2, $result2) = capture_stderr sub {
Concierge::Users->setup($config2);
};
like($stderr2, qr/Field 'created_date' is protected; ignoring: required/,
'Warns about blocked attribute on protected created_date field');
ok($result2->{success}, 'Setup succeeds');
# Blocked attribute on last_mod_date: warns, setup succeeds
my $config3 = make_config($storage_dir . '/test3', 'database', {
field_overrides => [
{
field_name => 'last_mod_date',
required => 1,
},
],
});
my ($stderr3, $result3) = capture_stderr sub {
Concierge::Users->setup($config3);
};
like($stderr3, qr/Field 'last_mod_date' is protected; ignoring: required/,
'Warns about blocked attribute on protected last_mod_date field');
ok($result3->{success}, 'Setup succeeds');
# Allowed overrides (format_as, label) on protected fields: applied silently
my $config4 = make_config($storage_dir . '/test4', 'database', {
field_overrides => [
{ field_name => 'user_id', format_as => 'uid' },
{ field_name => 'last_login_date', format_as => 'dt',
label => 'Last Login' },
{ field_name => 'last_mod_date', format_as => 'dt' },
{ field_name => 'created_date', label => 'Created' },
],
});
my ($stderr4, $result4) = capture_stderr sub {
Concierge::Users->setup($config4);
};
is($stderr4, '', 'No warning when only format_as/label overridden on protected fields');
ok($result4->{success}, 'Setup succeeds with allowed overrides on protected fields');
my $users4 = Concierge::Users->new($result4->{config_file});
is($users4->get_field_hints('user_id')->{format_as}, 'uid', 'format_as applied to user_id');
is($users4->get_field_hints('last_login_date')->{format_as},'dt', 'format_as applied to last_login_date');
is($users4->get_field_hints('last_login_date')->{label}, 'Last Login','label applied to last_login_date');
is($users4->get_field_hints('last_mod_date')->{format_as}, 'dt', 'format_as applied to last_mod_date');
is($users4->get_field_hints('created_date')->{label}, 'Created', 'label applied to created_date');
# Cleanup
remove_tree($storage_dir);
};
# ==============================================================================
# Test Group 11: Field Overrides - Unknown Validator Types
# ==============================================================================
subtest 'Field overrides - unknown validator types' => sub {
use Capture::Tiny qw/ capture_stderr /;
my $storage_dir = "$temp_base/unknown-validator";
my $config = make_config($storage_dir, 'database', {
field_overrides => [
{
field_name => 'organization',
validate_as => 'unknown_type', # Invalid validator
},
],
});
my ($stderr, $result) = capture_stderr sub {
Concierge::Users->setup($config);
};
like($stderr, qr/unknown validator type 'unknown_type' - falling back to 'text'/,
'Warns about unknown validator and falls back to text');
ok($result->{success}, 'Setup still succeeds with unknown validator');
my $users = Concierge::Users->new($result->{config_file});
is($users->get_field_definition('organization')->{validate_as}, 'text',
'Validator fell back to text');
( run in 1.483 second using v1.01-cache-2.11-cpan-800906f7e73 )