| 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; | ||||||