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
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": []}
|