From a8b1e5ac7c191815e841ab33853c02e60f471392 Mon Sep 17 00:00:00 2001 From: codex Date: Tue, 21 Apr 2026 04:24:53 -0300 Subject: [PATCH] test(ariadne): cover nextcloud maintenance failures --- .../services/test_nextcloud_maintenance.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/unit/services/test_nextcloud_maintenance.py diff --git a/tests/unit/services/test_nextcloud_maintenance.py b/tests/unit/services/test_nextcloud_maintenance.py new file mode 100644 index 0000000..fbb920b --- /dev/null +++ b/tests/unit/services/test_nextcloud_maintenance.py @@ -0,0 +1,50 @@ +import types + +import pytest + +from ariadne.k8s.exec import ExecError +from ariadne.services import nextcloud_maintenance as maintenance + + +def _settings(**overrides): + base = { + "nextcloud_namespace": "nextcloud", + "nextcloud_exec_timeout_sec": 30.0, + "nextcloud_url": "https://cloud.bstein.dev", + } + base.update(overrides) + return types.SimpleNamespace(**base) + + +def test_nextcloud_maintenance_requires_namespace(monkeypatch) -> None: + monkeypatch.setattr(maintenance, "settings", _settings(nextcloud_namespace="")) + + with pytest.raises(RuntimeError, match="not configured"): + maintenance.run_maintenance(types.SimpleNamespace()) + + +def test_nextcloud_maintenance_handles_exec_error(monkeypatch) -> None: + monkeypatch.setattr(maintenance, "settings", _settings()) + + class Executor: + def exec(self, *args, **kwargs): + raise ExecError("pod failed") + + service = types.SimpleNamespace(_executor=Executor()) + + assert maintenance.run_maintenance(service) == {"status": "error", "detail": "pod failed"} + + +def test_nextcloud_maintenance_handles_generic_error(monkeypatch) -> None: + monkeypatch.setattr(maintenance, "settings", _settings()) + + class Executor: + def exec(self, *args, **kwargs): + return None + + def fail_occ(_args): + raise ValueError("occ failed") + + service = types.SimpleNamespace(_executor=Executor(), _occ=fail_occ) + + assert maintenance.run_maintenance(service) == {"status": "error", "detail": "occ failed"}