mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-07-17 22:14:25 +02:00
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
import unittest
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
|
|
class CLIHelpIntegrationTest(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
# Projekt-Root ermitteln
|
|
cls.project_root = os.path.abspath(
|
|
os.path.join(os.path.dirname(__file__), '..', '..')
|
|
)
|
|
cls.main_py = os.path.join(cls.project_root, 'main.py')
|
|
cls.cli_dir = os.path.join(cls.project_root, 'cli')
|
|
cls.python = sys.executable
|
|
|
|
def test_all_cli_commands_help(self):
|
|
"""
|
|
Iteriere über alle .py Dateien in cli/, baue daraus die
|
|
Subcommand-Pfade und prüfe, dass `python main.py <cmd> --help`
|
|
mit Exit-Code 0 endet.
|
|
"""
|
|
for root, _, files in os.walk(self.cli_dir):
|
|
for fname in files:
|
|
if not fname.endswith('.py') or fname.startswith('__'):
|
|
continue
|
|
|
|
# Bestimme Subcommand-Segmente
|
|
rel_dir = os.path.relpath(root, self.cli_dir)
|
|
cmd_name = os.path.splitext(fname)[0]
|
|
if rel_dir == '.':
|
|
segments = [cmd_name]
|
|
else:
|
|
segments = rel_dir.split(os.sep) + [cmd_name]
|
|
|
|
with self.subTest(command=' '.join(segments)):
|
|
cmd = [self.python, self.main_py] + segments + ['--help']
|
|
result = subprocess.run(
|
|
cmd, capture_output=True, text=True
|
|
)
|
|
self.assertEqual(
|
|
result.returncode, 0,
|
|
msg=(
|
|
f"Command `{ ' '.join(cmd) }` failed\n"
|
|
f"stdout:\n{result.stdout}\n"
|
|
f"stderr:\n{result.stderr}"
|
|
)
|
|
)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|