Fix session cleanup cutoff timezone (#2488)
This commit is contained in:
@@ -14,7 +14,7 @@ import logging
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from typing import Dict, Optional
|
||||
|
||||
from .database import Session as DbSession, ChatMessage as DbChatMessage, Document as DbDocument, SessionLocal
|
||||
from .database import Session as DbSession, ChatMessage as DbChatMessage, Document as DbDocument, SessionLocal, utcnow_naive
|
||||
from .models import Session, ChatMessage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -619,7 +619,7 @@ class SessionManager:
|
||||
|
||||
try:
|
||||
all_sessions = db.query(DbSession).all()
|
||||
cutoff_date = datetime.now(timezone.utc) - timedelta(days=auto_archive_days)
|
||||
cutoff_date = utcnow_naive() - timedelta(days=auto_archive_days)
|
||||
|
||||
for db_session in all_sessions:
|
||||
stats['total_checked'] += 1
|
||||
|
||||
34
tests/test_session_manager_cleanup.py
Normal file
34
tests/test_session_manager_cleanup.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from core.session_manager import SessionManager
|
||||
import core.session_manager as SM
|
||||
|
||||
|
||||
def _manager_with(sessions=None):
|
||||
manager = SessionManager.__new__(SessionManager)
|
||||
manager.sessions = dict(sessions or {})
|
||||
return manager
|
||||
|
||||
|
||||
def test_cleanup_empty_sessions_archives_old_naive_last_accessed(monkeypatch):
|
||||
old_session = SimpleNamespace(
|
||||
id="old-chat",
|
||||
archived=False,
|
||||
last_accessed=datetime(2026, 5, 1, 12, 0, 0),
|
||||
message_count=3,
|
||||
is_important=False,
|
||||
)
|
||||
db = MagicMock()
|
||||
db.query.return_value.all.return_value = [old_session]
|
||||
|
||||
monkeypatch.setattr(SM, "SessionLocal", lambda: db)
|
||||
monkeypatch.setattr(SM, "utcnow_naive", lambda: datetime(2026, 6, 4, 12, 0, 0))
|
||||
|
||||
stats = _manager_with().cleanup_empty_sessions(auto_archive_days=30)
|
||||
|
||||
assert old_session.archived is True
|
||||
assert stats == {"deleted_empty": 0, "archived_old": 1, "total_checked": 1}
|
||||
db.commit.assert_called_once()
|
||||
db.rollback.assert_not_called()
|
||||
Reference in New Issue
Block a user