alphax/tests/test_strategy_version.py
2026-05-13 22:32:50 +08:00

87 lines
2.4 KiB
Python

import os
import sys
from datetime import datetime
PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
if PROJECT_DIR not in sys.path:
sys.path.insert(0, PROJECT_DIR)
import altcoin_db
def test_strategy_version_from_meta():
original_get_meta = altcoin_db.get_meta
try:
altcoin_db.get_meta = lambda: {"strategy_version": "v2026.04.30-r1"}
assert altcoin_db.get_meta().get("strategy_version") == "v2026.04.30-r1"
finally:
altcoin_db.get_meta = original_get_meta
def test_create_recommendation_persists_strategy_version(monkeypatch):
original_get_conn = altcoin_db.get_conn
original_meta = altcoin_db.get_meta
class FakeCursor:
lastrowid = 321
class FakeConn:
def __init__(self):
self.sql = None
self.params = None
self.committed = False
self.closed = False
def execute(self, sql, params=()):
self.sql = sql
self.params = params
return FakeCursor()
def commit(self):
self.committed = True
def close(self):
self.closed = True
fake_conn = FakeConn()
monkeypatch.setattr(altcoin_db, "get_conn", lambda: fake_conn)
monkeypatch.setattr(altcoin_db, "get_meta", lambda: {"strategy_version": "v2026.04.30-r2"})
rec_id = altcoin_db.create_recommendation(
symbol="AI/USDT",
rec_state="加速",
rec_score=7,
entry_price=1.23,
stop_loss=1.1,
tp1=1.4,
tp2=1.6,
sector="AI",
signals=["量价齐飞"],
is_meme=0,
entry_plan={"entry_action": "可即刻买入"},
direction="多头启动",
)
assert rec_id == 321
assert "strategy_version" in fake_conn.sql
assert fake_conn.params[-1] == "v2026.04.30-r2"
assert fake_conn.committed is True
assert fake_conn.closed is True
altcoin_db.get_conn = original_get_conn
altcoin_db.get_meta = original_meta
def test_derive_execution_fields_exposes_strategy_version():
item = {
"status": "active",
"action_status": "持有",
"entry_plan_json": "{}",
"strategy_version": "v2026.04.30-r3",
}
result = altcoin_db._derive_execution_fields(item)
assert result["strategy_version"] == "v2026.04.30-r3"
assert result["strategy_version_label"] == "策略版本 v2026.04.30-r3"