The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 25;
use Test::Exception;

use Narada::Config qw( set_config get_config );

use File::Temp qw( tempdir );
chomp(my $cwd=`pwd`); $ENV{PATH} = "$cwd/blib/script:$ENV{PATH}";
chdir tempdir( CLEANUP => 1 )
    and system('narada-new') == 0
    or die "Unable to create project: $!";

my @badvar = ('a b', qw( a:b $a a+b a\b ./ a/./b ../ a/../b dir/ version/ ));

throws_ok { set_config() }              qr/Usage:/,     'no params';
throws_ok { set_config(1) }             qr/Usage:/,     'not enough params';
throws_ok { set_config(1, 2, 3) }       qr/Usage:/,     'too many params';

throws_ok { set_config($_, q{}) }       qr/bad config:/,
    "bad variable: $_"
    for @badvar;

ok(!-e 'config/test',       'no file');
set_config('test', q{});
ok(-e 'config/test',        'file created');
ok(-z 'config/test',        'file empty');

set_config('test', ' ');
ok(1 == -s 'config/test',   'file updated');

SKIP: {
    skip 'non-root user required', 2 if $< == 0;
    chmod 0, 'config' or die "chmod: $!";

    open my $olderr, '>&', \*STDERR                     or die "open: $!";
    open STDERR, '> /dev/null'                          or die "open: $!";
    throws_ok { set_config('dir/test', q{}) }   qr/mkdir:/,
        'mkdir bad permissions';
    open STDERR, '>&', $olderr                          or die "open: $!";

    throws_ok { set_config('test', q{}) }       qr/rename to config\/test:/,
        'rename bad permissions';

    chmod 0755, 'config' or die "chmod: $!";
}

my $value = "line1\nline2";
ok(!-e 'config/dir',            'no dir');
set_config('dir/dir2/test', $value);
ok(-d 'config/dir',             'dir created');
ok(-d 'config/dir/dir2',        'dir2 created');
ok(-s 'config/dir/dir2/test',   'file created');
is(get_config('dir/dir2/test'), $value, 'value ok');

chdir '/';  # work around warnings in File::Temp CLEANUP handler