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.

29 lines
1.4 KiB
Python

# backend/tests/test_spam_purge.py
# 스팸은 저장하지 않는다(유저 요청): 이미 들어온 스팸은 일괄 삭제, 일반 메일은 그대로.
from sqlmodel import select
from app.models import Email, ExternalLink
from app.worker.sync_jobs import purge_spam
from tests._factories import make_email, make_mail_account
def test_purge_spam_removes_spam_and_links_keeps_normal(session):
s, _ = session
make_mail_account(s, id="work", name="회사", tone="coral", sort_order=0)
make_email(s, id="keep", account="work", subject="보통 메일")
junk = make_email(s, id="junk", account="work", subject="스팸 메일")
junk.folder = "spam"
s.add(junk)
s.add(ExternalLink(id="xl-junk", account_id="work", external_id="x-junk",
entity_type="email", entity_id="junk"))
s.add(ExternalLink(id="xl-keep", account_id="work", external_id="x-keep",
entity_type="email", entity_id="keep"))
s.commit()
assert purge_spam(s) == 1 # 스팸 1통만 삭제
assert s.get(Email, "junk") is None # 스팸 메일 제거
assert s.get(Email, "keep") is not None # 일반 메일 유지
# 스팸의 ExternalLink 도 제거(일반 것은 유지) — 재유입/유령 링크 방지.
remaining = sorted(lk.external_id for lk in s.exec(select(ExternalLink)).all())
assert remaining == ["x-keep"]