90 lines
3.4 KiB
Python
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()
|