You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.6 KiB
Python

# backend/tests/test_suggester.py — 반복 패턴 탐지
from app.automation import suggester
from app.automation.event_bus import EventBus
from app.automation.events import AUTOMATION_SUGGESTED
from app.models import AutomationRunLog
def _add_digest_logs(s, n):
for i in range(n):
s.add(
AutomationRunLog(
id=f"dg{i}",
time="18:30",
rule="뉴스레터는 저녁에",
rule_id=None,
text=f"뉴스레터 {i}통 → 저녁 다이제스트로 묶음",
sort_order=100 + i,
)
)
s.commit()
def test_scan_below_threshold_no_suggestion(client, session):
s, engine = session
# 시드 run_log 에는 '다이제스트' 1건뿐 → 임계(3) 미달
created = suggester.scan(s)
assert created == []
def test_scan_above_threshold_creates_and_publishes(client, session):
s, engine = session
_add_digest_logs(s, 3)
bus = EventBus()
created = suggester.scan(s, bus)
assert len(created) == 1
assert created[0].offer_name == "아침에도 다이제스트"
assert any(e.type == AUTOMATION_SUGGESTED for e in bus.history)
def test_scan_dedupes(client, session):
s, engine = session
_add_digest_logs(s, 4)
first = suggester.scan(s)
second = suggester.scan(s) # 이미 존재 → 재생성 안 함
assert len(first) == 1 and second == []
def test_scan_endpoint(client):
# API 경로(수동 스캔) — 시드만으로는 임계 미달이라 빈 생성
r = client.post("/api/automation/suggest/scan").json()
assert r == {"created": []}