use Test::More tests => 11;
use Test::Exception;

use strict; use warnings;

use File::Spec;
use Try::Tiny;
use Module::Build;

my $this_class = 'Bot::Cobalt::Logger::Output::File';

my $basedir = try {
  Module::Build->current->base_dir
} catch {
  die "\nFailed to retrieve base_dir() from Module::Build\n",
    "are you trying to run the test suite outside of `./Build`?\n"
};

my $vardir = File::Spec->catdir( $basedir, 'var' );
my $test_log_path = File::Spec->catfile( $vardir, 'testing.log' );

use_ok( $this_class );

dies_ok( sub { $this_class->new }, 'new() with no args dies' );

my $output = new_ok( $this_class => [
    file => $test_log_path,
  ],
);

is( $output->file, $test_log_path, 'file() returns log path' );

is( $output->perms, 0666, 'perms() returned 0666' );

ok( $output->_write("This is a test string"), '_write()' );

ok( -e $test_log_path, 'Log file was created' );

my $contents = do { local (@ARGV, $/) = $test_log_path ; <> };

chomp $contents;
cmp_ok( $contents, 'eq', "This is a test string" );

## FIXME test mode / perms ?

unlink $test_log_path;

ok( 
  $output->_write("Testing against fresh log"), 
  '_write() after unlink()' 
);

ok( -e $test_log_path, 'Log file was recreated' );

$contents = do { local (@ARGV, $/) = $test_log_path ; <> };
chomp $contents;
cmp_ok( $contents, 'eq', "Testing against fresh log" );

unlink $test_log_path;
