dota2tuned / tests /test_ingest.py
Dracufeuer's picture
fix(data): fetch patch suffix logs
b251dd2 verified
Raw
History Blame Contribute Delete
1.66 kB
from pathlib import Path
import polars as pl
from dota2tuned.ingest import _patch_note_versions, _targeted_match_query, _under_sampled_heroes
def test_patch_note_versions_expand_major_patch_family():
assert _patch_note_versions("7.41") == ["7.41", "7.41a", "7.41b", "7.41c", "7.41d", "7.41e"]
def test_patch_note_versions_keep_letter_patch_exact():
assert _patch_note_versions("7.41d") == ["7.41d"]
def test_under_sampled_heroes_uses_player_games_and_pro_pick(tmp_path: Path):
parquet = tmp_path / "parquet"
parquet.mkdir()
pl.DataFrame(
[
{"hero_id": 1, "hero_name": "Anti-Mage", "pro_pick": 12},
{"hero_id": 2, "hero_name": "Axe", "pro_pick": 0},
{"hero_id": 3, "hero_name": "Bane", "pro_pick": 0},
]
).write_parquet(parquet / "dim_hero.parquet")
pl.DataFrame([{"hero_id": 2}, {"hero_id": 2}]).write_parquet(
parquet / "fact_player_match.parquet"
)
gaps = _under_sampled_heroes(parquet, threshold=3, limit=10)
assert gaps == [
{"hero_id": 3, "hero_name": "Bane", "sample_size": 0, "needed": 3},
{"hero_id": 2, "hero_name": "Axe", "sample_size": 2, "needed": 1},
]
def test_targeted_match_query_is_select_only_and_filters_quality():
query = _targeted_match_query(103, limit=100, offset=200)
assert query.lower().startswith("select")
assert "from public_matches" in query
assert "103 = any(m.radiant_team)" in query
assert "103 = any(m.dire_team)" in query
assert "m.duration >= 600" in query
assert "m.radiant_win is not null" in query
assert "limit 100" in query
assert "offset 200" in query