Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/restic_compose_backup/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
46 changes: 46 additions & 0 deletions src/tests/unit/test_cleanup.py
Original file line number Diff line number Diff line change
@@ -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")