From 18f34d3f7d03130f61285ada704c799124438522 Mon Sep 17 00:00:00 2001 From: Eduard Zateev Date: Wed, 7 Oct 2026 18:03:41 +0200 Subject: [PATCH] Propagate cleanup operation failures --- src/restic_compose_backup/cli.py | 2 +- src/tests/unit/test_cleanup.py | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/tests/unit/test_cleanup.py diff --git a/src/restic_compose_backup/cli.py b/src/restic_compose_backup/cli.py index e395e02..a71985e 100644 --- a/src/restic_compose_backup/cli.py +++ b/src/restic_compose_backup/cli.py @@ -312,7 +312,7 @@ def cleanup(config, containers): ) logger.info("Prune stale data freeing storage space") prune_result = restic.prune(config.repository) - return forget_result and prune_result + return forget_result or prune_result def snapshots(config, containers): diff --git a/src/tests/unit/test_cleanup.py b/src/tests/unit/test_cleanup.py new file mode 100644 index 0000000..4a4a555 --- /dev/null +++ b/src/tests/unit/test_cleanup.py @@ -0,0 +1,46 @@ +"""Unit tests for maintenance cleanup result handling""" + +from unittest import mock + +import pytest + +from restic_compose_backup import cli + +pytestmark = pytest.mark.unit + + +class CleanupTests: + """Tests for reporting failures from forget and prune.""" + + @pytest.mark.parametrize( + ("forget_result", "prune_result", "expected"), + [ + (0, 0, 0), + (1, 0, 1), + (0, 1, 1), + (1, 2, 1), + ], + ) + def test_cleanup_returns_failure_if_either_operation_fails( + self, forget_result, prune_result, expected + ): + config = mock.Mock( + repository="repository", + keep_daily=1, + keep_weekly=2, + keep_monthly=3, + keep_yearly=4, + ) + containers = mock.Mock() + + with ( + mock.patch.object( + cli.restic, "forget", return_value=forget_result + ) as forget, + mock.patch.object(cli.restic, "prune", return_value=prune_result) as prune, + ): + result = cli.cleanup(config, containers) + + assert result == expected + forget.assert_called_once_with("repository", 1, 2, 3, 4) + prune.assert_called_once_with("repository")