alphax/tests/test_observation_candidates_api.py
2026-05-14 01:20:47 +08:00

62 lines
1.9 KiB
Python

import json
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)
from app.db import altcoin_db
from app.db.analytics import get_observation_candidates
def test_observation_candidates_expose_coin_state_as_watch_pool(monkeypatch, tmp_path):
db_path = tmp_path / "obs.db"
monkeypatch.setattr(altcoin_db, "DB_PATH", str(db_path))
import app.db.schema as schema
monkeypatch.setattr(schema, "DB_PATH", str(db_path), raising=False)
altcoin_db.init_db()
detail = {
"price": 1.23,
"signals": ["当前4H静K蓄力", "大户偏多(69%)"],
"market_context": {"trigger_context": {"trigger_status": "current"}},
"derivatives_context": {"top_trader_long_pct": 69},
"sector_context": {"hot_sectors": ["AI_DePIN"]},
}
conn = altcoin_db.get_conn()
conn.execute(
"""
INSERT INTO coin_state (
symbol, state, score, anomaly_type, sector, leader_status,
detected_at, detail_json
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""",
(
"OBS/USDT",
"蓄力",
5,
"",
"AI_DePIN",
"",
datetime.now().isoformat(),
json.dumps(detail, ensure_ascii=False),
),
)
conn.commit()
conn.close()
data = get_observation_candidates(limit=10)
assert data["summary"]["source"] == "coin_state"
assert len(data["items"]) == 1
item = data["items"][0]
assert item["symbol"] == "OBS/USDT"
assert item["display_bucket"] == "watch_pool"
assert item["execution_status"] == "observe"
assert item["entry_triggered"] == 0
assert item["current_price"] == 1.23
assert item["signals"] == ["当前4H静K蓄力", "大户偏多(69%)"]