From dd1f0762759c137e55184cd5153771fbc2d2e762 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 17 May 2024 21:40:46 -0700 Subject: [PATCH] Fix empty trash task, including test --- src/documents/tasks.py | 10 +++++---- src/documents/tests/test_tasks.py | 34 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/documents/tasks.py b/src/documents/tasks.py index 80e81a458..25dea7a2a 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -300,13 +300,15 @@ def update_document_archive_file(document_id): @shared_task def empty_trash(doc_ids=None): - cutoff = timezone.localtime(timezone.now()) - timedelta( - days=settings.EMPTY_TRASH_DELAY, - ) documents = ( Document.deleted_objects.filter(id__in=doc_ids) if doc_ids is not None - else Document.deleted_objects.filter(deleted_at__gt=cutoff) + else Document.deleted_objects.filter( + deleted_at__lt=timezone.localtime(timezone.now()) + - timedelta( + days=settings.EMPTY_TRASH_DELAY, + ), + ) ) # Temporarily connect the cleanup handler (hard_delete calls delete) diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index 334345b6a..a1d21b532 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -1,4 +1,5 @@ import os +from datetime import timedelta from unittest import mock from django.conf import settings @@ -150,3 +151,36 @@ class TestBulkUpdate(DirectoriesMixin, TestCase): ) tasks.bulk_update_documents([doc1.pk]) + + +class TestEmptyTrashTask(DirectoriesMixin, FileSystemAssertsMixin, TestCase): + """ + GIVEN: + - Existing document in trash + WHEN: + - Empty trash task is called without doc_ids + THEN: + - Document is only deleted if it has been in trash for more than delay (default 30 days) + """ + + def test_empty_trash(self): + doc = Document.objects.create( + title="test", + content="my document", + checksum="wow", + added=timezone.now(), + created=timezone.now(), + modified=timezone.now(), + ) + + doc.delete() + self.assertEqual(Document.global_objects.count(), 1) + self.assertEqual(Document.objects.count(), 0) + tasks.empty_trash() + self.assertEqual(Document.global_objects.count(), 1) + + doc.deleted_at = timezone.now() - timedelta(days=31) + doc.save() + + tasks.empty_trash() + self.assertEqual(Document.global_objects.count(), 0)