fix(ci): resolve backend check failures in dashboard metrics

This commit is contained in:
Abhimanyu Saharan
2026-03-04 16:11:14 +05:30
parent bdc9fc3f01
commit 4378d354f4
4 changed files with 43 additions and 35 deletions

View File

@@ -248,14 +248,11 @@ async def list_activity(
actor: ActorContext = ACTOR_DEP, actor: ActorContext = ACTOR_DEP,
) -> LimitOffsetPage[ActivityEventRead]: ) -> LimitOffsetPage[ActivityEventRead]:
"""List activity events visible to the calling actor.""" """List activity events visible to the calling actor."""
statement: Any = ( statement: Any = select(
select( ActivityEvent,
ActivityEvent, col(ActivityEvent.board_id).label("event_board_id"),
col(ActivityEvent.board_id).label("event_board_id"), col(Task.board_id).label("task_board_id"),
col(Task.board_id).label("task_board_id"), ).outerjoin(Task, col(ActivityEvent.task_id) == col(Task.id))
)
.outerjoin(Task, col(ActivityEvent.task_id) == col(Task.id))
)
if actor.actor_type == "agent" and actor.agent: if actor.actor_type == "agent" and actor.agent:
statement = statement.where(col(ActivityEvent.agent_id) == actor.agent.id) statement = statement.where(col(ActivityEvent.agent_id) == actor.agent.id)
elif actor.actor_type == "user" and actor.user: elif actor.actor_type == "user" and actor.user:

View File

@@ -423,15 +423,7 @@ async def _pending_approvals_snapshot(
rows = ( rows = (
await session.exec( await session.exec(
select( select(Approval, Board, Task)
col(Approval.id),
col(Approval.board_id),
col(Board.name),
col(Approval.action_type),
col(Approval.confidence),
col(Approval.created_at),
col(Task.title),
)
.join(Board, col(Board.id) == col(Approval.board_id)) .join(Board, col(Board.id) == col(Approval.board_id))
.outerjoin(Task, col(Task.id) == col(Approval.task_id)) .outerjoin(Task, col(Task.id) == col(Approval.task_id))
.where(col(Approval.board_id).in_(board_ids)) .where(col(Approval.board_id).in_(board_ids))
@@ -443,15 +435,15 @@ async def _pending_approvals_snapshot(
items = [ items = [
DashboardPendingApproval( DashboardPendingApproval(
approval_id=approval_id, approval_id=approval.id,
board_id=board_id, board_id=approval.board_id,
board_name=board_name, board_name=board.name,
action_type=action_type, action_type=approval.action_type,
confidence=float(confidence), confidence=float(approval.confidence),
created_at=created_at, created_at=approval.created_at,
task_title=task_title, task_title=task.title if task is not None else None,
) )
for approval_id, board_id, board_name, action_type, confidence, created_at, task_title in rows for approval, board, task in rows
] ]
return DashboardPendingApprovals(total=total, items=items) return DashboardPendingApprovals(total=total, items=items)

View File

@@ -129,9 +129,7 @@ def test_coerce_activity_rows_rejects_invalid_values():
event = _make_event() event = _make_event()
with pytest.raises( with pytest.raises(
TypeError, TypeError,
match=( match="Expected \\(ActivityEvent, event_board_id, task_board_id\\) rows",
"Expected \\(ActivityEvent, event_board_id, task_board_id\\) rows"
),
): ):
_coerce_activity_rows([(event, "bad", None)]) _coerce_activity_rows([(event, "bad", None)])

View File

@@ -6,6 +6,9 @@ from uuid import uuid4
import pytest import pytest
from app.api import metrics as metrics_api from app.api import metrics as metrics_api
from app.models.approvals import Approval
from app.models.boards import Board
from app.models.tasks import Task
class _ExecResult: class _ExecResult:
@@ -97,16 +100,34 @@ async def test_pending_approvals_snapshot_returns_empty_for_empty_scope() -> Non
async def test_pending_approvals_snapshot_maps_rows() -> None: async def test_pending_approvals_snapshot_maps_rows() -> None:
approval_id = uuid4() approval_id = uuid4()
board_id = uuid4() board_id = uuid4()
organization_id = uuid4()
task_id = uuid4()
created_at = datetime(2026, 3, 4, 12, 0, 0) created_at = datetime(2026, 3, 4, 12, 0, 0)
approval = Approval(
id=approval_id,
board_id=board_id,
task_id=task_id,
action_type="approve_task",
confidence=87.0,
created_at=created_at,
status="pending",
)
board = Board(
id=board_id,
organization_id=organization_id,
name="Operations Board",
slug="operations-board",
)
task = Task(
id=task_id,
board_id=board_id,
title="Validate rollout checklist",
)
rows: list[tuple[object, ...]] = [ rows: list[tuple[object, ...]] = [
( (
approval_id, approval,
board_id, board,
"Operations Board", task,
"approve_task",
87.0,
created_at,
"Validate rollout checklist",
) )
] ]
session = _SequentialSession( session = _SequentialSession(