App-PasswordManager
view release on metacpan or search on metacpan
t/02_functionality.t view on Meta::CPAN
ok(exists $passwords->{$login}, "Password for login '$login' should exist");
ok($passwords->{$login}{password} ne $password, "Password should be hashed");
};
subtest 'list_passwords' => sub {
my ($fh, $tempfile) = tempfile();
my $password_manager = App::PasswordManager->new(file => $tempfile);
$password_manager->add_password("user1", "password123");
$password_manager->add_password("user2", "password456");
my $passwords = $password_manager->list_passwords();
is_deeply([sort @$passwords], [sort qw(user1 user2)], 'Passwords should be listed regardless of order');
};
subtest 'remove_password' => sub {
my ($fh, $tempfile) = tempfile();
my $password_manager = App::PasswordManager->new(file => $tempfile);
$password_manager->add_password("user1", "password123");
my $result = $password_manager->remove_password("user1");
is($result, 1, 'Password should be removed');
my $passwords = $password_manager->{passwords};
ok(!exists $passwords->{user1}, "Password for login 'user1' should be removed");
};
subtest 'edit_password' => sub {
my ($fh, $tempfile) = tempfile();
my $password_manager = App::PasswordManager->new(file => $tempfile);
$password_manager->add_password("user1", "password123");
my $new_password = "newpassword456";
$password_manager->edit_password("user1", $new_password);
my $passwords = $password_manager->{passwords};
is($passwords->{user1}{password}, $password_manager->{pbkdf2}->generate($new_password, $password_manager->{salt}), 'Password should be updated');
};
subtest 'add_password_with_existing_login' => sub {
my ($fh, $tempfile) = tempfile();
my $password_manager = App::PasswordManager->new(file => $tempfile);
$password_manager->add_password("user1", "password123");
eval {
$password_manager->add_password("user1", "newpassword456");
};
like($@, qr/Login 'user1' already exists/, "Adding password with existing login should throw an error");
};
subtest 'remove_password_not_found' => sub {
my ($fh, $tempfile) = tempfile();
my $password_manager = App::PasswordManager->new(file => $tempfile);
eval {
$password_manager->remove_password("nonexistent_user");
};
like($@, qr/Login 'nonexistent_user' not found/, "Removing password for a non-existent login should throw an error");
};
subtest 'edit_password_not_found' => sub {
my ($fh, $tempfile) = tempfile();
my $password_manager = App::PasswordManager->new(file => $tempfile);
eval {
$password_manager->edit_password("nonexistent_user", "newpassword456");
};
like($@, qr/Login 'nonexistent_user' not found/, "Editing password for a non-existent login should throw an error");
};
done_testing();
( run in 0.822 second using v1.01-cache-2.11-cpan-39bf76dae61 )