Files
computer-playbook/tests/unit/cli/deploy/development/test_mirrors.py
T
Environment TestandClaude Sonnet 4.6 1530788dbe feat(mirror): add repository segment to GHCR image path
Image names now follow {owner}/{repository}/mirror/{registry}/{name}
instead of {owner}/mirror/{registry}/{name}.

- GHCRProvider: add `repository` param + `add_args()`/`from_args()` classmethods
  as SPOT for CLI argument registration and provider construction
- sync, resolver: use GHCRProvider.add_args() / from_args() (no duplication)
- Workflows: resolve repository name via scripts/meta/resolve/repository/name.sh
  and pass --ghcr-repository to sync and publish
- mirrors.sh: require and forward GHCR_REPOSITORY env var
- deploy/development/mirrors.py: derive repository from GITHUB_REPOSITORY
- Tests: update expected paths, argv and env fixtures

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 00:20:41 +02:00

45 lines
1.4 KiB
Python

from __future__ import annotations
import unittest
from unittest.mock import MagicMock, patch
from cli.deploy.development.mirrors import generate_ci_mirrors_file
class TestGenerateCiMirrorsFile(unittest.TestCase):
@patch.dict(
"os.environ",
{
"RUNNING_ON_GITHUB": "true",
"GITHUB_REPOSITORY_OWNER": "kevinveenbirkenbach",
"GITHUB_REPOSITORY": "kevinveenbirkenbach/infinito-nexus",
"INFINITO_GHCR_MIRROR_PREFIX": "mirror",
},
clear=False,
)
def test_uses_container_python_from_env_with_fallback(self) -> None:
compose = MagicMock()
out = generate_ci_mirrors_file(compose, inventory_dir="/tmp/inventory")
self.assertEqual(out, "/tmp/inventory/mirrors.yml")
compose.exec.assert_called_once()
called_cmd = compose.exec.call_args.args[0]
self.assertEqual(called_cmd[0:2], ["bash", "-lc"])
self.assertIn('"${PYTHON:-python3}" -m cli.mirror.resolver', called_cmd[2])
self.assertNotIn("python3 -m cli.mirror.resolver", called_cmd[2])
@patch.dict("os.environ", {}, clear=True)
def test_raises_on_missing_required_env(self) -> None:
compose = MagicMock()
with self.assertRaises(RuntimeError):
generate_ci_mirrors_file(compose, inventory_dir="/tmp/inventory")
compose.exec.assert_not_called()
if __name__ == "__main__": # pragma: no cover
unittest.main()