feat(cli): skip unchanged files using device file_hashes.json
Read and update file_hashes.json on deploy; add --force-upload and tests. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
52
tests/test_deploy_manifest.py
Normal file
52
tests/test_deploy_manifest.py
Normal file
@@ -0,0 +1,52 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user