The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Pg::Loader::Misc_2 qw/ add_defaults /;
use Pg::Loader::Misc qw/ subset  /;
use Test::More qw( no_plan );
use Test::Exception;


*add_defaults = \& Pg::Loader::Misc_2::add_defaults ;
*subset       = \& Pg::Loader::Misc::subset       ;

my $m = { apple  => {  } };
my $s = { apple  => { null => 'na', use_template=>undef } ,
          fruit  => { }, };
my $a = { apple  => { use_template=>'fruit' } ,
          fruit  => { template=>1, format=>'csv', null=>'aa'}, };
my $b = { apple  => { use_template=>'fruit' } ,
          fruit  => { template=>undef, only_cols=>1, 
                      format=>'csv', null=>'bb'}, };

add_defaults( $m, 'apple');  my $mm = $m->{apple};
add_defaults( $s, 'apple');  my $ss = $s->{apple};
add_defaults( $a, 'apple');  my $aa = $a->{apple};
add_defaults( $b, 'apple');  my $bb = $b->{apple};

is_deeply [ @{$aa}{qw( format copy copy_columns)}], [ qw( csv * *) ];
is_deeply [ @{$aa}{qw( copy_every filename     )}], [ qw( 10000 STDIN )];
is_deeply [ @{$aa}{qw( field_sep)}], [ ',' ];


is   $aa->{ null   }   ,  '$$aa$$' ;
is   $aa->{ format }   ,  'csv'            ;

is_deeply [ @{$bb}{qw( table format only_cols )}], 
          [        qw( apple csv 1)       ];

my $mandatory = [qw( copy     copy_every    null       copy_columns
		     format   quotechar     table      field_sep
		     mode     reject_data   filename   client_encoding
                     lc_time  datestyle     lc_monetary  
                     lc_type  lc_numeric    lc_messages 
             )];

ok subset  [keys %$aa], $mandatory  ;

is_deeply [ @{$mm}{qw( copy copy_every filename      format table)}],
	  [        qw( *    10000      STDIN         text    apple)];

is   $bb->{ null }  ,  '$$bb$$' ;
is   $mm->{ null }  ,  '$$\NA$$' ;
is   $ss->{ null }  ,  '$$na$$'  ;


# the following fail because they exit(1) instead of die()
#dies_ok { add_defaults ( $s, 'appl') };
#dies_ok { add_defaults ( $s, '') };
#dies_ok { add_defaults ( $s, undef) };