Files
pkgmgr/tests/e2e/test_tools_help.py
Kevin Veen-Birkenbach f5d428950e
Some checks failed
Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-env-virtual (push) Has been cancelled
Mark stable commit / test-env-nix (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
**Replace main.py with module-based entry point and unify CLI execution**
* Remove legacy *main.py* and introduce *pkgmgr* module entry via *python -m pkgmgr*
* Add ***main**.py* as the canonical entry point delegating to the CLI
* Export *PYTHONPATH=src* in Makefile to ensure reliable imports in dev and CI
* Update setup scripts (venv & nix) to use module execution
* Refactor all E2E tests to execute the real module entry instead of file paths

This aligns pkgmgr with standard Python packaging practices and simplifies testing, setup, and execution across environments.

https://chatgpt.com/share/693c9056-716c-800f-b583-fc9245eab2b4
2025-12-12 22:59:46 +01:00

66 lines
1.8 KiB
Python

"""
E2E/Integration tests for the tool-related subcommands' --help output.
We assert that calling:
- pkgmgr explore --help
- pkgmgr terminal --help
- pkgmgr code --help
completes successfully. For --help, argparse exits with SystemExit(0),
which we treat as success and suppress in the helper.
"""
from __future__ import annotations
import os
import runpy
import sys
import unittest
from typing import List
def _run_main(argv: List[str]) -> None:
"""
Helper to run main.py with the given argv.
This mimics a "pkgmgr ..." invocation in the E2E container.
For --help invocations, argparse will call sys.exit(0), which raises
SystemExit(0). We treat this as success and only re-raise non-zero
exit codes.
"""
old_argv = sys.argv
try:
sys.argv = ["pkgmgr"] + argv
try:
runpy.run_module("pkgmgr", run_name="__main__")
except SystemExit as exc: # argparse uses this for --help
# SystemExit.code can be int, str or None; for our purposes:
code = exc.code
if code not in (0, None):
# Non-zero exit code -> real error.
raise
# For 0/None: treat as success and swallow the exception.
finally:
sys.argv = old_argv
class TestToolsHelp(unittest.TestCase):
"""
E2E/Integration tests for tool commands' --help screens.
"""
def test_explore_help(self) -> None:
"""Ensure `pkgmgr explore --help` runs successfully."""
_run_main(["explore", "--help"])
def test_terminal_help(self) -> None:
"""Ensure `pkgmgr terminal --help` runs successfully."""
_run_main(["terminal", "--help"])
def test_code_help(self) -> None:
"""Ensure `pkgmgr code --help` runs successfully."""
_run_main(["code", "--help"])
if __name__ == "__main__":
unittest.main()