Files
hockey_new/tests/test_manual_game_discovery.py
2026-08-19 15:08:39 +03:00

90 lines
3.4 KiB
Python

from __future__ import annotations
import json
import tempfile
import unittest
from datetime import date, timedelta
from pathlib import Path
from hockey_data.client import Stat2TVNotFoundError, Stat2TVResponse
from hockey_data.config import HockeySettingsStore
from hockey_data.models import Tournament
from hockey_data.service import HockeyDataService
from support import LocalTestDatabase
class ManualGameDiscoveryTests(unittest.IsolatedAsyncioTestCase):
async def test_active_tournament_without_gameid_flag_is_probed_first(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
base_dir = Path(temp_dir)
database = LocalTestDatabase(base_dir / "test.sqlite3")
database.create_all()
settings = HockeySettingsStore(base_dir / "settings")
service = HockeyDataService(
base_dir=base_dir,
database=database,
settings=settings,
)
today = date.today()
with database.session() as session:
session.add(
Tournament(
external_id="1437",
name_ru="Предсезонные матчи КХЛ",
season="2026-2027",
start_date=today - timedelta(days=10),
end_date=today + timedelta(days=20),
game_id_supported=False,
)
)
for index in range(120):
session.add(
Tournament(
external_id=str(1000 + index),
name_ru=f"Архив {index}",
season="2025-2026",
start_date=today - timedelta(days=300),
end_date=today - timedelta(days=200),
game_id_supported=True,
)
)
calls: list[str] = []
async def fake_fetch(endpoint: str) -> Stat2TVResponse:
calls.append(endpoint)
if endpoint == "1437/json/902918.json":
payload = {
"game": {
"idschedule": 902918,
"teamA": "A",
"teamB": "B",
"idclubA": 1,
"idclubB": 2,
},
"players": {},
"teams": {},
}
return Stat2TVResponse(
content=json.dumps(payload).encode("utf-8"),
status_code=200,
content_type="application/json",
auth_mode="test",
url=f"https://example.test/{endpoint}",
)
raise Stat2TVNotFoundError(
f"https://example.test/{endpoint}", status_code=404
)
service.client.fetch_xml = fake_fetch # type: ignore[method-assign]
found = await service._discover_game_tournament("902918")
self.assertEqual(found, "1437")
self.assertEqual(calls, ["1437/json/902918.json"])
database.engine.dispose()
if __name__ == "__main__":
unittest.main()