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
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"]
|