Concierge-Auth

 view release on metacpan or  search on metacpan

t/06-io-failures.t  view on Meta::CPAN

    like( $result->{message}, qr/Cannot open auth file/, 'message reflects open failure' );
};

subtest 'authenticate - flock failure' => sub {
    my $file = "$dir/auth_flock.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    $auth->enroll('alice', 'password123');

    local $MockBuiltins::FAIL_FLOCK = 1;
    my $result = $auth->authenticate('alice', 'password123');
    ok( !$result->{success}, 'authenticate fails when file cannot be locked' );
    like( $result->{message}, qr/Cannot lock file for reading/, 'message reflects lock failure' );
};

# ========== is_id_known() ==========

subtest 'is_id_known - open failure' => sub {
    my $file = "$dir/known_open.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    $auth->enroll('alice', 'password123');

t/06-io-failures.t  view on Meta::CPAN

    like( $result->{message}, qr/Cannot open auth file/, 'message reflects open failure' );
};

subtest 'is_id_known - flock failure' => sub {
    my $file = "$dir/known_flock.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    $auth->enroll('alice', 'password123');

    local $MockBuiltins::FAIL_FLOCK = 1;
    my $result = $auth->is_id_known('alice');
    ok( !$result->{success}, 'is_id_known fails when file cannot be locked' );
    like( $result->{message}, qr/Cannot lock file for reading/, 'message reflects lock failure' );
};

subtest 'is_id_known - pfile set but file missing' => sub {
    my $file = "$dir/known_missing.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    unlink $file;

    my $result = $auth->is_id_known('alice');
    ok( $result->{success}, 'still succeeds (no I/O error) when file has vanished' );

t/06-io-failures.t  view on Meta::CPAN

    like( $result->{message}, qr/Cannot open file/, 'message reflects open failure' );
};

subtest 'change_credentials - flock failure' => sub {
    my $file = "$dir/change_flock.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    $auth->enroll('alice', 'password123');

    local $MockBuiltins::FAIL_FLOCK = 1;
    my $result = $auth->change_credentials('alice', 'newpassword456');
    ok( !$result->{success}, 'change_credentials fails when file cannot be locked' );
    like( $result->{message}, qr/Cannot lock file/, 'message reflects lock failure' );
};

# ========== revoke() ==========

subtest 'revoke - pfile set but file missing' => sub {
    my $file = "$dir/revoke_missing.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    $auth->enroll('alice', 'password123');
    unlink $file;

t/06-io-failures.t  view on Meta::CPAN

    like( $result->{message}, qr/Cannot open file/, 'message reflects open failure' );
};

subtest 'revoke - flock failure' => sub {
    my $file = "$dir/revoke_flock.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    $auth->enroll('alice', 'password123');

    local $MockBuiltins::FAIL_FLOCK = 1;
    my $result = $auth->revoke('alice');
    ok( !$result->{success}, 'revoke fails when file cannot be locked' );
    like( $result->{message}, qr/Cannot lock file/, 'message reflects lock failure' );
};

subtest 'revoke - preserves unrelated records' => sub {
    my $file = "$dir/revoke_preserve.pwd";
    my $auth = Concierge::Auth::Pwd->new( file => $file );
    $auth->enroll('alice', 'password123');
    $auth->enroll('bob', 'password456');

    my $result = $auth->revoke('alice');



( run in 1.836 second using v1.01-cache-2.11-cpan-800906f7e73 )