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 )