The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Yukki::Test;
use 5.12.1;

use IPC::Run3;
use File::Temp qw( tempdir );
use Probe::Perl;

use Sub::Exporter -setup => {
    exports => [
        qw( yukki yukki_setup yukki_git_init ),
    ],
    groups => {
        default => [ qw( yukki yukki_setup yukki_git_init ) ],
    },
};

# I can't use script_runs() here because I need to send input
my $perl = Probe::Perl->find_perl_interpreter;

sub yukki {
    my $cmd   = shift;
    my $stdin = shift || '';

    my $stdout = '';
    my $stderr = '';

    my @opts;
    if (ref $cmd) {
        @opts = @$cmd;
        $cmd  = shift @opts;
    }

    my $rv = run3([ $perl, '-Mblib', "bin/yukki-$cmd", @opts ], 
        \$stdin, \$stdout, \$stderr);

    my $exit   = $? ? ($? >> 8) : 0;
    my $ok     = !! ( $rv and $exit == 0 );

    Carp::confess("failed running bin/yukki-$cmd: exit code $exit\n$stderr") 
        unless $ok;
}

sub yukki_setup {
    $File::Temp::KEEP_ALL = 1 if $ENV{YUKKI_TEST_KEEP_FILES};

    my $tempdir = tempdir;
    diag("TEMPDIR = $tempdir") if $ENV{YUKKI_TEST_KEEP_FILES};

    yukki([ 'setup', "$tempdir/yukki-test" ]);

    $ENV{YUKKI_CONFIG} = "$tempdir/yukki-test/etc/yukki.conf";
}

sub yukki_git_init {
    my $repo_name = shift;
    yukki([ 'git-init', $repo_name ]);
}

1;