test: final 6 agents — 172+ translate tests, llm_analysis 89%, git_plugin 100%, migration/deps/routes polished. 85-94% files pushed to 95%+. Bulk: backup/debug/maintenance plugins
This commit is contained in:
@@ -396,4 +396,112 @@ def test_execution_error_handled():
|
||||
mock_db.close.assert_called_once()
|
||||
# #endregion test_execution_error_handled
|
||||
|
||||
|
||||
# #region test_execution_run_status_failed_path [C:1] [TYPE Function]
|
||||
def test_execution_run_status_failed_path():
|
||||
"""execute_run succeeds but run.status == 'FAILED' → hits lines 388-392."""
|
||||
from src.plugins.translate.scheduler import execute_scheduled_translation
|
||||
|
||||
mock_db = MagicMock()
|
||||
mock_session_maker = MagicMock(return_value=mock_db)
|
||||
mock_config = MagicMock()
|
||||
|
||||
schedule = MagicMock()
|
||||
schedule.id = "sched-fail"
|
||||
schedule.job_id = "job-fail"
|
||||
schedule.is_active = True
|
||||
schedule.execution_mode = "full"
|
||||
|
||||
most_recent = _make_most_recent_run(created_at_delta_days=30)
|
||||
|
||||
q1 = MagicMock()
|
||||
q1.filter.return_value.first.return_value = schedule
|
||||
q2 = MagicMock()
|
||||
q2.filter.return_value.order_by.return_value.first.return_value = None
|
||||
q3 = MagicMock()
|
||||
q3.filter.return_value.order_by.return_value.first.return_value = most_recent
|
||||
mock_db.query.side_effect = [q1, q2, q3]
|
||||
|
||||
mock_run = _make_mock_run(run_id="run-fail", job_id="job-fail")
|
||||
mock_run.status = "FAILED" # execute_run sets this
|
||||
|
||||
with patch(
|
||||
"src.plugins.translate.orchestrator.TranslationOrchestrator"
|
||||
) as mock_orch_cls:
|
||||
mock_orch = MagicMock()
|
||||
mock_orch.start_run.return_value = mock_run
|
||||
mock_orch_cls.return_value = mock_orch
|
||||
|
||||
execute_scheduled_translation(
|
||||
schedule_id="sched-fail",
|
||||
job_id="job-fail",
|
||||
db_session_maker=mock_session_maker,
|
||||
config_manager=mock_config,
|
||||
execution_mode="full",
|
||||
)
|
||||
|
||||
# The run.status == "FAILED" path sets insert_status = run.insert_status or None
|
||||
assert mock_run.insert_status is None # None or None -> None
|
||||
mock_orch.execute_run.assert_called_once()
|
||||
mock_db.close.assert_called_once()
|
||||
# #endregion test_execution_run_status_failed_path
|
||||
|
||||
|
||||
# #region test_execution_notification_error [C:1] [TYPE Function]
|
||||
def test_execution_notification_error():
|
||||
"""execute_run raises and notification send also raises → both caught (lines 413-415, 431-442)."""
|
||||
from src.plugins.translate.scheduler import execute_scheduled_translation
|
||||
|
||||
mock_db = MagicMock()
|
||||
mock_session_maker = MagicMock(return_value=mock_db)
|
||||
mock_config = MagicMock()
|
||||
|
||||
schedule = MagicMock()
|
||||
schedule.id = "sched-notif"
|
||||
schedule.job_id = "job-notif"
|
||||
schedule.is_active = True
|
||||
schedule.execution_mode = "full"
|
||||
|
||||
q1 = MagicMock()
|
||||
q1.filter.return_value.first.return_value = schedule
|
||||
q2 = MagicMock()
|
||||
q2.filter.return_value.order_by.return_value.first.return_value = None
|
||||
q3 = MagicMock()
|
||||
q3.filter.return_value.order_by.return_value.first.return_value = None
|
||||
mock_db.query.side_effect = [q1, q2, q3]
|
||||
|
||||
mock_run = _make_mock_run(run_id="run-notif", job_id="job-notif")
|
||||
|
||||
with patch(
|
||||
"src.plugins.translate.orchestrator.TranslationOrchestrator"
|
||||
) as mock_orch_cls, patch(
|
||||
"src.plugins.translate.scheduler.NotificationService"
|
||||
) as mock_notif_cls:
|
||||
mock_orch = MagicMock()
|
||||
mock_orch.start_run.return_value = mock_run
|
||||
mock_orch.execute_run.side_effect = RuntimeError("LLM timeout")
|
||||
mock_orch_cls.return_value = mock_orch
|
||||
|
||||
# Make notification send also raise
|
||||
mock_provider = MagicMock()
|
||||
mock_provider.send.side_effect = Exception("Email down")
|
||||
mock_notif_svc = MagicMock()
|
||||
mock_notif_svc._providers = {"email": mock_provider}
|
||||
mock_notif_cls.return_value = mock_notif_svc
|
||||
|
||||
execute_scheduled_translation(
|
||||
schedule_id="sched-notif",
|
||||
job_id="job-notif",
|
||||
db_session_maker=mock_session_maker,
|
||||
config_manager=mock_config,
|
||||
execution_mode="full",
|
||||
)
|
||||
|
||||
assert mock_run.status == "FAILED"
|
||||
assert mock_run.completed_at is not None
|
||||
assert schedule.last_run_at is not None
|
||||
mock_db.commit.assert_called()
|
||||
mock_db.close.assert_called_once()
|
||||
# #endregion test_execution_notification_error
|
||||
|
||||
# #endregion TestTranslateSchedulerExecution
|
||||
|
||||
Reference in New Issue
Block a user