"""Tests for deploy_manifest helpers (host Python).""" import json import os import tempfile import unittest from deploy_manifest import ( MANIFEST_FILENAME, build_manifest_bytes, normalize_remote_path, parse_manifest, sha256_hex_file, ) class DeployManifestTests(unittest.TestCase): def test_normalize_remote_path(self): self.assertEqual(normalize_remote_path("/patterns/chase.py"), "patterns/chase.py") self.assertEqual(normalize_remote_path("main.py"), "main.py") def test_round_trip_manifest(self): files = {"main.py": "abc", "patterns/x.py": "def"} blob = build_manifest_bytes(files) parsed = parse_manifest(blob) self.assertEqual(parsed, files) doc = json.loads(blob.decode()) self.assertEqual(doc["version"], 1) self.assertEqual(doc["algorithm"], "sha256") def test_parse_manifest_invalid(self): self.assertEqual(parse_manifest(b"not json"), {}) self.assertEqual(parse_manifest(b'{"files": "nope"}'), {}) def test_sha256_hex_file(self): with tempfile.NamedTemporaryFile(delete=False) as f: f.write(b"hello") path = f.name try: self.assertEqual( sha256_hex_file(path), "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824", ) finally: os.unlink(path) def test_manifest_filename(self): self.assertEqual(MANIFEST_FILENAME, "file_hashes.json") if __name__ == "__main__": unittest.main()