The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use t::narada1::share; guard my $guard;

require (wd().'/blib/script/narada-new-1');


umask 0022;
my $data_pos = tell DATA;
sub _main {
    seek DATA, $data_pos, 0;
    goto &main;
}

my $dst = tempdir('narada1.project.XXXXXX');


# Usage
throws_ok { _main(1, 2, 3) }             qr/Usage:/,  'too many params';

# Wrong destination
mkdir("$dst/somedir")                               or die "mkdir: $!";
throws_ok { _main($dst) }                qr/directory not empty/i;
rmdir "$dst/somedir"                                or die "rmdir: $!";
system("touch \Q$dst\E/somefile") == 0              or die "system: touch: $?";
throws_ok { _main($dst) }                qr/directory not empty/i;
throws_ok { _main("$dst/somefile") }     qr/not a directory/i;
unlink "$dst/somefile"                              or die "unlink: $!";

# Wrong destination permissions
SKIP: {
    skip 'non-root user required', 3 if $< == 0;
    chmod 0, $dst                                       or die "chmod: $!";
    throws_ok { _main($dst) }              qr/opendir:/;
    throws_ok { _main("$dst/somedir") }    qr/mkdir:/;
    chmod 0500, $dst                                    or die "chmod: $!";
    open my $olderr, '>&', \*STDERR                     or die "open: $!";
    open STDERR, '> /dev/null'                          or die "open: $!";
    throws_ok { _main($dst) }              qr/unpack failed/i;
    open STDERR, '>&', $olderr                          or die "open: $!";
    chmod 0700, $dst                                    or die "chmod: $!";
}

# OK - dir exists
lives_ok  { _main($dst) }              'all ok - dir exists';
chomp(my $version = `cat \Q$dst/config/version`);
$dst =~ m{([^/]+)\z};
is($version, "$1-0.0.000", 'version');

# OK - dir not exists
my $dst3 = tempdir('narada1.project.XXXXXX');
rmdir $dst3                                         or die "rmdir: $!";
lives_ok  { _main($dst3) }              'all ok - dir not exists';

# OK - current dir
my $dst4 = tempdir('narada1.project.XXXXXX');
chdir $dst4                                         or die "chdir: $!";
lives_ok  { _main() }                   'all ok - current dir';

$dst4 =~ m{([^/]+)\z};
ok(-s "var/patch/$1-0.0.000.tar",       'initial backup created');

is((stat 'config/version')[2] & 07777, 0644, 'config/version permissions');


chdir q{/};
done_testing();