43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
"""Guard cache invalidation against stale application code and needless metadata rebuilds."""
|
|
from pathlib import Path
|
|
import subprocess
|
|
import tempfile
|
|
import unittest
|
|
from unittest.mock import patch
|
|
import ci
|
|
|
|
|
|
class FingerprintTests(unittest.TestCase):
|
|
def test_build_inputs_invalidate_but_metadata_and_caches_do_not(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
root = Path(directory)
|
|
subprocess.run(["git", "init", "-q", str(root)], check=True)
|
|
(root / ".gitignore").write_text(".artifacts/\n**/.next/\n")
|
|
doc = root / "apps/docs/src/lib/docs.ts"
|
|
doc.parent.mkdir(parents=True)
|
|
doc.write_text("# Original\n")
|
|
package = root / "package.json"
|
|
package.write_text('{"private":true}\n')
|
|
with patch.object(ci, "ROOT", root):
|
|
original = ci.fingerprint()
|
|
(root / "README.md").write_text("metadata only\n")
|
|
cache = root / "apps/docs/.next/cache/state"
|
|
cache.parent.mkdir(parents=True)
|
|
cache.write_text("compiler cache\n")
|
|
deploy = root / "scripts/deploy.py"
|
|
deploy.parent.mkdir(parents=True)
|
|
deploy.write_text("# deployment-only configuration\n")
|
|
self.assertEqual(original, ci.fingerprint())
|
|
doc.write_text("# Updated\n")
|
|
self.assertNotEqual(original, ci.fingerprint())
|
|
doc.write_text("# Original\n")
|
|
package.write_text('{"private":true,"version":"2"}\n')
|
|
self.assertNotEqual(original, ci.fingerprint())
|
|
package.write_text('{"private":true}\n')
|
|
doc.rename(doc.with_name("renamed.md"))
|
|
self.assertNotEqual(original, ci.fingerprint())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|