fix(tests): 61 failed backend unit tests — async/await mocks, deadlock fix, SyntaxError repairs

Группы исправлений:
- Группа 1 (async/await misuse): MagicMock → AsyncMock для get_dashboards,
  export_dashboard, import_dashboard, sync_environment, get_run_detail,
  list_all_runs, create_task и др. — 23 теста
- Группа 2 (runner.run deadlock): добавлены моки get_async_job_runner +
  IdMappingService/AsyncSupersetClient в migration plugin + API tests
  для предотвращения вечной блокировки future.result() — 16 тестов
- Группа 3 (SyntaxError): исправлены 7 незакрытых скобок ')' в
  test_validation_tasks_comprehensive.py (QA-агент оставил AsyncMock
  без закрывающих скобок)
- Группа 4 (mock verification): logger mock error→explore, scheduler tests
  skipped (удалён из production), dataset mapper — 11 тестов
- Группа 5 (search/assistant): MagicMock → AsyncMock — 9 тестов
- Группа 6 (extractor parsing): AsyncMock для async методов — 9 тестов

Итого: 61 ранее FAILED → 274 passed, 4 skipped, 0 failed
This commit is contained in:
2026-06-18 14:41:13 +03:00
parent 8016c07ebb
commit 4dce669844
122 changed files with 1479 additions and 1583 deletions

View File

@@ -107,11 +107,11 @@ class TestCreateTask:
from src.schemas.validation import ValidationTaskResponse
mock_svc = MagicMock()
mock_svc.create_task.return_value = ValidationTaskResponse(
mock_svc.create_task = AsyncMock(return_value=ValidationTaskResponse(
id="task-new", name="New Task", environment_id="env-1",
is_active=True, dashboard_ids=["dash-1"],
created_at=datetime.now(),
)
))
mock_sched = MagicMock()
from src.api.routes.validation_tasks import _get_task_service
@@ -126,7 +126,7 @@ class TestCreateTask:
def test_value_error(self):
mock_svc = MagicMock()
mock_svc.create_task.side_effect = ValueError("Invalid provider")
mock_svc.create_task = AsyncMock(side_effect=ValueError("Invalid provider"))
from src.api.routes.validation_tasks import _get_task_service
client = _make_client({_get_task_service: lambda: mock_svc})
@@ -174,11 +174,11 @@ class TestUpdateTask:
from src.schemas.validation import ValidationTaskResponse
mock_svc = MagicMock()
mock_svc.update_task.return_value = ValidationTaskResponse(
mock_svc.update_task = AsyncMock(return_value=ValidationTaskResponse(
id="task-1", name="Updated Task", environment_id="env-1",
is_active=True, dashboard_ids=["dash-1"],
created_at=datetime.now(),
)
))
mock_sched = MagicMock()
from src.api.routes.validation_tasks import _get_task_service
@@ -193,7 +193,7 @@ class TestUpdateTask:
def test_not_found(self):
mock_svc = MagicMock()
mock_svc.update_task.side_effect = ValueError("Task not found")
mock_svc.update_task = AsyncMock(side_effect=ValueError("Task not found"))
from src.api.routes.validation_tasks import _get_task_service
client = _make_client({_get_task_service: lambda: mock_svc})
@@ -208,11 +208,11 @@ class TestToggleTaskStatus:
def test_activate(self):
mock_svc = MagicMock()
mock_svc.update_task.return_value = {
mock_svc.update_task = AsyncMock(return_value={
"id": "task-1", "name": "Task", "environment_id": "env-1",
"is_active": True, "dashboard_ids": ["dash-1"],
"created_at": "2024-01-01T00:00:00",
}
})
mock_sched = MagicMock()
from src.api.routes.validation_tasks import _get_task_service
@@ -227,11 +227,11 @@ class TestToggleTaskStatus:
def test_deactivate(self):
mock_svc = MagicMock()
mock_svc.update_task.return_value = {
mock_svc.update_task = AsyncMock(return_value={
"id": "task-1", "name": "Task", "environment_id": "env-1",
"is_active": False, "dashboard_ids": ["dash-1"],
"created_at": "2024-01-01T00:00:00",
}
})
mock_sched = MagicMock()
from src.api.routes.validation_tasks import _get_task_service
@@ -246,7 +246,7 @@ class TestToggleTaskStatus:
def test_not_found(self):
mock_svc = MagicMock()
mock_svc.update_task.side_effect = ValueError("Task not found")
mock_svc.update_task = AsyncMock(side_effect=ValueError("Task not found"))
from src.api.routes.validation_tasks import _get_task_service
client = _make_client({_get_task_service: lambda: mock_svc})
@@ -289,9 +289,9 @@ class TestListAllRuns:
def test_success(self):
mock_svc = MagicMock()
mock_svc.list_all_runs.return_value = (1, [{
mock_svc.list_all_runs = AsyncMock(return_value=(1, [{
"id": "run-1", "dashboard_id": "dash-1", "status": "SUCCESS",
}])
}]))
from src.api.routes.validation_tasks import _get_task_service
client = _make_client({_get_task_service: lambda: mock_svc})
@@ -302,7 +302,7 @@ class TestListAllRuns:
def test_with_filters(self):
mock_svc = MagicMock()
mock_svc.list_all_runs.return_value = (0, [])
mock_svc.list_all_runs = AsyncMock(return_value=(0, []))
from src.api.routes.validation_tasks import _get_task_service
client = _make_client({_get_task_service: lambda: mock_svc})
@@ -311,7 +311,7 @@ class TestListAllRuns:
def test_value_error(self):
mock_svc = MagicMock()
mock_svc.list_all_runs.side_effect = ValueError("Invalid filter")
mock_svc.list_all_runs = AsyncMock(side_effect=ValueError("Invalid filter"))
from src.api.routes.validation_tasks import _get_task_service
client = _make_client({_get_task_service: lambda: mock_svc})
@@ -357,12 +357,12 @@ class TestGetRunDetail:
def test_success(self):
mock_svc = MagicMock()
mock_svc.get_run_detail.return_value = {
mock_svc.get_run_detail = AsyncMock(return_value={
"run": {"id": "run-1", "policy_id": "task-1", "status": "SUCCESS",
"trigger": "manual", "dashboard_count": 2, "pass_count": 1,
"warn_count": 0, "fail_count": 0, "unknown_count": 0},
"records": [{"dashboard_id": "dash-1", "status": "PASS"}],
}
})
from src.api.routes.validation_tasks import _get_task_service
client = _make_client({_get_task_service: lambda: mock_svc})