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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user