File: | t/lib/Yukki/Test.pm |
Coverage: | 85.1% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package 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 | ||||||
21 | my $perl = Probe::Perl->find_perl_interpreter; | ||||||
22 | |||||||
23 | sub 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 | |||||||
46 | my $tempdir; | ||||||
47 | sub 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 | |||||||
58 | sub yukki_git_init { | ||||||
59 | 3 | 0 | 22 | yukki([ 'git-init', @_ ]); | |||
60 | } | ||||||
61 | |||||||
62 | sub 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 | |||||||
75 | 1; |