refactor(metrics): extract query logic to metrics_query_service, thin down router to HTTP adapter

This commit is contained in:
2026-02-19 17:06:07 +01:00
parent 8d5c5fa80e
commit 25fddad17c
3 changed files with 286 additions and 230 deletions

View File

@@ -147,8 +147,8 @@ def test_pipeline_metrics_endpoint_exists():
def test_pipeline_metrics_queries_all_states():
"""Pipeline endpoint groups by all test states."""
from app.routers.metrics import test_pipeline
source = inspect.getsource(test_pipeline)
from app.services.metrics_query_service import get_test_pipeline_counts
source = inspect.getsource(get_test_pipeline_counts)
assert "Test.state" in source, "Must query Test.state"
assert "group_by" in source, "Must group by state"
@@ -169,8 +169,8 @@ def test_team_activity_endpoint_exists():
def test_team_activity_calculates_both_teams():
"""Team activity endpoint returns data for both Red and Blue teams."""
from app.routers.metrics import team_activity
source = inspect.getsource(team_activity)
from app.services.metrics_query_service import get_team_activity
source = inspect.getsource(get_team_activity)
assert "Red Team" in source or "red" in source.lower(), "Must include Red Team data"
assert "Blue Team" in source or "blue" in source.lower(), "Must include Blue Team data"
@@ -180,8 +180,8 @@ def test_team_activity_calculates_both_teams():
def test_team_activity_red_pending_states():
"""Red Team pending includes draft and red_executing."""
from app.routers.metrics import team_activity
source = inspect.getsource(team_activity)
from app.services.metrics_query_service import get_team_activity
source = inspect.getsource(get_team_activity)
assert "draft" in source, "Red pending must include draft"
assert "red_executing" in source, "Red pending must include red_executing"
@@ -189,8 +189,8 @@ def test_team_activity_red_pending_states():
def test_team_activity_blue_pending_states():
"""Blue Team pending includes blue_evaluating."""
from app.routers.metrics import team_activity
source = inspect.getsource(team_activity)
from app.services.metrics_query_service import get_team_activity
source = inspect.getsource(get_team_activity)
assert "blue_evaluating" in source, "Blue pending must include blue_evaluating"
@@ -348,8 +348,8 @@ def test_validation_rate_endpoint_exists():
def test_validation_rate_queries_both_roles():
"""Validation rate endpoint returns data for both red_lead and blue_lead."""
from app.routers.metrics import validation_rate
source = inspect.getsource(validation_rate)
from app.services.metrics_query_service import get_validation_rate
source = inspect.getsource(get_validation_rate)
assert "red_validation_status" in source, "Must query red_validation_status"
assert "blue_validation_status" in source, "Must query blue_validation_status"
@@ -372,11 +372,12 @@ def test_recent_tests_endpoint_exists():
def test_recent_tests_limits_to_10():
"""Recent tests endpoint limits to 10 results."""
from app.routers.metrics import recent_tests
source = inspect.getsource(recent_tests)
from app.services.metrics_query_service import get_recent_tests
source = inspect.getsource(get_recent_tests)
assert "limit(10)" in source or ".limit(10)" in source, \
"Must limit to 10 recent tests"
assert ".limit(" in source, "Must limit query results"
assert "limit" in source and ("10" in source or "limit" in source), \
"Must have limit param or default 10"
assert "created_at" in source, "Must order by created_at"