You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.8 KiB
Python
74 lines
2.8 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from libs.backtest.snapshots import (
|
|
UnknownSnapshotError,
|
|
canonical_snapshot_dir,
|
|
get_requested_aliases,
|
|
resolve_snapshot,
|
|
resolve_snapshot_path,
|
|
)
|
|
|
|
|
|
def test_resolve_snapshot_alias_to_main_canonical() -> None:
|
|
resolution = resolve_snapshot("midlarge-liquid-long-v1_bucketfix_full_audit_tier3")
|
|
assert resolution.requested_snapshot_id == "midlarge-liquid-long-v1_bucketfix_full_audit_tier3"
|
|
assert resolution.canonical_snapshot_id == "midlarge-liquid-long-v1_bucketfix_full_audit_canonical"
|
|
assert resolution.is_alias is True
|
|
assert resolution.is_registry_managed is True
|
|
|
|
|
|
def test_resolve_snapshot_canonical_passthrough() -> None:
|
|
resolution = resolve_snapshot("midlarge-liquid-long-v1_bucketfix_full_audit_canonical")
|
|
assert resolution.requested_snapshot_id == resolution.canonical_snapshot_id
|
|
assert resolution.is_alias is False
|
|
assert resolution.is_registry_managed is True
|
|
|
|
|
|
def test_resolve_snapshot_unknown_raises() -> None:
|
|
with pytest.raises(UnknownSnapshotError, match="Unknown snapshot id"):
|
|
resolve_snapshot("totally_unknown_snapshot_for_unit_test")
|
|
|
|
|
|
def test_resolve_snapshot_path_prefers_canonical_then_requested_fallback(tmp_path: Path, monkeypatch) -> None:
|
|
parquet_root = tmp_path / "parquet"
|
|
canonical_dir = parquet_root / "midlarge-liquid-long-v1_bucketfix_full_audit_canonical"
|
|
requested_dir = parquet_root / "midlarge-liquid-long-v1_bucketfix_full_audit_tier3"
|
|
requested_dir.mkdir(parents=True)
|
|
(requested_dir / "manifest.json").write_text(json.dumps({"snapshot_id": requested_dir.name}))
|
|
|
|
path = resolve_snapshot_path(
|
|
"midlarge-liquid-long-v1_bucketfix_full_audit_tier3",
|
|
snapshot_dir=parquet_root,
|
|
)
|
|
assert path == requested_dir.resolve()
|
|
|
|
canonical_dir.mkdir(parents=True)
|
|
(canonical_dir / "manifest.json").write_text(json.dumps({"snapshot_id": canonical_dir.name}))
|
|
path = resolve_snapshot_path(
|
|
"midlarge-liquid-long-v1_bucketfix_full_audit_tier3",
|
|
snapshot_dir=parquet_root,
|
|
)
|
|
assert path == canonical_dir.resolve()
|
|
|
|
|
|
def test_get_requested_aliases_lists_main_family() -> None:
|
|
aliases = get_requested_aliases("midlarge-liquid-long-v1_bucketfix_full_audit_canonical")
|
|
assert "midlarge-liquid-long-v1_bucketfix_full_audit_tier3" in aliases
|
|
assert "midlarge-liquid-long-v1_bucketfix_full_audit_tier3tech" in aliases
|
|
|
|
|
|
def test_canonical_snapshot_dir_uses_parquet_root(tmp_path: Path, monkeypatch) -> None:
|
|
from libs.backtest import snapshots
|
|
|
|
monkeypatch.setattr(
|
|
snapshots,
|
|
"get_settings",
|
|
lambda: type("S", (), {"parquet_dir": str(tmp_path / "parquet")})(),
|
|
)
|
|
assert canonical_snapshot_dir("abc").as_posix().endswith("/parquet/abc")
|