]> Dogcows Code - chaz/p5-File-KDBX/blobdiff - t/database.t
Add key file saving and refactor some stuff
[chaz/p5-File-KDBX] / t / database.t
index 951ff74fc80cff167002a8de0b41e15b26f1cfc7..86c6f4d8804efda2185cf0d81305979e22524113 100644 (file)
@@ -8,28 +8,50 @@ use FindBin qw($Bin);
 use lib "$Bin/lib";
 use TestCommon;
 
+use File::KDBX;
+use Test::Deep;
 use Test::More;
 
-BEGIN { use_ok 'File::KDBX' }
-
 subtest 'Create a new database' => sub {
     my $kdbx = File::KDBX->new;
 
     $kdbx->add_group(name => 'Meh');
-    ok $kdbx->_is_implicit_root, 'Database starts off with implicit root';
+    ok $kdbx->_has_implicit_root, 'Database starts off with implicit root';
 
-    $kdbx->add_entry({
+    my $entry = $kdbx->add_entry({
         username    => 'hello',
         password    => {value => 'This is a secret!!!!!', protect => 1},
     });
 
-    ok !$kdbx->_is_implicit_root, 'Adding an entry to the root group makes it explicit';
-
-    $kdbx->unlock;
+    ok !$kdbx->_has_implicit_root, 'Adding an entry to the root group makes it explicit';
 
-    # dumper $kdbx->groups;
+    $entry->remove;
+    ok $kdbx->_has_implicit_root, 'Removing group makes the root group implicit again';
+};
 
-    pass;
+subtest 'Clone' => sub {
+    my $kdbx = File::KDBX->new;
+    $kdbx->add_group(name => 'Passwords')->add_entry(title => 'My Entry');
+
+    my $copy = $kdbx->clone;
+    cmp_deeply $copy, $kdbx, 'Clone keeps the same structure and data' or dumper $copy;
+
+    isnt $kdbx, $copy, 'Clone is a different object';
+    isnt $kdbx->root, $copy->root,
+        'Clone root group is a different object';
+    isnt $kdbx->root->groups->[0], $copy->root->groups->[0],
+        'Clone group is a different object';
+    isnt $kdbx->root->groups->[0]->entries->[0], $copy->root->groups->[0]->entries->[0],
+        'Clone entry is a different object';
+
+    my @objects = (@{$copy->all_groups}, @{$copy->all_entries});
+    subtest 'Cloned objects refer to the cloned database' => sub {
+        plan tests => scalar @_;
+        for my $object (@objects) {
+            my $object_kdbx = eval { $object->kdbx };
+            is $object_kdbx, $copy, 'Object: ' . $object->label;
+        }
+    }, @objects;
 };
 
 done_testing;
This page took 0.021191 seconds and 4 git commands to generate.