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

use strict;
#use warnings;

use English qw( -no_match_vars );
use Test::More;

if ( $OSNAME =~ /cygwin|win32|windows/i ) {
    plan skip_all => "doesn't work on windows";
}
else {
    plan 'no_plan';
};


use lib "lib";

use_ok('Provision::Unix');
require_ok('Provision::Unix');

# let the testing begin

# basic OO mechanism
my $prov = Provision::Unix->new( debug => 0 );
ok( defined $prov,                 'get Provision::Unix object' );
ok( $prov->isa('Provision::Unix'), 'check object class' );

# error message stack
push @{ $prov->{error} }, { errmsg => 'test error' };

#use Data::Dumper qw( Dumper ); warn Dumper ( $prov );

# show_version
ok( $prov->get_version(), 'get_version');

# find_config
ok( $prov->find_config( file => 'provision.conf', debug => 0, fatal => 0 ),
    'find_config valid' );
ok( !eval { $prov->find_config( fil => 'provision.conf', debug => 0, fatal => 0 ) },
    'find_config missing param' );
ok( !$prov->find_config( file => 'provisoin.conf', debug => 0, fatal => 0 ),
    'find_config invalid param' );

# error
ok( !$prov->error( 'test error', fatal => 0, debug => 0 ),
    'error' );

# error, missing argument
ok( !eval { $prov->error() }, 'error' );

# progress
ok( $prov->progress( num => 10, desc => 'test status' ), 'progress' );

if ( 0 == 1 ) {
    print "\n";
    sleep 1;
    $prov->progress( num => 1, desc => 'performing magic' );
    sleep 1;
    $prov->progress( num => 2, desc => 'slight of hand' );
    sleep 1;
    $prov->progress( num => 3, desc => 'hat trick' );
    sleep 1;
    $prov->progress( num => 4, desc => 'illusion' );
    sleep 1;
    $prov->progress( num => 10, desc => 'curtains closed' );

    print "error testing\n";
    $prov->progress( num => 1, desc => 'start' );
    sleep 1;
    $prov->progress( num => 2, desc => 'working hard' );
    sleep 1;
    $prov->progress( num => 3, desc => 'still working' );
    sleep 1;
    $prov->progress(
        num  => 4,
        desc => 'error',
        err  => 'oh no, a catastrophe!'
    );
}

# find_config
if ( $OSNAME !~ /cygwin|win32/ ) {
    ok( $prov->find_config(
            file  => 'services',
            debug => 0,
            fatal => 0,
        ),
        'find_config valid'
    );

# same as above but with etcdir defined
    ok( $prov->find_config(
            file   => 'services',
            etcdir => '/etc',
            debug  => 0,
            fatal  => 0
        ),
        'find_config valid'
    );
};

# this one fails because etcdir is set incorrect
ok( !$prov->find_config(
        file   => 'services',
        etcdir => '/ect',
        debug  => 0,
        fatal  => 0
    ),
    'find_config invalid dir'
);

# this one fails because the file does not exist
ok( !$prov->find_config(
        file  => 'country-bumpkins.conf',
        debug => 0,
        fatal => 0
    ),
    'find_config non-existent file'
);