Files
web-page-backend/stock/app/test_holdings_db.py

38 lines
1.6 KiB
Python

import os, tempfile
def _fresh_db(monkeypatch):
tmp = tempfile.mkdtemp()
from app import db
monkeypatch.setattr(db, "DB_PATH", os.path.join(tmp, "stock.db"))
db.init_db()
return db
def test_holdings_signals_table_and_upsert(monkeypatch):
db = _fresh_db(monkeypatch)
db.upsert_holdings_signal(date="2026-05-29", ticker="005930", name="삼성전자",
action="hold", tech_score=72.0, exit_flags={"stop_loss": False},
issues=[{"type": "news", "severity": "low", "summary": "x"}],
close=80000, pnl_rate=5.2, reasons="강건")
db.upsert_holdings_signal(date="2026-05-29", ticker="005930", name="삼성전자",
action="trim", tech_score=60.0, exit_flags={"ma50_break": True},
issues=[], close=79000, pnl_rate=3.0, reasons="MA50 이탈")
rows = db.get_holdings_signals(date="2026-05-29")
assert len(rows) == 1 # upsert 멱등
assert rows[0]["action"] == "trim"
assert rows[0]["exit_flags"]["ma50_break"] is True # JSON 역직렬화
hist = db.get_holdings_signal_history("005930", limit=30)
assert len(hist) == 1
def test_get_latest_holdings_date(monkeypatch):
db = _fresh_db(monkeypatch)
# empty table → None
assert db.get_latest_holdings_date() is None
# after an upsert → returns that date
db.upsert_holdings_signal(
date="2026-05-30", ticker="005930", name="삼성전자",
action="hold", tech_score=70.0, exit_flags={}, issues=[],
close=80000, pnl_rate=4.0, reasons="테스트",
)
assert db.get_latest_holdings_date() == "2026-05-30"