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

86 lines
3.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from __future__ import annotations
import unittest
from hockey_data.models import Game
from hockey_data.service import HockeyDataService
from hockey_data.standings_parser import parse_standings_xml
STANDINGS_XML = """<?xml version="1.0" encoding="UTF-8"?>
<Standings idtournament="1369" genDate="2026-07-16 12:00:00" order="pts">
<League name="Общая таблица" name_en="League" in_playoff="2">
<Team id="14927" clubid="1" name="Команда А" nameen="Team A" rank="1" gp="10" w="7" otw="1" sow="0" sol="1" otl="0" l="1" pts="17" pts_pct="85.0" gf="31" ga="18" playoffs_in="Y" />
<Team id="14928" clubid="2" name="Команда Б" nameen="Team B" rank="2" gp="10" w="6" otw="0" sow="1" sol="0" otl="1" l="2" pts="15" pts_pct="75.0" gf="29" ga="22" />
</League>
<Conferences>
<Conference item="west" name="Запад" name_en="West" in_playoff="1">
<Team id="14927" clubid="1" name="Команда А" nameen="Team A" rank="1" gp="10" w="7" pts="17" gf="31" ga="18" />
</Conference>
<Conference item="east" name="Восток" name_en="East" in_playoff="1">
<Team id="14928" clubid="2" name="Команда Б" nameen="Team B" rank="1" gp="10" w="6" pts="15" gf="29" ga="22" />
</Conference>
</Conferences>
<Divisions>
<Division item="bobrov" name="Дивизион Боброва" name_en="Bobrov Division" in_playoff="1" conference="west">
<Team id="14927" clubid="1" name="Команда А" nameen="Team A" rank="1" gp="10" w="7" pts="17" gf="31" ga="18" />
</Division>
<Division item="tarasov" name="Дивизион Тарасова" name_en="Tarasov Division" in_playoff="1" conference="west">
<Team id="14928" clubid="2" name="Команда Б" nameen="Team B" rank="1" gp="10" w="6" pts="15" gf="29" ga="22" />
</Division>
</Divisions>
</Standings>
"""
class StandingsParserTests(unittest.TestCase):
def test_parses_all_standings_variants(self) -> None:
result = parse_standings_xml(STANDINGS_XML, language="ru")
self.assertEqual(result["tournament_id"], "1369")
self.assertEqual(
[variant["id"] for variant in result["variants"]],
["league", "conferences", "divisions"],
)
self.assertEqual(len(result["variants"][0]["groups"][0]["teams"]), 2)
self.assertEqual(len(result["variants"][1]["groups"]), 2)
self.assertEqual(len(result["variants"][2]["groups"]), 2)
first = result["variants"][0]["groups"][0]["teams"][0]
self.assertEqual(first["entry_id"], "14927")
self.assertEqual(first["club_id"], "1")
self.assertEqual(first["points"], 17)
self.assertEqual(first["goals_for"], 31)
def test_uses_english_names(self) -> None:
result = parse_standings_xml(STANDINGS_XML, language="en")
league = result["variants"][0]
self.assertEqual(league["label"], "League")
self.assertEqual(league["groups"][0]["name"], "League")
self.assertEqual(league["groups"][0]["teams"][0]["name"], "Team A")
def test_highlights_selected_game_teams_by_ids_and_names(self) -> None:
result = parse_standings_xml(STANDINGS_XML, language="ru")
game = Game(
external_id="900001",
tournament_external_id="1369",
home_entry_external_id="14927",
home_team_external_id="1",
home_team_name_ru="Другое отображаемое имя",
away_entry_external_id="",
away_team_external_id="",
away_team_name_ru="Команда Б",
)
HockeyDataService._highlight_standings_teams(result, game)
teams = result["variants"][0]["groups"][0]["teams"]
self.assertTrue(teams[0]["highlighted"])
self.assertEqual(teams[0]["side"], "home")
self.assertTrue(teams[1]["highlighted"])
self.assertEqual(teams[1]["side"], "away")
if __name__ == "__main__":
unittest.main()