amarorn / tests /test_superbet_parser.py
beAnalytic's picture
feat: sync main with feature/superbet-live-inplay
16c19b8 verified
Raw
History Blame Contribute Delete
1.88 kB
import json
from pathlib import Path
from ingest.superbet.benchmark import h2h_overround, market_benchmark
from ingest.superbet.parser import parse_superbet_event
from ingest.superbet.store import merge_snapshot_into_odds_file
from pipelines.wc_market_features import load_match_odds_index, match_implied_probs
FIXTURE = Path(__file__).parent / "fixtures" / "superbet_brasil_egito.json"
def test_parse_superbet_event_fixture():
raw = json.loads(FIXTURE.read_text(encoding="utf-8"))
snap = parse_superbet_event(raw)
assert snap.home_team == "Brasil"
assert snap.away_team == "Egito"
assert snap.inplay is not None
assert snap.inplay.home_score == 1
assert snap.inplay.minute == 17
assert snap.h2h_odds["1"] == 1.85
assert abs(sum(snap.h2h_implied.values()) - 1.0) < 0.01
assert "2.5" in snap.totals_implied
def test_merge_superbet_odds_updates_market_features(tmp_path, monkeypatch):
raw = json.loads(FIXTURE.read_text(encoding="utf-8"))
snap = parse_superbet_event(raw)
out = tmp_path / "superbet_odds.json"
merge_snapshot_into_odds_file(snap, out)
load_match_odds_index.cache_clear()
monkeypatch.setattr(
"pipelines.wc_market_features.DEFAULT_SUPERBET_ODDS",
out,
)
load_match_odds_index.cache_clear()
probs = match_implied_probs("Brasil", "Egito")
assert probs["1"] > probs["2"]
def test_h2h_overround():
margin = h2h_overround({"1": 1.85, "X": 3.4, "2": 4.2})
assert margin is not None
assert 0.02 < margin < 0.15
def test_market_benchmark_edges():
raw = json.loads(FIXTURE.read_text(encoding="utf-8"))
snap = parse_superbet_event(raw)
bench = market_benchmark(
snap,
model_h2h={"1": 0.55, "X": 0.30, "2": 0.15},
model_totals={"over_2_5": 0.45},
)
assert "1" in bench["h2h"]
assert "edge" in bench["h2h"]["1"]