Fence Campaign delivery effects in recovery ledger
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import Mock
|
||||
|
||||
import pytest
|
||||
|
||||
from govoplan_core.core.recovery import RecoveryStatus
|
||||
from govoplan_campaign.backend.sending import jobs
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("outcome", "expected_method", "expected_status"),
|
||||
[
|
||||
("succeeded", "succeed", None),
|
||||
("failed", "reject", None),
|
||||
("outcome_unknown", "unresolved", RecoveryStatus.OUTCOME_UNKNOWN),
|
||||
("recovery_required", "unresolved", RecoveryStatus.RECOVERY_REQUIRED),
|
||||
],
|
||||
)
|
||||
def test_delivery_recovery_maps_verified_job_state(
|
||||
monkeypatch,
|
||||
outcome: str,
|
||||
expected_method: str,
|
||||
expected_status: RecoveryStatus | None,
|
||||
) -> None:
|
||||
evidence = {
|
||||
"verified": outcome != "recovery_required",
|
||||
"checks": {"job_state_reloaded": True},
|
||||
"send_status": outcome,
|
||||
}
|
||||
monkeypatch.setattr(
|
||||
jobs,
|
||||
"_job_delivery_recovery_evidence",
|
||||
lambda _job_id: (outcome, evidence),
|
||||
)
|
||||
operation = Mock()
|
||||
|
||||
jobs._finish_job_delivery_recovery(operation, job_id="job-1")
|
||||
|
||||
method = getattr(operation, expected_method)
|
||||
method.assert_called_once()
|
||||
if expected_status is not None:
|
||||
assert method.call_args.kwargs["status"] == expected_status
|
||||
for other in {"succeed", "reject", "unresolved"} - {expected_method}:
|
||||
getattr(operation, other).assert_not_called()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("outcome", "expected_method", "expected_status"),
|
||||
[
|
||||
("succeeded", "succeed", None),
|
||||
("failed", "reject", None),
|
||||
("outcome_unknown", "unresolved", RecoveryStatus.OUTCOME_UNKNOWN),
|
||||
("recovery_required", "unresolved", RecoveryStatus.RECOVERY_REQUIRED),
|
||||
],
|
||||
)
|
||||
def test_imap_recovery_maps_verified_append_state(
|
||||
monkeypatch,
|
||||
outcome: str,
|
||||
expected_method: str,
|
||||
expected_status: RecoveryStatus | None,
|
||||
) -> None:
|
||||
evidence = {
|
||||
"verified": outcome != "recovery_required",
|
||||
"checks": {"job_state_reloaded": True},
|
||||
"imap_status": outcome,
|
||||
}
|
||||
monkeypatch.setattr(
|
||||
jobs,
|
||||
"_imap_recovery_evidence",
|
||||
lambda _job_id: (outcome, evidence),
|
||||
)
|
||||
operation = Mock()
|
||||
|
||||
jobs._finish_imap_append_recovery(operation, job_id="job-1")
|
||||
|
||||
method = getattr(operation, expected_method)
|
||||
method.assert_called_once()
|
||||
if expected_status is not None:
|
||||
assert method.call_args.kwargs["status"] == expected_status
|
||||
for other in {"succeed", "reject", "unresolved"} - {expected_method}:
|
||||
getattr(operation, other).assert_not_called()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("outcome", "expected_method", "expected_status"),
|
||||
[
|
||||
("succeeded", "succeed", None),
|
||||
("failed", "reject", None),
|
||||
("outcome_unknown", "unresolved", RecoveryStatus.OUTCOME_UNKNOWN),
|
||||
("recovery_required", "unresolved", RecoveryStatus.RECOVERY_REQUIRED),
|
||||
],
|
||||
)
|
||||
def test_single_action_recovery_maps_verified_action_state(
|
||||
monkeypatch,
|
||||
outcome: str,
|
||||
expected_method: str,
|
||||
expected_status: RecoveryStatus | None,
|
||||
) -> None:
|
||||
evidence = {
|
||||
"verified": outcome != "recovery_required",
|
||||
"checks": {"action_state_reloaded": True},
|
||||
"action_status": outcome,
|
||||
}
|
||||
monkeypatch.setattr(
|
||||
jobs,
|
||||
"_single_action_recovery_evidence",
|
||||
lambda _action_id: (outcome, evidence),
|
||||
)
|
||||
operation = Mock()
|
||||
|
||||
jobs._finish_single_action_delivery_recovery(operation, action_id="action-1")
|
||||
|
||||
method = getattr(operation, expected_method)
|
||||
method.assert_called_once()
|
||||
if expected_status is not None:
|
||||
assert method.call_args.kwargs["status"] == expected_status
|
||||
for other in {"succeed", "reject", "unresolved"} - {expected_method}:
|
||||
getattr(operation, other).assert_not_called()
|
||||
Reference in New Issue
Block a user