Improve offline coverage for data boundaries

This commit is contained in:
Yuxuan Yan
2026-06-16 17:42:20 +08:00
parent 31baa18ce5
commit b5c8c0b8da
5 changed files with 587 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
"""Offline tests for baostock-backed universe helpers."""
from __future__ import annotations
import pandas as pd
import data.universe as universe
class _FakeResult:
def __init__(self, rows, fields=None):
self.rows = rows
self.fields = fields or ["code", "name", "date"]
self._idx = -1
def next(self):
self._idx += 1
return self._idx < len(self.rows)
def get_row_data(self):
return self.rows[self._idx]
def test_index_constituent_helpers_normalize_dotted_codes(monkeypatch):
calls: list[str] = []
monkeypatch.setattr(universe.bs, "login", lambda: calls.append("login"))
monkeypatch.setattr(universe.bs, "logout", lambda: calls.append("logout"))
monkeypatch.setattr(
universe.bs,
"query_hs300_stocks",
lambda: _FakeResult([
["sh.600000", "浦发银行", "2024-01-12"],
["sz.000001", "平安银行", "2024-01-12"],
]),
)
monkeypatch.setattr(
universe.bs,
"query_zz500_stocks",
lambda: _FakeResult([
["sh.600006", "东风汽车", "2024-01-12"],
]),
)
hs300 = universe.get_hs300_stocks()
zz500 = universe.get_zz500_stocks()
assert calls == ["login", "logout", "login", "logout"]
assert hs300["code"].tolist() == ["sh600000", "sz000001"]
assert zz500["code"].tolist() == ["sh600006"]
assert hs300["name"].tolist() == ["浦发银行", "平安银行"]
def test_get_all_stocks_walks_back_and_filters_to_listed_a_shares(monkeypatch):
fields = ["code", "tradeStatus", "code_name"]
responses = [
_FakeResult([], fields=fields),
_FakeResult(
[
["sh.600000", "1", "浦发银行"],
["sh.688001", "1", "华兴源创"],
["sz.000001", "1", "平安银行"],
["sz.300750", "1", "宁德时代"],
["sz.399001", "1", "深证成指"],
["sz.200001", "1", "深物业B"],
["bj.430047", "1", "北交所样本"],
],
fields=fields,
),
]
query_days: list[str] = []
monkeypatch.setattr(universe.bs, "login", lambda: None)
monkeypatch.setattr(universe.bs, "logout", lambda: None)
def fake_query_all_stock(day):
query_days.append(day)
return responses.pop(0)
monkeypatch.setattr(universe.bs, "query_all_stock", fake_query_all_stock)
result = universe.get_all_stocks("2024-01-07")
assert query_days == ["2024-01-07", "2024-01-06"]
assert result.columns.tolist() == ["code", "name"]
assert result["code"].tolist() == [
"sh600000",
"sh688001",
"sz000001",
"sz300750",
]
assert result["name"].tolist() == ["浦发银行", "华兴源创", "平安银行", "宁德时代"]