Files
gaokao-volunteer-system/tests/test_retention_cleanup.py
Hermes Agent 7fe4ddcbc4
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
feat: harden T12 backup and portal workflows
2026-06-14 23:12:18 +08:00

143 lines
4.1 KiB
Python

from __future__ import annotations
import os
import subprocess
from pathlib import Path
from data.orders.dao import OrdersDAO
from data.orders.models import Order
PROJECT_ROOT = Path(__file__).resolve().parents[1]
def _seed_old_completed_order(
db_path: str, order_id: str = "GKO-20250101-RETENTION"
) -> Order:
order = Order(
id=order_id,
source="web",
service_version="standard",
amount_cents=9900,
status="completed",
customer_name="张家长",
customer_phone="13800138000",
customer_wechat="wx-retention",
candidate_name="张三",
candidate_province="湖南",
notes="old completed order",
created_at="2025-01-01T00:00:00+00:00",
completed_at="2025-01-02T00:00:00+00:00",
status_updated_at="2025-01-02T00:00:00+00:00",
)
with OrdersDAO.connect(db_path) as dao:
return dao.create(order, actor="test", reason="seed_old_completed")
def test_retention_cleanup_dry_run_reports_candidates(settings):
_seed_old_completed_order(settings.orders_db_path)
from data.orders.retention_cleanup import run_cleanup
result = run_cleanup(
settings.orders_db_path,
cutoff_iso="2025-06-30T00:00:00+00:00",
apply=False,
)
assert result.scanned >= 1
assert result.candidates == 1
assert result.anonymized == 0
def test_retention_cleanup_apply_anonymizes_old_completed_order(settings):
_seed_old_completed_order(
settings.orders_db_path, order_id="GKO-20250101-RETENTION-APPLY"
)
from data.orders.retention_cleanup import run_cleanup
result = run_cleanup(
settings.orders_db_path,
cutoff_iso="2025-06-30T00:00:00+00:00",
apply=True,
)
assert result.candidates == 1
assert result.anonymized == 1
with OrdersDAO.connect(settings.orders_db_path) as dao:
order = dao.get("GKO-20250101-RETENTION-APPLY")
assert order.customer_phone is None
assert order.customer_name == "已匿名化"
def test_retention_cleanup_script_prints_summary(settings):
_seed_old_completed_order(
settings.orders_db_path, order_id="GKO-20250101-RETENTION-CLI"
)
env = {**os.environ, "GAOKAO_ORDERS_DB_PATH": settings.orders_db_path}
proc = subprocess.run(
[
"python3",
"scripts/gaokao-retention-cleanup.py",
"--cutoff",
"2025-06-30T00:00:00+00:00",
"--dry-run",
],
cwd=PROJECT_ROOT,
text=True,
capture_output=True,
env=env,
check=False,
)
assert proc.returncode == 0, proc.stderr
assert '"cutoff_iso": "2025-06-30T00:00:00+00:00"' in proc.stdout
assert '"dry_run": true' in proc.stdout
assert '"candidates": 1' in proc.stdout
def test_retention_cleanup_script_supports_retention_days(settings):
_seed_old_completed_order(
settings.orders_db_path, order_id="GKO-20250101-RETENTION-DAYS"
)
env = {**os.environ, "GAOKAO_ORDERS_DB_PATH": settings.orders_db_path}
proc = subprocess.run(
[
"python3",
"scripts/gaokao-retention-cleanup.py",
"--retention-days",
"180",
"--dry-run",
],
cwd=PROJECT_ROOT,
text=True,
capture_output=True,
env=env,
check=False,
)
assert proc.returncode == 0, proc.stderr
assert '"cutoff_iso":' in proc.stdout
assert '"dry_run": true' in proc.stdout
assert '"candidates": 1' in proc.stdout
def test_retention_cleanup_underscore_script_alias_works(settings):
_seed_old_completed_order(
settings.orders_db_path, order_id="GKO-20250101-RETENTION-ALIAS"
)
env = {**os.environ, "GAOKAO_ORDERS_DB_PATH": settings.orders_db_path}
proc = subprocess.run(
[
"python3",
"scripts/gaokao_retention_cleanup.py",
"--cutoff",
"2025-06-30T00:00:00+00:00",
"--dry-run",
],
cwd=PROJECT_ROOT,
text=True,
capture_output=True,
env=env,
check=False,
)
assert proc.returncode == 0, proc.stderr
assert '"candidates": 1' in proc.stdout