From a8a24b5429072779ad41cf68d8707caf459da2d1 Mon Sep 17 00:00:00 2001 From: Kitos Date: Mon, 18 May 2026 14:00:48 +0200 Subject: [PATCH] fix(metrics): correct never-tested technique query [FASE-2.6] Use distinct technique_id list filtering so untested techniques are returned reliably on SQLite and Postgres. --- backend/app/services/advanced_metrics_service.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/backend/app/services/advanced_metrics_service.py b/backend/app/services/advanced_metrics_service.py index 40a669b..31bb2f4 100644 --- a/backend/app/services/advanced_metrics_service.py +++ b/backend/app/services/advanced_metrics_service.py @@ -51,13 +51,17 @@ def get_coverage_by_tactic(db: Session) -> list[dict]: def get_never_tested_techniques(db: Session) -> list[dict]: """Techniques that have never had a test created.""" - tested_technique_ids = db.query(Test.technique_id).distinct().subquery() - techniques = ( - db.query(Technique) - .filter(~Technique.id.in_(db.query(tested_technique_ids))) - .order_by(Technique.mitre_id) + tested_ids = [ + row[0] + for row in db.query(Test.technique_id) + .filter(Test.technique_id.isnot(None)) + .distinct() .all() - ) + ] + query = db.query(Technique) + if tested_ids: + query = query.filter(~Technique.id.in_(tested_ids)) + techniques = query.order_by(Technique.mitre_id).all() return [ { "mitre_id": t.mitre_id,