from __future__ import annotations import gzip import json import tempfile import unittest from pathlib import Path from polymarket_collector.storage import RotatingJsonlWriter class StorageTests(unittest.IsolatedAsyncioTestCase): async def test_rotates_and_compresses_jsonl(self) -> None: with tempfile.TemporaryDirectory() as temporary: root = Path(temporary) writer = RotatingJsonlWriter( root, "test", rotation_seconds=3600, max_file_bytes=1, flush_interval_seconds=1, ) await writer.start() await writer.write({"hello": "world"}) await writer.close() files = list(root.rglob("*.jsonl.gz")) self.assertEqual(len(files), 1) with gzip.open(files[0], "rt", encoding="utf-8") as handle: self.assertEqual(json.loads(handle.readline()), {"hello": "world"}) self.assertEqual(list(root.rglob("*.part")), []) async def test_recovers_part_file_on_start(self) -> None: with tempfile.TemporaryDirectory() as temporary: root = Path(temporary) part = root / "2026/07/22/crashed.jsonl.part" part.parent.mkdir(parents=True) part.write_text('{"recovered":true}\n', encoding="utf-8") writer = RotatingJsonlWriter( root, "test", rotation_seconds=3600, max_file_bytes=1024, flush_interval_seconds=1, ) await writer.start() await writer.close() recovered = list(root.rglob("*.jsonl.gz")) self.assertEqual(len(recovered), 1) with gzip.open(recovered[0], "rt", encoding="utf-8") as handle: self.assertEqual(json.loads(handle.readline()), {"recovered": True}) if __name__ == "__main__": unittest.main()