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.
49 lines
2.3 KiB
Python
49 lines
2.3 KiB
Python
# backend/tests/test_triage_baseline.py
|
|
# 아리 정리(비서) 기준 시각: smart 보기/분석은 '기준 이후 도착한 새 메일'만 다룬다.
|
|
from datetime import datetime, timedelta
|
|
|
|
from tests._factories import make_email, make_mail_account
|
|
|
|
|
|
def _seed_old_new(s, since: datetime):
|
|
"""기준 시각 전/후로 도착한 집중(focused) 안읽음 메일을 하나씩 생성."""
|
|
make_mail_account(s, id="work", name="회사", tone="coral", sort_order=0)
|
|
make_email(s, id="old", account="work", subject="지난 메일",
|
|
received_at=since - timedelta(hours=2))
|
|
make_email(s, id="new", account="work", subject="새 메일",
|
|
received_at=since + timedelta(hours=2))
|
|
|
|
|
|
def test_smart_folder_shows_only_new_mail(client, session):
|
|
s, _ = session
|
|
since = datetime.fromisoformat(client.post("/api/mail/triage/baseline").json()["since"])
|
|
_seed_old_new(s, since)
|
|
# 아리 정리(smart): 기준 이후 도착한 'new'만.
|
|
smart = [r["id"] for r in client.get("/api/mail?folder=smart").json()]
|
|
assert smart == ["new"]
|
|
# 사이드바 배지(새 메일 수, 읽음 무관)도 기준 이후 새 메일만 센다.
|
|
assert client.get("/api/mail/triage/baseline").json()["count"] == 1
|
|
# 일반 받은편지함(inbox)은 둘 다 보인다(기준 무관).
|
|
inbox = sorted(r["id"] for r in client.get("/api/mail?folder=inbox").json())
|
|
assert inbox == ["new", "old"]
|
|
|
|
|
|
def test_baseline_get_initializes_and_post_advances(client, session):
|
|
s, _ = session
|
|
first = client.get("/api/mail/triage/baseline").json()["since"]
|
|
assert first # 첫 조회 시 now 로 lazy-init
|
|
advanced = client.post("/api/mail/triage/baseline").json()["since"]
|
|
assert datetime.fromisoformat(advanced) >= datetime.fromisoformat(first)
|
|
|
|
|
|
def test_triage_analyze_skips_old_mail(client, session):
|
|
s, _ = session
|
|
since = datetime.fromisoformat(client.post("/api/mail/triage/baseline").json()["since"])
|
|
_seed_old_new(s, since)
|
|
res = client.post("/api/mail/triage/analyze").json()
|
|
assert res["analyzed"] == 1 # 새 메일 1통만 분석
|
|
assert res["remaining"] == 0
|
|
# 기준 이후 새 메일만 분석되고, 이전 메일의 ai 는 비어 있다.
|
|
assert client.get("/api/mail/new").json()["ai"] is not None
|
|
assert client.get("/api/mail/old").json()["ai"] is None
|