umap/umap/tests/test_empty_trash.py
Yohan Boniface fd8a1971f8 feat: soft delete datalayers
When deleting a datalayer, it will now be moved to a state "deleted", and
it will only be deleted for real when running the command `umap empty_trash`.

This is what we already do for the map itself, but until now if a user
deleted a only a datalayer by mistake (not the map itself) it could not retrieve
it.
2025-01-29 19:08:59 +01:00

41 lines
1.5 KiB
Python

from datetime import datetime, timedelta
from unittest import mock
import pytest
from django.core.management import call_command
from umap.models import DataLayer, Map
from .base import DataLayerFactory, MapFactory
pytestmark = pytest.mark.django_db
def test_empty_trash(user):
recent = MapFactory(owner=user)
recent_layer = DataLayerFactory(map=recent)
deleted_layer = DataLayerFactory(map=recent)
recent_deleted = MapFactory(owner=user)
recent_deleted.move_to_trash()
recent_deleted.save()
with mock.patch("django.utils.timezone.now") as mocked:
mocked.return_value = datetime.utcnow() - timedelta(days=8)
old_deleted = MapFactory(owner=user)
old_deleted.move_to_trash()
deleted_layer.move_to_trash()
old = MapFactory(owner=user)
assert Map.objects.count() == 4
assert DataLayer.objects.count() == 2
call_command("empty_trash", "--days=7", "--dry-run")
assert Map.objects.count() == 4
assert DataLayer.objects.count() == 2
call_command("empty_trash", "--days=9")
assert Map.objects.count() == 4
assert DataLayer.objects.count() == 2
call_command("empty_trash", "--days=7")
assert not Map.objects.filter(pk=old_deleted.pk)
assert Map.objects.filter(pk=old.pk)
assert Map.objects.filter(pk=recent.pk)
assert Map.objects.filter(pk=recent_deleted.pk)
assert not DataLayer.objects.filter(pk=deleted_layer.pk)
assert DataLayer.objects.filter(pk=recent_layer.pk)