use strict;
use warnings;
use Test::More;
use File::Path qw(remove_tree);

if (eval{ require Digest::SHA }) {
    Digest::SHA->import('sha256_hex');
    plan tests => 5;
}
else {
    plan skip_all => "Need 'Digest::SHA' available for testing";
}

use_ok('Remember::Anything::AsPath');

(my $tmp_dir = __FILE__) =~ s/01-total.t$//;
$tmp_dir .= 'tmp';

my $some_obj = bless {
    foo  => 'bar',
    aref => [0 .. 10],
    href => {
        foo => 'bar',
    },
    obj  => (bless { foo => 'bar' }, 'AnotherClass'),
}, 'SomeClass';

{ # default attrib
    my $db_brain = Remember::Anything::AsPath->new(
        out_dir => $tmp_dir,
    );

    is $db_brain->seen($some_obj), 0, 'Unknown object is not found (1)';

    $db_brain->remember($some_obj);
    is $db_brain->seen($some_obj), 1, 'Remembered object (1)';

    remove_tree("$tmp_dir");
}

{ # custom threedepth, and digest sub
    $tmp_dir =~ s{\/$}{};
    my $digest_sub = \&sha256_hex;
    my $db_brain = Remember::Anything::AsPath->new(
        out_dir    => $tmp_dir,
        digest_sub => $digest_sub,
        tree_depth => 4,
    );

    is $db_brain->seen($some_obj), 0, 'Unknown object is not found (2)';
    $db_brain->remember($some_obj);

    is $db_brain->seen($some_obj), 1, 'Remembered object (2)';

    remove_tree("$tmp_dir");
}