Files
geointel/backend/tests/test_runtime_reconciliation_service.py
T
Codex 9c402e0df2
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s
Start autonomous Belgium and North Sea RC
2026-07-18 00:12:34 +02:00

51 lines
1.7 KiB
Python

from __future__ import annotations
from datetime import datetime, timezone
from unittest.mock import MagicMock
from app.models import AnalysisRun, Job
from app.services.runtime_reconciliation_service import RuntimeReconciliationService
def test_reconciliation_terminalizes_only_running_work() -> None:
db = MagicMock()
jobs = MagicMock()
runs = MagicMock()
jobs.filter.return_value.update.return_value = 5
runs.filter.return_value.update.return_value = 2
db.query.side_effect = [jobs, runs]
finished_at = datetime(2026, 7, 17, 20, 0, tzinfo=timezone.utc)
result = RuntimeReconciliationService.reconcile(
db,
finished_at=finished_at,
)
assert result.interrupted_jobs == 5
assert result.interrupted_analysis_runs == 2
jobs.filter.assert_called_once()
runs.filter.assert_called_once()
job_values = jobs.filter.return_value.update.call_args.args[0]
run_values = runs.filter.return_value.update.call_args.args[0]
assert job_values[Job.status] == "failed"
assert job_values[Job.finished_at] == finished_at
assert "PROCESS_INTERRUPTED" in job_values[Job.error_message]
assert run_values[AnalysisRun.status] == "failed"
assert run_values[AnalysisRun.finished_at] == finished_at
assert "PROCESS_INTERRUPTED" in run_values[AnalysisRun.error_message]
db.commit.assert_called_once_with()
def test_startup_reconciliation_is_enabled_only_in_all_in_one_runtime() -> None:
start_script = (
__import__("pathlib").Path(__file__).resolve().parents[2]
/ "deploy"
/ "unraid"
/ "all-in-one-start.sh"
).read_text(encoding="utf-8")
assert (
'GEOINTEL_RECONCILE_INTERRUPTED_RUNS_ON_STARTUP:-true'
in start_script
)