The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;
use Test::More;
use File::Spec;
use FindBin;

unless($ENV{PWSAFE_SKIP_TEST}) {
    plan tests => 25;
} else {
    plan skip_all => "Skipped as PWSAFE_SKIP_TEST is set.";
}

use Passwd::Keyring::PWSafe3;

my $DBFILE = File::Spec->catfile($FindBin::Bin, "test.psafe3");

my $REALM_A = 'my@@realm';
my $REALM_B = 'bum trala la';
my $REALM_C = 'other realm';

my $USER1 = "Paul Anton";
my $USER2 = "Gżegąź";
my $USER4 = "-la-san-ty-";

my $PWD1 = "secret-Paul";
my $PWD1_ALT = "secret-Paul2 ąąąą";
my $PWD2 = "secret-Greg";
my $PWD4 = "secret-Duke";

my $ring = new_ok(
    "Passwd::Keyring::PWSafe3" => [
        app=>"Passwd::Keyring::PWSafe3", group=>"Unit tests (secrets)",
        file=>$DBFILE, master_password=>"10101010",
        lazy_save=>1 ], 
    "Properly setup - new(file=>$DBFILE, group=>Unit tests (secrets), lazy_save=>1)");

$ring->set_password($USER1, $PWD1, $REALM_B);
ok( 1, "Properly set - set_password($USER1, $PWD1, $REALM_B)" );
$ring->set_password($USER2, $PWD2, $REALM_B);
ok( 1, "Properly set - set_password($USER2, $PWD2, $REALM_B)" );#
$ring->set_password($USER1, $PWD1_ALT, $REALM_C);
ok( 1, "Properly set - set_password($USER1, $PWD1_ALT, $REALM_C)" );
$ring->set_password($USER4, $PWD4, $REALM_B);
ok( 1, "Properly set - set_password($USER4, $PWD4, $REALM_B)" );

$ring->save();
ok( 1, "Save succeeded");

is( $ring->get_password($USER1, $REALM_B), $PWD1,
    "Properly got back - get_password($USER1, $REALM_B)");

is( $ring->get_password($USER2, $REALM_B), $PWD2,
    "Properly got back - get_password($USER2, $REALM_B)");

is( $ring->get_password($USER1, $REALM_C), $PWD1_ALT,
    "Properly got back - get_password($USER1, $REALM_C)");

is( $ring->get_password($USER4, $REALM_B), $PWD4,
    "Properly got back - get_password($USER4, $REALM_B)");

$ring->clear_password($USER1, $REALM_B);
ok(1, "clear works - clear_password($USER1, $REALM_B)");

ok( ! defined($ring->get_password($USER1, $REALM_A)),
    "Properly got nothing - get_password($USER1, $REALM_A)");

ok( ! defined($ring->get_password($USER2, $REALM_A)),
    "Properly got nothing - get_password($USER2, $REALM_A)");

is( $ring->get_password($USER2, $REALM_B), $PWD2,
    "Properly got back - get_password($USER2, $REALM_B)");

is( $ring->get_password($USER1, $REALM_C), $PWD1_ALT,
    "Properly got back - get_password($USER1, $REALM_C)");

is( $ring->get_password($USER4, $REALM_B), $PWD4,
    "Properly got back - get_password($USER4, $REALM_B)");

is( $ring->clear_password($USER2, $REALM_B), 1,
    "Properly cleared - clear_password($USER2, $REALM_B)");

ok( ! defined($ring->get_password($USER2, $REALM_A)),
    "Properly got nothing after clear - get_password($USER2, $REALM_A)");

is( $ring->get_password($USER1, $REALM_C), $PWD1_ALT,
    "Properly got back - get_password($USER1, $REALM_C)");

is( $ring->get_password($USER4, $REALM_B), $PWD4,
    "Properly got back - get_password($USER4, $REALM_B)");

is( $ring->clear_password($USER1, $REALM_C), 1,
    "Properly cleared - clear_password($USER1, $REALM_C)");

is( $ring->clear_password($USER4, $REALM_B), 1,
    "Properly cleared - clear_password($USER4, $REALM_B)");

ok( ! defined($ring->get_password($USER1, $REALM_C)),
    "Got nothing after clear - get_password($USER1, $REALM_C)");
ok( ! defined($ring->get_password($USER4, $REALM_B)),
    "Got nothing after clear - get_password($USER4, $REALM_B)");

$ring->save();
ok( 1, "Save succeeded");