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
* 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
128 lines
4.2 KiB
Python
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()
|