diff --git a/mealie/services/scheduler/tasks/purge_group_exports.py b/mealie/services/scheduler/tasks/purge_group_exports.py index cc173a86b7b..ca8815d8efa 100644 --- a/mealie/services/scheduler/tasks/purge_group_exports.py +++ b/mealie/services/scheduler/tasks/purge_group_exports.py @@ -1,7 +1,7 @@ import datetime from pathlib import Path -from sqlalchemy import select +from sqlalchemy import DateTime, cast, select from mealie.core import root_logger from mealie.core.config import get_app_dirs @@ -19,7 +19,7 @@ def purge_group_data_exports(max_minutes_old=ONE_DAY_AS_MINUTES): limit = datetime.datetime.now() - datetime.timedelta(minutes=max_minutes_old) with session_context() as session: - stmt = select(GroupDataExportsModel).filter(GroupDataExportsModel.expires <= limit) + stmt = select(GroupDataExportsModel).filter(cast(GroupDataExportsModel.expires, DateTime) <= limit) results = session.execute(stmt).scalars().all() total_removed = 0 diff --git a/tests/unit_tests/services_tests/scheduler/tasks/test_purge_group_exports.py b/tests/unit_tests/services_tests/scheduler/tasks/test_purge_group_exports.py new file mode 100644 index 00000000000..409af5e86e7 --- /dev/null +++ b/tests/unit_tests/services_tests/scheduler/tasks/test_purge_group_exports.py @@ -0,0 +1,37 @@ +import tempfile +from pathlib import Path + +from mealie.repos.repository_factory import AllRepositories +from mealie.schema.recipe.recipe import Recipe +from mealie.services.recipe.recipe_bulk_service import RecipeBulkActionsService +from mealie.services.scheduler.tasks.purge_group_exports import purge_group_data_exports +from tests.utils.factories import random_int, random_string +from tests.utils.fixture_schemas import TestUser + + +def test_purge_group_exports(database: AllRepositories, unique_user: TestUser): + # create the export + group = database.groups.get_one(unique_user.group_id) + assert group + user = database.users.get_one(unique_user.user_id) + assert user + recipe_exporter = RecipeBulkActionsService(database, user, group) + recipes = [ + database.recipes.create(Recipe(name=random_string(), group_id=group.id)) for _ in range(random_int(2, 5)) + ] + + with tempfile.NamedTemporaryFile() as tmpfile: + recipe_exporter.export_recipes(Path(tmpfile.name), [recipe.slug for recipe in recipes]) + + exports = recipe_exporter.get_exports() + assert len(exports) == 1 + export = exports[0] + export_path = Path(export.path) + assert export_path.exists() + + # purge the export and confirm all data is removed + purge_group_data_exports(-525600) # 1 year into the future + + assert not export_path.exists() + exports = recipe_exporter.get_exports() + assert not exports