def test_clean_archived_data(self) -> None: self._make_expired_zulip_messages(7) archive_messages( chunk_size=2) # Small chunk size to have multiple transactions transactions = list(ArchiveTransaction.objects.all()) for transaction in transactions[0:-1]: transaction.timestamp = timezone_now() - timedelta( days=settings.ARCHIVED_DATA_VACUUMING_DELAY_DAYS + 1) transaction.save() message_ids_to_clean = list( ArchivedMessage.objects.filter( archive_transaction__in=transactions[0:-1]).values_list( "id", flat=True)) clean_archived_data() remaining_transactions = list(ArchiveTransaction.objects.all()) self.assert_length(remaining_transactions, 1) # All transactions except the last one were deleted: self.assertEqual(remaining_transactions[0].id, transactions[-1].id) # And corresponding ArchivedMessages should have been deleted: self.assertFalse( ArchivedMessage.objects.filter( id__in=message_ids_to_clean).exists()) self.assertFalse( ArchivedUserMessage.objects.filter( message_id__in=message_ids_to_clean).exists()) for message in ArchivedMessage.objects.all(): self.assertEqual(message.archive_transaction_id, remaining_transactions[0].id)
def handle(self, *args: Any, **options: str) -> None: clean_archived_data() archive_messages()