use strict;
use warnings;

use Test::More;

use lib 'lib';    # test lib/Qpsmtpd (vs site_perl)
use lib 't';

use_ok('Qpsmtpd::DB::File');

__qphome();
__validate_dir();
__dir();

done_testing();

sub __qphome {
    my $db = FakeDB->new;
    is( $db->qphome, 't', 'qphome()' );
}

sub __validate_dir {
    my $db = FakeDB->new;
    is( $db->validate_dir(),      0, 'validate_dir(): false on no input' );
    is( $db->validate_dir(undef), 0, 'validate_dir(): false on undef' );
    is( $db->validate_dir('invalid'), 0,
        'validate_dir(): false for non-existent directory' );
    is( $db->validate_dir('t/config'), 1,
        'validate_dir(): true for real directory' );
}

sub __dir {
    my $db = FakeDB->new;
    is( $db->dir(), 't/config', 'default directory' );
    is( $db->dir('_invalid','t/Test'), 't/Test', 'skip invalid candidate dirs' );
    $db->{dir} = '_cached';
    is( $db->dir(), '_cached', 'cached directory' );
    is( $db->dir('t/Test'), 't/Test', 'passing candidate dirs resets cache' );
    is( $db->dir('_invalid'), 't/config', 'invalid candidate dirs reverts to default' );
}

package FakeDB;
use parent 'Qpsmtpd::DB::File';
sub new {
    my $class = shift;
    return bless {@_}, $class;
}