62 lines
1.9 KiB
Python
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%)"]
|