use t::boilerplate; use Test::More; use English qw( -no_match_vars ); use File::DataClass::IO; my $osname = lc $OSNAME; my $ntfs = $osname eq 'mswin32' || $osname eq 'cygwin' ? 1 : 0; my $path_ref = [ 't', 'default.json' ]; io( $path_ref )->is_writable or plan skip_all => 'File t/default.json not writable'; $ntfs and plan skip_all => 'File system not supported'; use_ok 'File::DataClass::Schema'; sub test { my ($obj, $method, @args) = @_; my $wantarray = wantarray; local $EVAL_ERROR; my $res = eval { $wantarray ? [ $obj->$method( @args ) ] : $obj->$method( @args ); }; $EVAL_ERROR and return $EVAL_ERROR; return $wantarray ? @{ $res } : $res; } my $schema = File::DataClass::Schema->new ( cache_class => 'none', lock_class => 'none', path => $path_ref, result_source_attributes => { keys => { attributes => [ qw( vals ) ], defaults => { vals => {} }, }, }, storage_class => 'JSON', tempdir => 't', ); my $rs = test( $schema, 'resultset', 'keys' ); my $args = { name => 'dummy', vals => { k1 => 'v1' } }; my $res = test( $rs, 'create', $args ); is $res->id, 'dummy', 'Creates dummy element and inserts'; delete $args->{vals}; $res = test( $rs, 'find', $args ); is $res->vals->{k1}, 'v1', 'Finds defined value'; $args->{vals}->{k1} = 0; $res = test( $rs, 'update', $args ); delete $args->{vals}; $res = test( $rs, 'find', $args ); is $res->vals->{k1}, 0, 'Update with false value'; $args->{vals}->{k1} = undef; $res = test( $rs, 'update', $args ); delete $args->{vals}; $res = test( $rs, 'find', $args ); ok( (not exists $res->vals->{k1}), 'Delete attribute from hash' ); $res = test( $rs, 'delete', $args ); is $res, 'dummy', 'Deletes dummy element'; use File::DataClass::Functions qw( merge_for_update ); eval { merge_for_update() }; like $EVAL_ERROR, qr{ \Qnot specified\E }imx, 'Requires a destination hash ref'; my $dest = { delete_key => 1 }; my $src = { delete_key => undef, key => 'value', key_no_value => undef, }; merge_for_update( \$dest, $src ); is $dest->{key}, 'value', 'Default merge filter'; ok !exists $dest->{delete_key}, 'Deletes unwanted keys'; merge_for_update( \$dest ); is $dest->{key}, 'value', 'No source required'; $dest = {}; $src = { new_key => {} }; my $updated = merge_for_update( \$dest, $src ); ok exists $dest->{new_key}, 'Adds empty hash'; done_testing; # Local Variables: # mode: perl # tab-width: 3 # End: