"""MAC 多日分时图(0x123E)解析测试。 包含 Issue #10 回归:当服务器返回的 minutes ≥ 1440(个别服务器累计或异常值) 时,parse_response 不应抛 ValueError,而应按 % 24 折算为日内时刻。 """ import struct from easy_tdx.mac.commands.tick_charts import TickChartsCmd from easy_tdx.models.enums import Market def _build_multi_tick_body( days: int, page_size: int, minutes_grid: list[list[int]], ) -> bytes: """构造一个多日分时图响应 body。 Args: days: 天数(写入 count)。 page_size: 每天分时点数。 minutes_grid: 长度 days 的列表,每个元素是长度 page_size 的 minutes 值列表。 """ # 头部: market(2) + code(22) body = bytearray(struct.pack(" 62340//60 % 24 = 1039 % 24 = 7 时, 62340 % 60 = 0 分 assert str(chart.charts[0].ticks[1].time) == "07:00:00" # 正常点不受影响 assert str(chart.charts[0].ticks[0].time) == "09:30:00" assert str(chart.charts[1].ticks[3].time) == "14:59:00" def test_multi_tick_charts_request_layout(): """验证请求包布局与文档一致:market + code(22) + start_ymd + days + 1。""" from datetime import date as date_cls cmd = TickChartsCmd(int(Market.SH), "600519", date_cls(2025, 1, 15), 5) req = cmd.build_request() # MAC 帧前缀由 build_mac_request 生成,body 在其后;校验 body 嵌入其中 expected_body = struct.pack( "