Read and update file_hashes.json on deploy; add --force-upload and tests. Co-authored-by: Cursor <cursoragent@cursor.com>
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
"""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()
|