fix(ci): resolve backend check failures in dashboard metrics
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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)])
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user