68d5996165
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
import asyncio
|
|
import json
|
|
import pytest
|
|
from unittest.mock import patch, AsyncMock
|
|
|
|
from src.snapshot_downloader import SnapshotDownloader
|
|
|
|
|
|
def _downloader(tmp_path):
|
|
return SnapshotDownloader(output_dir=str(tmp_path), api_key="test-key")
|
|
|
|
|
|
# --- load_snapshot_cache ---
|
|
|
|
def test_load_snapshot_cache_missing(tmp_path):
|
|
assert _downloader(tmp_path).load_snapshot_cache() == []
|
|
|
|
|
|
def test_load_snapshot_cache_returns_data(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
snapshots = [{"id": "1", "notes": "hello"}]
|
|
(tmp_path / "snapshots_cache.json").write_text(json.dumps(snapshots))
|
|
assert d.load_snapshot_cache() == snapshots
|
|
|
|
|
|
def test_load_snapshot_cache_malformed_returns_empty(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
(tmp_path / "snapshots_cache.json").write_text("not json{{{")
|
|
assert d.load_snapshot_cache() == []
|
|
|
|
|
|
def test_load_snapshot_cache_non_list_returns_empty(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
(tmp_path / "snapshots_cache.json").write_text('{"key": "val"}')
|
|
assert d.load_snapshot_cache() == []
|
|
|
|
|
|
# --- save_snapshot_cache ---
|
|
|
|
def test_save_snapshot_cache_writes_json(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
snapshots = [{"id": "1"}, {"id": "2"}]
|
|
d.save_snapshot_cache(snapshots)
|
|
data = json.loads((tmp_path / "snapshots_cache.json").read_text())
|
|
assert data == snapshots
|
|
|
|
|
|
# --- load_last_run_date ---
|
|
|
|
def test_load_last_run_date_missing(tmp_path):
|
|
assert _downloader(tmp_path).load_last_run_date() is None
|
|
|
|
|
|
def test_load_last_run_date_returns_date(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
(tmp_path / "last_run.json").write_text('{"last_date_to": "2025-01-01"}')
|
|
assert d.load_last_run_date() == "2025-01-01"
|
|
|
|
|
|
def test_load_last_run_date_malformed_returns_none(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
(tmp_path / "last_run.json").write_text("not json")
|
|
assert d.load_last_run_date() is None
|
|
|
|
|
|
def test_load_last_run_date_missing_key_returns_none(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
(tmp_path / "last_run.json").write_text('{"date": "2025-01-01"}')
|
|
assert d.load_last_run_date() is None
|
|
|
|
|
|
# --- save_last_run_date ---
|
|
|
|
def test_save_last_run_date_writes_json(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
d.save_last_run_date("2025-06-01")
|
|
data = json.loads((tmp_path / "last_run.json").read_text())
|
|
assert data == {"last_date_to": "2025-06-01"}
|
|
|
|
|
|
# --- generate_html_file fixed filename ---
|
|
|
|
def test_generate_html_file_uses_fixed_filename(tmp_path):
|
|
d = _downloader(tmp_path)
|
|
with patch.object(d, "generate_html_template", new_callable=AsyncMock, return_value="<html></html>"):
|
|
result = asyncio.run(d.generate_html_file([], "2024-01-01", "2025-01-01"))
|
|
assert result.name == "snapshots.html"
|
|
assert (tmp_path / "snapshots.html").exists()
|