"""Shared fixtures for the simple_backup tests""" import sys from collections.abc import Callable, Iterator from datetime import datetime, timedelta import pytest from simple_backup import simple_backup as sb @pytest.fixture(autouse=True) def no_side_effects(monkeypatch: pytest.MonkeyPatch) -> None: """Keep tests out of the systemd journal and the desktop notifications""" if hasattr(sb, 'j_handler'): sb.logger.removeHandler(sb.j_handler) monkeypatch.setattr(sb, '_notify', lambda text: None) @pytest.fixture def fake_now(monkeypatch: pytest.MonkeyPatch) -> None: """Give each backup a new timestamp, as real runs within the same second would collide""" def times() -> Iterator[datetime]: t = datetime(2026, 10, 14, 10, 0, 0) while True: yield t t += timedelta(hours=1) it = times() class FakeDatetime: @staticmethod def now() -> datetime: return next(it) monkeypatch.setattr(sb, 'datetime', FakeDatetime) @pytest.fixture def run_cli(monkeypatch: pytest.MonkeyPatch) -> Callable[..., int]: """Run simple_backup() with the given command line arguments""" def run(*argv: str) -> int: monkeypatch.setattr(sys, 'argv', ['simple_backup', *argv]) return sb.simple_backup() return run