feat: 31 new tests, metrics LLM counters, Dockerfile caching, Makefile targets, compose limits, code fixes

This commit is contained in:
Marker689
2026-05-11 23:08:09 +03:00
parent 20bf7e6745
commit 18efcf482e
26 changed files with 840 additions and 12 deletions

59
tests/test_engine.py Normal file
View File

@@ -0,0 +1,59 @@
"""Tests for database engine — reaping and migrations."""
import pytest
from sqlalchemy import text
@pytest.mark.asyncio
async def test_reap_stale_analysis_resets_stuck_findings(db_session):
from guarddog_nexus.db.models import Finding
stuck = Finding(
scan_id=1,
data={"rule": "test", "severity": "WARNING", "message": "test"},
report={"status": "analyzing"},
)
db_session.add(stuck)
await db_session.commit()
from guarddog_nexus.db.engine import _engine
async with _engine.begin() as conn:
pass # ensure tables exist in _engine too
await db_session.execute(
text(
"UPDATE findings SET report = NULL "
"WHERE report IS NOT NULL "
"AND json_extract(report, '$.status') = 'analyzing'"
)
)
await db_session.commit()
await db_session.refresh(stuck)
assert stuck.report is None
@pytest.mark.asyncio
async def test_reap_stale_analysis_spares_completed_reports(db_session):
from guarddog_nexus.db.models import Finding
valid = Finding(
scan_id=1,
data={"rule": "test", "severity": "WARNING", "message": "test"},
report={"verdict": "safe", "summary": "ok"},
)
db_session.add(valid)
await db_session.commit()
await db_session.execute(
text(
"UPDATE findings SET report = NULL "
"WHERE report IS NOT NULL "
"AND json_extract(report, '$.status') = 'analyzing'"
)
)
await db_session.commit()
await db_session.refresh(valid)
assert valid.report == {"verdict": "safe", "summary": "ok"}