"""15 天不活跃清零:模型 / 活跃口径 / 清零 / 预警 / 配置 / worker。""" from __future__ import annotations from datetime import date, datetime, timedelta, timezone from sqlalchemy import select from app.db.session import SessionLocal from app.models.inactivity import InactivityNotificationLog, InactivityResetLog def test_reset_and_notification_models_persist() -> None: db = SessionLocal() try: db.add(InactivityResetLog( user_id=1, coin_balance_before=10, cash_balance_cents_before=20, invite_cash_balance_cents_before=30, last_active_at=datetime(2026, 1, 1, tzinfo=timezone.utc), inactive_days=15, reason="inactive_15d", )) db.add(InactivityNotificationLog( user_id=1, stage=7, inactive_days=8, coin_balance=10, cash_balance_cents=20, invite_cash_balance_cents=30, channel="log", status="placeholder", )) db.commit() r = db.execute(select(InactivityResetLog).where(InactivityResetLog.user_id == 1)).scalar_one() assert r.reason == "inactive_15d" and r.reset_at is not None n = db.execute(select(InactivityNotificationLog).where(InactivityNotificationLog.user_id == 1)).scalar_one() assert n.stage == 7 and n.created_at is not None finally: db.rollback() db.close()