Files
ai-trade/ai_trade/tests/test_rate_limit.py
gahusb 139e4e3382 refactor(web-ai): rename signal_v2→ai_trade, deprecate signal_v1
박재오 결정 2026-05-19 — V2를 정식 명칭 ai_trade로 graduation,
V1은 deprecated 마킹 (legacy 디렉토리 이동은 file lock 풀린 후 후속).

변경 사항:
- signal_v2/ → ai_trade/ (git mv, import 일괄 sed: signal_v2.x → ai_trade.x)
- root start.bat → legacy/start_v1.bat (V1 자동 시작 차단)
- ai_trade/start.bat 내부 uvicorn target signal_v2.main → ai_trade.main
- signal_v1/DEPRECATED.md 추가 (사용 금지 명시)
- CLAUDE.md 디렉토리 표·서버 시작 방식 갱신
- services/ 디렉토리 미래 예정 (Plan-B-Insta 작업 시 신설)

ai_trade tests 59/59 PASS 확인.

signal_v1/ 디렉토리 자체 이동(legacy/signal_v1/)은 telegram_bot.log +
data/news_snapshots.db file lock으로 보류. lock 해제 후 후속 커밋.

후속 작업: Plan-B-Insta (services/insta-render + NAS insta 분할)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:31:47 +09:00

35 lines
1.1 KiB
Python

"""Tests for SignalDedup."""
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
from ai_trade.rate_limit import SignalDedup
KST = ZoneInfo("Asia/Seoul")
def test_is_recent_returns_false_for_new_ticker_action(tmp_dedup_db):
dedup = SignalDedup(tmp_dedup_db)
assert dedup.is_recent("005930", "buy") is False
def test_is_recent_returns_true_within_24h(tmp_dedup_db):
dedup = SignalDedup(tmp_dedup_db)
dedup.record("005930", "buy", confidence=0.82)
assert dedup.is_recent("005930", "buy") is True
def test_is_recent_returns_false_after_24h(tmp_dedup_db, monkeypatch):
dedup = SignalDedup(tmp_dedup_db)
# Record with a timestamp 25 hours ago
now = datetime.now(KST)
fake_now = now - timedelta(hours=25)
monkeypatch.setattr(
"ai_trade.rate_limit._now_iso", lambda: fake_now.isoformat()
)
dedup.record("005930", "buy", confidence=0.82)
# Reset to real now for is_recent check
monkeypatch.setattr(
"ai_trade.rate_limit._now_iso", lambda: now.isoformat()
)
assert dedup.is_recent("005930", "buy", within_hours=24) is False