Files
sbnews/docker/crawler/tests/test_titan_odds.py
2026-07-11 11:19:43 +08:00

82 lines
2.8 KiB
Python

import sys
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from titan_odds import (
build_titan_odds_items,
parse_titan_odds_script,
parse_titan_schedule_script,
)
SCHEDULE_SCRIPT = r"""
var arrCup = [75,'世界杯','世界盃','World Cup','世界杯','世界盃','World Cup','2026'];
jh["G27976"] = [[2907402,75,0,'2026-07-12 05:00',640,744,'','','19','4',-0.5,-0.25,'2.5','1']];
var arrTeam = [
[640,'挪威','挪威','Norway','','images/norway.png'],
[744,'英格兰','英格蘭','England','','images/england.png']
];
var lastUpdateTime = '2026-07-11 10:00:12';
"""
ODDS_SCRIPT = """
oddsData["O_2907402"]=[[545,3.5,3.6,2.01],[16,3.3,3.55,2.13]];
oddsData["L_2907402"]=[[3,0.88,-0.5,0.94],[16,0.86,-0.5,0.98]];
oddsData["T_2907402"]=[[3,0.92,2.5,0.88],[16,0.93,2.5,0.87]];
"""
class TitanOddsTest(unittest.TestCase):
def test_parse_schedule_and_odds_builds_normalized_item(self):
schedule = parse_titan_schedule_script(SCHEDULE_SCRIPT)
odds = parse_titan_odds_script(ODDS_SCRIPT)
items = build_titan_odds_items(
schedule,
odds,
source_url="https://zq.titan007.com/cn/CupMatch/75.html",
company_id=3,
euro_company_id=545,
company_name="Crown",
)
self.assertEqual(len(items), 1)
item = items[0]
self.assertEqual(item["source_site"], "titan007")
self.assertEqual(item["source_match_id"], "2907402")
self.assertEqual(item["league_name"], "世界杯")
self.assertEqual(item["home_team"], "挪威")
self.assertEqual(item["away_team"], "英格兰")
self.assertEqual(item["show_type"], "early")
self.assertEqual(item["strong_side"], "C")
self.assertEqual(item["handicap_line"], "0.5")
self.assertEqual(item["handicap_home_odds"], "0.88")
self.assertEqual(item["handicap_away_odds"], "0.94")
self.assertEqual(item["total_line"], "2.5")
self.assertEqual(item["home_win_odds"], "3.5")
self.assertEqual(item["draw_odds"], "3.6")
self.assertEqual(item["away_win_odds"], "2.01")
self.assertEqual(item["raw_data"]["selected_company_id"], 3)
self.assertEqual(item["raw_data"]["selected_euro_company_id"], 545)
def test_sparse_schedule_rows_are_parsed_without_eval(self):
script = r"""
var arrCup = [75,'世界杯','','','','','','2026'];
jh["G27977"] = [[2907405,75,0,'2026-07-16 03:00',77068,77069,'','','','',,,'','']];
var arrTeam = [[77068,'99胜者'],[77069,'100胜者']];
"""
parsed = parse_titan_schedule_script(script)
self.assertIn("2907405", parsed["matches"])
self.assertEqual(parsed["matches"]["2907405"]["home_team"], "99胜者")
if __name__ == "__main__":
unittest.main()