The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vim: set ts=2 sts=2 sw=2 expandtab smarttab:
use strict;
use warnings;
use Test::More 0.96;
use lib 't/lib';

foreach my $name ( map { "Test::Bundle$_" } '', '::Easy' ) {
  my $BNAME = '@CLTB';
  my $mod = "Dist::Zilla::Config::Slicer::$name";
  eval "require $mod" or die $@;

  my @expected = (
    ["$BNAME/Test::Compile"  => e('Test::Compile') => {fake_home => 1}],
    ["$BNAME/MetaNoIndex"    => e('MetaNoIndex')   => { file => ['.secret'], directory => [qw(t xt inc)] }],
    ["$BNAME/Scan4Prereqs"   => e('AutoPrereqs')   => { }],
    ["$BNAME/GoodbyeGarbage" => e('PruneCruft')    => { }],
    ["$BNAME/DontNeedThese"  => e('PruneCruft')    => { }],
  );

  my $bundled = sub { $mod->bundle_config({ name => $BNAME, payload => shift }) };
  my $i = 0;

  is_deeply
    [ $bundled->({}) ],
    [ @expected ],
    "default plugins bundled for $name";

  is_deeply
    [ $bundled->({'Test::Compile.fake_home' => 0}) ],
    [ overwrite(\@expected, $i++, { fake_home => 0 }) ],
    "overwrote simple scalar for $name";

  is_deeply
    [ $bundled->({'MetaNoIndex.directory'  => 'goober'}) ],
    [ overwrite(\@expected, $i++, { file => ['.secret'], directory => [qw(t xt inc goober)] })],
    "append to directory for $name";

  is_deeply
    [ $bundled->({'Scan4Prereqs.skip' => 'Goober'}) ],
    [ overwrite(\@expected, $i++, { skip => 'Goober' })],
    "overwrote by name/alias for $name";

  is_deeply
    [ $bundled->({'PruneCruft.except[]' => '\.gitignore'}) ],
    [ overwrite(\@expected, map { ($i + $_, { except => ['\.gitignore'] }) } 0, 1)],
    "insert as directory by package for $name (into multiple plugins)";
  $i += 2;
}

done_testing;

sub e { Dist::Zilla::Util->expand_config_package_name($_[0]); }

sub overwrite {
  my $a = shift;
  my @e = map { [ @$_ ] } @$a; # copy
  while(@_){
    my ($i, $p) = splice(@_, 0, 2);
    $e[ $i ]->[2] = $p;
  }
  return @e;
}