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

use warnings;
use strict;
use 5.10.1;

use Test::More ;
use Config::Model;
use Path::Tiny;
use Test::File::Contents;

use App::Cmd::Tester;
use App::Cme ;

my $arg = shift || '';
my ( $log, $show ) = (0) x 2;

my $trace = $arg =~ /t/ ? 1 : 0;

Config::Model::Exception::Any->Trace(1) if $arg =~ /e/;

my $wr_test = path('wr_test/meta') ;

$wr_test->remove_tree if $wr_test->is_dir;

$wr_test->mkpath;

SKIP: {
    skip "dev list does not yet work" ,1 ;
    my $result = test_app( 'App::Cme' => [ qw/list/]) ;
    like($result->stdout , qr/meta/, "meta sub command is found in dev env");
}

{
   my $result = test_app( 'App::Cme' => [ qw/help meta/]) ;
   like($result->stdout , qr/create configuration checker or editor/, "check help");
}
{
   my $result = test_app( 'App::Cme' => [ qw/meta check fstab -system/]) ;
   like($result->stdout , qr/checking data/, "meta check fstab");
}

# TODO: group tests with Test::Class or Test::Group ?

{
   my $cds_out = $wr_test->child('fstab.cds');
   my $result = test_app( 'App::Cme' => [ qw/meta dump fstab -system/, $cds_out->stringify ]) ;
   like($result->stdout , qr/Dumping Fstab/, "dump fstab model in $cds_out");
   file_contents_like $cds_out,  qr/^class:Fstab/, "check content of $cds_out";
}

{
   my $yaml_out = $wr_test->child('fstab.yml');
   my $result = test_app( 'App::Cme' => [ qw/meta dump-yaml fstab -system/, $yaml_out->stringify ]) ;
   like($result->stdout , qr/Dumping Fstab/, "dump fstab model in $yaml_out");
   file_contents_like $yaml_out,  qr/class:\n\s+Fstab:\n/, "check content of $yaml_out";
}
{
   my $dot_out = $wr_test->child('fstab.dot');
   my $result = test_app( 'App::Cme' => [ qw/meta gen-dot fstab -system/, $dot_out->stringify ]) ;
   like($result->stdout , qr/Creating dot file/, "dot diagram of Fstab in $dot_out");
   file_contents_like $dot_out,  qr/Fstab -> Fstab__FsLine/, "check content of $dot_out";
}


done_testing;