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 )