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
* 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
75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Integration tests for the `pkgmgr config` command.
|
|
|
|
We only exercise non-interactive, read-only subcommands here:
|
|
- pkgmgr config show --all
|
|
- pkgmgr config show pkgmgr
|
|
|
|
Interactive or mutating subcommands like `add`, `edit`, `init`,
|
|
`delete`, `ignore` are intentionally not covered in E2E tests to keep
|
|
the CI environment non-interactive and side-effect free.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import runpy
|
|
import sys
|
|
import unittest
|
|
|
|
|
|
def _run_pkgmgr_config(extra_args: list[str]) -> None:
|
|
"""
|
|
Run `pkgmgr config ...` with the given extra args.
|
|
|
|
Any non-zero SystemExit is treated as a test failure and turned into
|
|
an AssertionError with diagnostics.
|
|
"""
|
|
cmd_repr = "pkgmgr " + " ".join(extra_args)
|
|
original_argv = list(sys.argv)
|
|
|
|
try:
|
|
sys.argv = ["pkgmgr"] + extra_args
|
|
|
|
try:
|
|
runpy.run_module("pkgmgr", run_name="__main__")
|
|
except SystemExit as exc:
|
|
code = exc.code if isinstance(exc.code, int) else str(exc.code)
|
|
if code != 0:
|
|
print("[TEST] SystemExit caught while running", cmd_repr)
|
|
print(f"[TEST] Exit code: {code}")
|
|
raise AssertionError(
|
|
f"{cmd_repr!r} failed with exit code {code}. "
|
|
"Scroll up to inspect the output printed before failure."
|
|
) from exc
|
|
# exit code 0 is success
|
|
|
|
finally:
|
|
sys.argv = original_argv
|
|
|
|
|
|
class TestIntegrationConfigCommands(unittest.TestCase):
|
|
"""
|
|
E2E tests for `pkgmgr config` subcommands.
|
|
"""
|
|
|
|
def test_config_show_all(self) -> None:
|
|
"""
|
|
Run: pkgmgr config show --all
|
|
"""
|
|
_run_pkgmgr_config(["config", "show", "--all"])
|
|
|
|
def test_config_show_pkgmgr(self) -> None:
|
|
"""
|
|
Run: pkgmgr config show pkgmgr
|
|
|
|
Uses 'pkgmgr' as the standard repository identifier.
|
|
"""
|
|
_run_pkgmgr_config(["config", "show", "pkgmgr"])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|