e885e2924b
manage.py cleanup [--days N] [--dry-run] — удаляет устаревшие журналы синхронизации (AD/Carbonio/Nextcloud/Mattermost), просроченные инвайты паролей и истёкшие сессии. Бизнес-данные не трогает. Срок хранения — settings.CLEANUP_LOG_RETENTION_DAYS (default 90, env-override). Запуск по cron. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
"""Тесты команды авто-очистки (manage.py cleanup)."""
|
|
from datetime import timedelta
|
|
from io import StringIO
|
|
|
|
from django.core.management import call_command
|
|
from django.test import TestCase
|
|
from django.utils import timezone
|
|
|
|
from apps.employees.models import Employee
|
|
from apps.mattermost_connector.models import MattermostSyncLog
|
|
|
|
|
|
class CleanupCommandTests(TestCase):
|
|
def setUp(self):
|
|
self.emp = Employee.objects.create(
|
|
username='u1', email='u1@example.com',
|
|
hire_date=timezone.now().date(),
|
|
)
|
|
|
|
def _log(self, days_ago):
|
|
log = MattermostSyncLog.objects.create(
|
|
employee=self.emp, action='add_team', status='success', message='t',
|
|
)
|
|
# created_at = auto_now_add; сдвигаем принудительно
|
|
MattermostSyncLog.objects.filter(pk=log.pk).update(
|
|
created_at=timezone.now() - timedelta(days=days_ago)
|
|
)
|
|
return log
|
|
|
|
def test_deletes_old_keeps_recent(self):
|
|
old = self._log(120)
|
|
recent = self._log(10)
|
|
call_command('cleanup', '--days', '90', stdout=StringIO())
|
|
self.assertFalse(MattermostSyncLog.objects.filter(pk=old.pk).exists())
|
|
self.assertTrue(MattermostSyncLog.objects.filter(pk=recent.pk).exists())
|
|
|
|
def test_dry_run_deletes_nothing(self):
|
|
self._log(200)
|
|
call_command('cleanup', '--days', '90', '--dry-run', stdout=StringIO())
|
|
self.assertEqual(MattermostSyncLog.objects.count(), 1)
|