App-GHGen
view release on metacpan or search on metacpan
t/extended_tests.t view on Meta::CPAN
like($yaml, qr/python-version/, 'uses python-version matrix');
like($yaml, qr/setup-python/, 'includes setup-python action');
like($yaml, qr/pytest/, 'includes pytest command');
};
subtest 'Generator::generate_workflow - rust workflow has expected structure' => sub {
my $yaml = generate_workflow('rust');
like($yaml, qr/Rust CI/, 'rust workflow named correctly');
like($yaml, qr/cargo/, 'includes cargo commands');
like($yaml, qr/clippy/, 'includes clippy linting');
};
subtest 'Generator::generate_workflow - go workflow has expected structure' => sub {
my $yaml = generate_workflow('go');
like($yaml, qr/Go CI/, 'go workflow named correctly');
like($yaml, qr/setup-go/, 'includes setup-go action');
like($yaml, qr/go test/, 'includes go test command');
};
subtest 'Generator::generate_workflow - ruby workflow has expected structure' => sub {
my $yaml = generate_workflow('ruby');
like($yaml, qr/Ruby CI/, 'ruby workflow named correctly');
like($yaml, qr/ruby-version/, 'uses ruby-version matrix');
like($yaml, qr/bundle exec/, 'includes bundler execution');
};
subtest 'Generator::generate_workflow - java workflow has expected structure' => sub {
my $yaml = generate_workflow('java');
like($yaml, qr/Java CI/, 'java workflow named correctly');
like($yaml, qr/java-version/, 'uses java-version matrix');
like($yaml, qr/actions\/setup-java/, 'includes setup-java action');
like($yaml, qr/mvn/, 'includes Maven commands');
};
subtest 'Generator::generate_workflow - cpp workflow has expected structure' => sub {
my $yaml = generate_workflow('cpp');
like($yaml, qr/C\+\+ CI/, 'cpp workflow named correctly');
like($yaml, qr/cmake/i, 'includes cmake commands');
like($yaml, qr/ctest/i, 'includes ctest invocation');
};
subtest 'Generator::generate_workflow - php workflow has expected structure' => sub {
my $yaml = generate_workflow('php');
like($yaml, qr/PHP CI/, 'php workflow named correctly');
like($yaml, qr/php-version/, 'uses php-version matrix');
like($yaml, qr/composer/, 'includes composer');
like($yaml, qr/phpunit/i, 'includes phpunit');
};
subtest 'Generator::generate_workflow - docker workflow has expected structure' => sub {
my $yaml = generate_workflow('docker');
like($yaml, qr/Docker Build/, 'docker workflow named correctly');
like($yaml, qr/build-push-action/, 'includes build-push action');
like($yaml, qr/login-action/, 'includes docker login');
};
subtest 'Generator::generate_workflow - static workflow has expected structure' => sub {
my $yaml = generate_workflow('static');
like($yaml, qr/Deploy Static Site/, 'static workflow named correctly');
like($yaml, qr/deploy-pages/, 'includes deploy-pages action');
like($yaml, qr/upload-pages-artifact/, 'includes artifact upload');
};
# =============================================================================
# 6. App::GHGen::Interactive â _customize_* via mocked STDIN
# =============================================================================
subtest 'Interactive::customize_workflow - perl: collects all expected keys' => sub {
# Feed answers for all prompts in _customize_perl.
# Sequence: perl_versions, os, linter, unused, critic, coverage, branches.
my @answers = (
'1,2,3', # perl_versions: 5.40,5.38,5.36
'1,2', # os: ubuntu+macos
'y', # enable_linter
'n', # enable_linter_unused
'y', # enable_critic
'y', # enable_coverage
'main', # branches
);
my $config = with_stdin(\@answers, sub { customize_workflow('perl') });
ok(exists $config->{perl_versions}, 'perl_versions key present');
ok(exists $config->{enable_linter}, 'enable_linter key present');
ok(exists $config->{enable_critic}, 'enable_critic key present');
ok(exists $config->{enable_coverage}, 'enable_coverage key present');
ok(exists $config->{branches}, 'branches key present');
is($config->{enable_linter}, 1, 'linter enabled (y)');
is($config->{enable_linter_unused}, 0, 'unused disabled (n)');
is_deeply($config->{branches}, ['main'], 'branches parsed correctly');
};
subtest 'Interactive::customize_workflow - node: collects expected keys' => sub {
my @answers = (
'1,2', # node_versions
'1', # package_manager (npm)
'y', # enable_lint
'y', # enable_build
'main', # branches
);
my $config = with_stdin(\@answers, sub { customize_workflow('node') });
ok(exists $config->{node_versions}, 'node_versions key present');
ok(exists $config->{package_manager}, 'package_manager key present');
is($config->{package_manager}, 'npm', 'npm selected (index 0)');
};
subtest 'Interactive::customize_workflow - python: collects expected keys' => sub {
my @answers = (
'1,2', # python_versions
'y', # enable_flake8
'n', # enable_black
'y', # enable_coverage
'main', # branches
);
my $config = with_stdin(\@answers, sub { customize_workflow('python') });
ok(exists $config->{python_versions}, 'python_versions key present');
is($config->{enable_flake8}, 1, 'flake8 enabled');
is($config->{enable_black}, 0, 'black disabled');
is($config->{enable_coverage}, 1, 'coverage enabled');
};
subtest 'Interactive::customize_workflow - rust: collects expected keys' => sub {
my @answers = ('y', 'y', 'y', 'main');
( run in 1.144 second using v1.01-cache-2.11-cpan-b16cb0d3907 )