Improve offline coverage for data boundaries
This commit is contained in:
@@ -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() == ["浦发银行", "华兴源创", "平安银行", "宁德时代"]
|
||||
Reference in New Issue
Block a user