ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: retention cleanup файлового хранилища
This commit is contained in:
@@ -5,8 +5,10 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
from django.utils import timezone
|
||||
|
||||
from plane.db.models import FileAsset, StoredBlob
|
||||
from plane.bgtasks.file_asset_task import delete_expired_file_asset
|
||||
from plane.utils.file_dedup import attach_existing_blob_to_file_asset, finalize_uploaded_file_asset, release_file_asset_blob
|
||||
|
||||
|
||||
@@ -150,3 +152,26 @@ def test_attach_existing_blob_reuses_canonical_object_without_copy(workspace, pr
|
||||
assert target_asset.asset.name == "workspace/a.txt"
|
||||
assert blob.ref_count == 2
|
||||
assert fake_storage.deleted == []
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_delete_expired_file_asset_releases_blob_and_hard_deletes_rows(workspace, project, fake_storage):
|
||||
first_asset = create_asset(workspace, project, "workspace/a.txt")
|
||||
duplicate_asset = create_asset(workspace, project, "workspace/b.txt")
|
||||
|
||||
with patch("plane.utils.file_dedup.S3Storage", return_value=fake_storage):
|
||||
finalize_uploaded_file_asset(first_asset)
|
||||
finalize_uploaded_file_asset(duplicate_asset)
|
||||
|
||||
deleted_at = timezone.now() - timezone.timedelta(days=90)
|
||||
FileAsset.all_objects.filter(pk__in=[first_asset.pk, duplicate_asset.pk]).update(deleted_at=deleted_at)
|
||||
|
||||
with (
|
||||
patch("plane.utils.file_dedup.S3Storage", return_value=fake_storage),
|
||||
patch("plane.bgtasks.file_asset_task.S3Storage", return_value=fake_storage),
|
||||
):
|
||||
delete_expired_file_asset()
|
||||
|
||||
assert FileAsset.all_objects.filter(pk__in=[first_asset.pk, duplicate_asset.pk]).count() == 0
|
||||
assert StoredBlob.all_objects.count() == 0
|
||||
assert fake_storage.deleted == ["workspace/b.txt", "workspace/a.txt"]
|
||||
|
||||
Reference in New Issue
Block a user