SESSION SUMMARY: - Started at 7194 tests, 80% raw / 93.4% real - Ended at 7778 tests, 84% raw / 98.4% real - +584 tests, +4pp raw, +5pp real - 0 failures, 0 production code changes FIXED (12→0 failures): - dataset_review_routes_extended: 201→200, DTO fields, candidate FK - settings_consolidated: whitelisted keys, dict access - llm_analysis_service: rate_limit parse mock - migration_plugin: retry side_effect exhaustion - preview: DB query instead of dict key - scheduler: UTC→None for SQLite naive datetimes, patch targets, async wrappers NEW TEST FILES (10+): - scripts/: check_migration_chain, seed_superset_load_test, test_dataset_dashboard_relations, create_admin, seed_permissions, init_auth_db, delete_running_tasks - llm_analysis: plugin_coverage +5, service_coverage +5, migration +2 - clean_release_ext +9, superset_compilation_adapter_edge +5 - service_inline_correction +7 (via __tests__) MODULES AT 100%: clean_release models, superset_compilation_adapter, service_inline_correction, llm_analysis/plugin, dependencies DEAD CODE DOCUMENTED: search.py (L206-215 indentation bug), llm_analysis/service (L459 HTTPS, L594 duplicate tab, L639-697 CDP-only)
100 lines
3.6 KiB
Python
100 lines
3.6 KiB
Python
# #region TestDeleteRunningTasks [C:2] [TYPE Module] [SEMANTICS test,maintenance,tasks,cleanup]
|
|
# @BRIEF Tests for delete_running_tasks.py script (mocked DB session).
|
|
# @RELATION BINDS_TO -> [DeleteRunningTasksUtil]
|
|
# @TEST_EDGE: delete_with_running_tasks -> Deletes found tasks
|
|
# @TEST_EDGE: delete_no_running_tasks -> Prints message, no deletion
|
|
# @TEST_EDGE: delete_db_error -> Rollback on failure
|
|
import sys
|
|
from pathlib import Path
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "src"))
|
|
|
|
|
|
# =============================================================================
|
|
# delete_running_tasks
|
|
# =============================================================================
|
|
|
|
class TestDeleteRunningTasks:
|
|
"""Tests for delete_running_tasks.delete_running_tasks()."""
|
|
|
|
@patch("src.scripts.delete_running_tasks.TasksSessionLocal")
|
|
def test_deletes_found_tasks(self, MockSession, capsys):
|
|
"""Happy: running tasks found and deleted."""
|
|
from src.scripts.delete_running_tasks import delete_running_tasks
|
|
|
|
mock_session = MagicMock()
|
|
MockSession.return_value = mock_session
|
|
|
|
# Mock running tasks query results
|
|
task1 = MagicMock()
|
|
task1.id = "task-1"
|
|
task1.type = "backup"
|
|
task2 = MagicMock()
|
|
task2.id = "task-2"
|
|
task2.type = "migration"
|
|
|
|
mock_query = MagicMock()
|
|
mock_query.filter.return_value.all.return_value = [task1, task2]
|
|
mock_session.query.return_value = mock_query
|
|
|
|
delete_running_tasks()
|
|
|
|
# Verify tasks were printed
|
|
captured = capsys.readouterr()
|
|
assert "Found 2 RUNNING tasks" in captured.out
|
|
assert "task-1" in captured.out
|
|
assert "task-2" in captured.out
|
|
assert "Successfully deleted 2 RUNNING tasks" in captured.out
|
|
|
|
# Verify delete was called
|
|
mock_query.filter.assert_called()
|
|
mock_session.commit.assert_called_once()
|
|
mock_session.close.assert_called_once()
|
|
|
|
@patch("src.scripts.delete_running_tasks.TasksSessionLocal")
|
|
def test_no_running_tasks(self, MockSession, capsys):
|
|
"""Edge: no running tasks prints message, no delete."""
|
|
from src.scripts.delete_running_tasks import delete_running_tasks
|
|
|
|
mock_session = MagicMock()
|
|
MockSession.return_value = mock_session
|
|
|
|
mock_query = MagicMock()
|
|
mock_query.filter.return_value.all.return_value = []
|
|
mock_session.query.return_value = mock_query
|
|
|
|
delete_running_tasks()
|
|
|
|
captured = capsys.readouterr()
|
|
assert "No RUNNING tasks found" in captured.out
|
|
|
|
# Verify no delete or commit happened
|
|
mock_session.commit.assert_not_called()
|
|
mock_session.close.assert_called_once()
|
|
|
|
@patch("src.scripts.delete_running_tasks.TasksSessionLocal")
|
|
def test_db_error_rollback(self, MockSession, capsys):
|
|
"""Edge: DB error triggers rollback."""
|
|
from src.scripts.delete_running_tasks import delete_running_tasks
|
|
|
|
mock_session = MagicMock()
|
|
MockSession.return_value = mock_session
|
|
|
|
# Make all() raise exception
|
|
mock_query = MagicMock()
|
|
mock_query.filter.return_value.all.side_effect = Exception("DB connection lost")
|
|
mock_session.query.return_value = mock_query
|
|
|
|
delete_running_tasks()
|
|
|
|
captured = capsys.readouterr()
|
|
assert "Error deleting tasks" in captured.out
|
|
assert "DB connection lost" in captured.out
|
|
|
|
mock_session.rollback.assert_called_once()
|
|
mock_session.close.assert_called_once()
|
|
# #endregion TestDeleteRunningTasks
|