Files
pkgmgr/tests/e2e/test_mirror_visibility_smoke.py
Kevin Veen-Birkenbach 9802293871
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 / lint-shell (push) Has been cancelled
Mark stable commit / lint-python (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
***feat(mirror): add remote repository visibility support***
* Add mirror visibility subcommand and provision --public flag
* Implement core visibility API with provider support (GitHub, Gitea)
* Extend provider interface and EnsureStatus
* Add unit, integration and e2e tests for visibility handling

https://chatgpt.com/share/6946a44e-4f48-800f-8124-9c0b9b2b6b04
2025-12-20 14:26:55 +01:00

128 lines
4.2 KiB
Python

# tests/e2e/test_mirror_visibility_smoke.py
from __future__ import annotations
import os
import shutil
import subprocess
import sys
import unittest
from pathlib import Path
class TestMirrorVisibilityE2ESmoke(unittest.TestCase):
"""
E2E smoke tests for the new mirror visibility feature.
We intentionally DO NOT execute provider APIs or require tokens.
The tests only verify that:
- CLI exposes the new subcommands / flags via --help
- Python public API surface is wired and importable
IMPORTANT:
- `python -m pkgmgr.cli` is NOT valid unless pkgmgr/cli/__main__.py exists.
- In this repo, `from pkgmgr.cli import main` is the stable entrypoint.
"""
@staticmethod
def _project_root() -> Path:
# tests/e2e/... -> project root is parents[2]
return Path(__file__).resolve().parents[2]
def _run(self, args: list[str]) -> subprocess.CompletedProcess[str]:
env = os.environ.copy()
env.setdefault("PYTHONUNBUFFERED", "1")
return subprocess.run(
args,
cwd=str(self._project_root()),
env=env,
text=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
check=False,
)
def _run_pkgmgr(self, pkgmgr_args: list[str]) -> subprocess.CompletedProcess[str]:
"""
Run the pkgmgr CLI in a way that works both:
- when the console script `pkgmgr` is available on PATH
- when only source imports are available
We prefer the console script if present because it's closest to real E2E.
"""
exe = shutil.which("pkgmgr")
if exe:
return self._run([exe, *pkgmgr_args])
# Fallback to a Python-level entrypoint that exists in your repo:
# The stacktrace showed: from pkgmgr.cli import main
# We call it with argv simulation.
code = r"""
import sys
from pkgmgr.cli import main
sys.argv = ["pkgmgr"] + sys.argv[1:]
main()
"""
return self._run([sys.executable, "-c", code, *pkgmgr_args])
def test_cli_help_lists_visibility_and_provision_public(self) -> None:
# `pkgmgr mirror --help` should mention "visibility"
p = self._run_pkgmgr(["mirror", "--help"])
self.assertEqual(
p.returncode,
0,
msg=f"Expected exit code 0, got {p.returncode}\n\nOutput:\n{p.stdout}",
)
out_lower = p.stdout.lower()
self.assertIn("visibility", out_lower)
self.assertIn("provision", out_lower)
# `pkgmgr mirror provision --help` should show `--public`
p = self._run_pkgmgr(["mirror", "provision", "--help"])
self.assertEqual(
p.returncode,
0,
msg=f"Expected exit code 0, got {p.returncode}\n\nOutput:\n{p.stdout}",
)
self.assertIn("--public", p.stdout)
# `pkgmgr mirror visibility --help` should show choices {private, public}
p = self._run_pkgmgr(["mirror", "visibility", "--help"])
self.assertEqual(
p.returncode,
0,
msg=f"Expected exit code 0, got {p.returncode}\n\nOutput:\n{p.stdout}",
)
out_lower = p.stdout.lower()
self.assertIn("private", out_lower)
self.assertIn("public", out_lower)
def test_python_api_surface_is_exposed(self) -> None:
# Ensure public exports exist and setup_mirrors has ensure_visibility in signature.
code = r"""
import inspect
from pkgmgr.actions import mirror as mirror_actions
from pkgmgr.core import remote_provisioning as rp
assert hasattr(mirror_actions, "set_mirror_visibility"), "set_mirror_visibility missing in pkgmgr.actions.mirror"
assert hasattr(rp, "set_repo_visibility"), "set_repo_visibility missing in pkgmgr.core.remote_provisioning"
sig = inspect.signature(mirror_actions.setup_mirrors)
assert "ensure_visibility" in sig.parameters, "setup_mirrors missing ensure_visibility parameter"
print("OK")
"""
p = self._run([sys.executable, "-c", code])
self.assertEqual(
p.returncode,
0,
msg=f"Expected exit code 0, got {p.returncode}\n\nOutput:\n{p.stdout}",
)
self.assertIn("OK", p.stdout)
if __name__ == "__main__":
unittest.main()