bulid 63
This commit is contained in:
89
tests/test_manual_game_discovery.py
Normal file
89
tests/test_manual_game_discovery.py
Normal file
@@ -0,0 +1,89 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user