The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl

use strict;
use warnings;

use Test::More;
use Test::File;

use Path::Tiny;
use YAML::Tiny;

use App::Cmd::Tester;
use HiD::App;

{
  my $dir = Path::Tiny->tempdir();
  chdir $dir or BAIL_OUT( "Couldn't get into tempdir" );

  my $result = test_app( 'HiD::App' => [ 'init' ]);

  like $result->stdout    , qr/Enjoy/ , 'expected STDOUT';
  is   $result->stderr    , ''        , 'empty STDERR';
  is   $result->exit_code , 0         , 'success';

  file_exists_ok( "_config.yml" , 'See _config.yml' );

  foreach ( qw/ includes layouts site / ) {
    dir_exists_ok( "_$_" , "See _$_");
  }

  chdir('/');
}

{
  my $dir = Path::Tiny->tempdir();
  chdir $dir or BAIL_OUT( "Couldn't get into tempdir" );

  my $result = test_app( 'HiD::App' => [ 'init' , '--title' , 'My Site' ]);

  like $result->stdout    , qr/Enjoy/ , 'expected STDOUT';
  is   $result->stderr    , ''        , 'empty STDERR';
  is   $result->exit_code , 0         , 'success';

  file_exists_ok( "_config.yml" , 'See _config.yml' );

  my $config = YAML::Tiny->read( '_config.yml' );

  is( $config->[0]{title} , 'My Site' , 'config built correctly' );

  chdir('/');
}


{
  my $dir = Path::Tiny->tempdir();
  chdir $dir or BAIL_OUT( "Couldn't get into tempdir" );

  my $result = test_app( 'HiD::App' => [ 'init' , '--blog' ]);

  like $result->stdout    , qr/Enjoy/ , 'expected STDOUT';
  is   $result->stderr    , ''        , 'empty STDERR';
  is   $result->exit_code , 0         , 'success';

  file_exists_ok( "_config.yml" , 'See _config.yml' );

  foreach ( qw/ includes layouts posts site / ) {
    dir_exists_ok( "_$_" , "See _$_");
  }

  file_exists_ok( "_layouts/post.html" , 'See _layouts/post.html' );

  chdir('/');
}

done_testing();