import tempfile import time import unittest from pathlib import Path from backend.utils import cache as cache_utils class CacheUtilsTests(unittest.TestCase): def setUp(self) -> None: self._tmp_dir = tempfile.TemporaryDirectory() self._old_cache_dir = cache_utils.CACHE_DIR cache_utils.CACHE_DIR = Path(self._tmp_dir.name) / "cache" self._work_dir = Path(self._tmp_dir.name) / "work" self._work_dir.mkdir(parents=True, exist_ok=True) self._src_file = self._work_dir / "sample.txt" self._src_file.write_text("hello", encoding="utf-8") def tearDown(self) -> None: cache_utils.CACHE_DIR = self._old_cache_dir self._tmp_dir.cleanup() def test_get_file_hash_returns_none_for_missing_file(self) -> None: missing = self._work_dir / "missing.txt" self.assertIsNone(cache_utils.get_file_hash(missing)) def test_save_and_load_round_trip(self) -> None: payload = {"value": 123, "ok": True} saved = cache_utils.save_to_cache(self._src_file, payload, model="m1", operation="transcribe") self.assertTrue(saved) loaded = cache_utils.load_from_cache(self._src_file, model="m1", operation="transcribe") self.assertEqual(payload, loaded) def test_load_from_cache_respects_max_age(self) -> None: payload = {"value": 999} self.assertTrue(cache_utils.save_to_cache(self._src_file, payload, operation="transcribe")) time.sleep(0.02) expired = cache_utils.load_from_cache(self._src_file, operation="transcribe", max_age=0.001) self.assertIsNone(expired) def test_clear_cache_deletes_files(self) -> None: self.assertTrue(cache_utils.save_to_cache(self._src_file, {"a": 1}, operation="transcribe")) self.assertTrue(cache_utils.save_to_cache(self._src_file, {"a": 2}, operation="summarize")) deleted_count = cache_utils.clear_cache() self.assertGreaterEqual(deleted_count, 1) size_bytes, file_count = cache_utils.get_cache_size() self.assertEqual(size_bytes, 0) self.assertEqual(file_count, 0) if __name__ == "__main__": unittest.main()