test: 5 final agents — fix 40+ failures, llm_analysis 80%+, git_plugin 90%+, routes 90-98%, services 98-100%, core 90-100%. Coverage: real 87%, target 95%+

This commit is contained in:
2026-06-15 19:31:56 +03:00
parent 51d90f58c1
commit 010edfcfdc
20 changed files with 5275 additions and 231 deletions

View File

@@ -343,5 +343,111 @@ class TestLogPersistence:
self.service.delete_logs_for_tasks([]) # Should not raise
# #endregion test_delete_logs_for_tasks_empty
# #region test_add_logs_db_error_rollback [C:2] [TYPE Function]
# @PURPOSE: add_logs rollbacks on database error.
def test_add_logs_db_error_rollback(self):
entry = LogEntry(timestamp=datetime.now(UTC), level="INFO", source="test", message="will fail")
def broken_session():
s = self.TestSessionLocal()
s.commit = lambda: (_ for _ in ()).throw(RuntimeError("db dead"))
return s
with patch("src.core.task_manager.persistence.TasksSessionLocal", broken_session):
self.service.add_logs("test-task-1", [entry]) # Should not raise
from src.models.task import TaskLogRecord
session = self.TestSessionLocal()
count = session.query(TaskLogRecord).filter_by(task_id="test-task-1").count()
session.close()
assert count == 0 # rolled back
# #endregion test_add_logs_db_error_rollback
# #region test_get_logs_with_metadata_json [C:2] [TYPE Function]
# @PURPOSE: get_logs parses metadata_json field correctly.
def test_get_logs_with_metadata_json(self):
entry = LogEntry(
timestamp=datetime.now(UTC),
level="INFO", source="test", message="metadata test",
metadata={"dashboard_id": "dash-1", "progress": 50},
)
with self._patched("add_logs"):
self.service.add_logs("test-task-1", [entry])
with self._patched("get_logs"):
logs = self.service.get_logs("test-task-1", LogFilter())
assert len(logs) == 1
assert logs[0].metadata == {"dashboard_id": "dash-1", "progress": 50}
# #endregion test_get_logs_with_metadata_json
# #region test_get_logs_with_corrupt_metadata_json [C:2] [TYPE Function]
# @PURPOSE: get_logs handles corrupt metadata_json gracefully.
def test_get_logs_with_corrupt_metadata_json(self):
# Manually insert a log with corrupt metadata_json
from src.models.task import TaskLogRecord
session = self.TestSessionLocal()
record = TaskLogRecord(
task_id="test-task-1",
timestamp=datetime.now(UTC),
level="INFO",
source="test",
message="corrupt metadata",
metadata_json="{not-json",
)
session.add(record)
session.commit()
session.close()
with self._patched("get_logs"):
logs = self.service.get_logs("test-task-1", LogFilter())
assert len(logs) == 1
assert logs[0].metadata is None # gracefully handled
# #endregion test_get_logs_with_corrupt_metadata_json
# #region test_delete_logs_for_task_db_error [C:2] [TYPE Function]
# @PURPOSE: delete_logs_for_task handles database error gracefully.
def test_delete_logs_for_task_db_error(self):
entry = LogEntry(timestamp=datetime.now(UTC), level="INFO", source="test", message="test")
with self._patched("add_logs"):
self.service.add_logs("test-task-1", [entry])
def broken_session():
s = self.TestSessionLocal()
s.commit = lambda: (_ for _ in ()).throw(RuntimeError("delete failed"))
return s
with patch("src.core.task_manager.persistence.TasksSessionLocal", broken_session):
self.service.delete_logs_for_task("test-task-1") # Should not raise
# Logs still exist
from src.models.task import TaskLogRecord
session = self.TestSessionLocal()
count = session.query(TaskLogRecord).filter_by(task_id="test-task-1").count()
session.close()
assert count == 1
# #endregion test_delete_logs_for_task_db_error
# #region test_delete_logs_for_tasks_db_error [C:2] [TYPE Function]
# @PURPOSE: delete_logs_for_tasks handles database error gracefully.
def test_delete_logs_for_tasks_db_error(self):
for tid in ["multi-1", "multi-2"]:
entry = LogEntry(timestamp=datetime.now(UTC), level="INFO", source="test", message="test")
with self._patched("add_logs"):
self.service.add_logs(tid, [entry])
def broken_session():
s = self.TestSessionLocal()
s.commit = lambda: (_ for _ in ()).throw(RuntimeError("batch delete failed"))
return s
with patch("src.core.task_manager.persistence.TasksSessionLocal", broken_session):
self.service.delete_logs_for_tasks(["multi-1", "multi-2"]) # Should not raise
from src.models.task import TaskLogRecord
session = self.TestSessionLocal()
remaining = session.query(TaskLogRecord).all()
session.close()
# All logs that were associated with these task_ids should still exist
multi_ids = [r.task_id for r in remaining if r.task_id in ("multi-1", "multi-2")]
assert len(multi_ids) == 2
# #endregion test_delete_logs_for_tasks_db_error
# #endregion TestLogPersistence
# #endregion test_log_persistence