tests/test_create_repository_set_adapter.py
import subprocess
import tempfile
import unittest
import zipfile
from pathlib import Path
SCRIPT = Path(__file__).parents[1] / "bin" / "create-repository-set.py"
class CreateRepositorySetAdapterTest(unittest.TestCase):
def test_creates_complete_set_atomically(self):
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
tool = root / "tool.py"
tool.write_text(
"""import sys,zipfile
from pathlib import Path
source=Path(sys.argv[1]); output=Path(sys.argv[2])
with zipfile.ZipFile(output,'w') as archive:
archive.writestr(source.name + '/README.md','fixture')
""",
encoding="utf-8",
)
first = root / "first"; first.mkdir()
second = root / "second"; second.mkdir()
output = root / "result"
result = subprocess.run(
[
"python3", str(SCRIPT), "--tool", str(tool),
"--repository", f"first={first}",
"--repository", f"second={second}",
"--output-dir", str(output),
],
check=False,
)
self.assertEqual(result.returncode, 0)
self.assertEqual(sorted(path.name for path in output.iterdir()), ["first.zip", "second.zip"])
self.assertTrue(all(zipfile.is_zipfile(path) for path in output.iterdir()))
def test_rejects_existing_output_without_change(self):
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
source = root / "source"; source.mkdir()
output = root / "result"; output.mkdir()
sentinel = output / "sentinel"; sentinel.write_text("keep", encoding="utf-8")
result = subprocess.run(
[
"python3", str(SCRIPT), "--tool", str(root / "missing.py"),
"--repository", f"source={source}", "--output-dir", str(output),
],
check=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
)
self.assertNotEqual(result.returncode, 0)
self.assertEqual(sentinel.read_text(encoding="utf-8"), "keep")
if __name__ == "__main__":
unittest.main()