File Coverage

File:t/lib/Yukki/Test.pm
Coverage:85.1%

linestmtbrancondsubpodtimecode
1package Yukki::Test;
2
3
3
31
7
use 5.12.1;
3
4
3
3
3
1468
44272
83
use IPC::Run3;
5
3
3
3
1189
13991
90
use Path::Tiny qw( tempdir );
6
3
3
3
1681
2039
58
use Probe::Perl;
7
3
3
3
544
145931
16
use Test2::V0;
8
9
3
3
3
4114
20837
14
use namespace::clean;
10
11
3
2641
use Sub::Exporter -setup => {
12    exports => [
13        qw( yukki yukki_setup yukki_git_init yukki_add_user ),
14    ],
15    groups => {
16        default => [ qw( yukki yukki_setup yukki_git_init yukki_add_user ) ],
17    },
18
3
3
12994
17
};
19
20# I can't use script_runs() here because I need to send input
21my $perl = Probe::Perl->find_perl_interpreter;
22
23sub yukki {
24
8
0
70
    my $cmd   = shift;
25
8
43
    my $stdin = shift || '';
26
27
8
19
    my $stdout = '';
28
8
14
    my $stderr = '';
29
30
8
11
    my @opts;
31
8
26
    if (ref $cmd) {
32
5
11
        @opts = @$cmd;
33
5
11
        $cmd  = shift @opts;
34    }
35
36
8
53
    my $rv = run3([ $perl, "bin/yukki-$cmd", @opts ],
37        \$stdin, \$stdout, \$stderr);
38
39
8
3112792
    my $exit   = $? ? ($? >> 8) : 0;
40
8
134
    my $ok     = !! ( $rv and $exit == 0 );
41
42
8
115
    Carp::confess("failed running bin/yukki-$cmd: exit code $exit\n$stderr")
43        unless $ok;
44}
45
46my $tempdir;
47sub yukki_setup {
48
2
0
12
    $File::Temp::KEEP_ALL = 1 if $ENV{YUKKI_TEST_KEEP_FILES};
49
50
2
8
    $tempdir = tempdir;
51
2
1006
    diag("TEMPDIR = $tempdir") if $ENV{YUKKI_TEST_KEEP_FILES};
52
53
2
7
    yukki([ 'setup', $tempdir->child("yukki-test"), 'skel' ]);
54
55
2
63
    $ENV{YUKKI_CONFIG} = $tempdir->child("yukki-test/etc/yukki.conf");
56}
57
58sub yukki_git_init {
59
3
0
22
    yukki([ 'git-init', @_ ]);
60}
61
62sub yukki_add_user {
63
1
0
11
    my %options = @_;
64
65
1
1
2
6
    my $groups = join "\n", @{ $options{groups} // [] };
66
67
1
7
    yukki('add-user', qq[$options{username}
68$options{password}
69$options{fullname}
70$options{email}
71$groups
72]);
73}
74
751;