feat: ensure board group deletion also removes associated board group memory
This commit is contained in:
@@ -15,6 +15,7 @@ from app.db import crud
|
||||
from app.db.pagination import paginate
|
||||
from app.db.session import get_session
|
||||
from app.models.agents import Agent
|
||||
from app.models.board_group_memory import BoardGroupMemory
|
||||
from app.models.board_groups import BoardGroup
|
||||
from app.models.boards import Board
|
||||
from app.models.gateways import Gateway
|
||||
@@ -279,6 +280,9 @@ async def delete_board_group(
|
||||
await session.execute(
|
||||
update(Board).where(col(Board.board_group_id) == group_id).values(board_group_id=None)
|
||||
)
|
||||
await session.execute(
|
||||
delete(BoardGroupMemory).where(col(BoardGroupMemory.board_group_id) == group_id)
|
||||
)
|
||||
await session.execute(delete(BoardGroup).where(col(BoardGroup.id) == group_id))
|
||||
await session.commit()
|
||||
return OkResponse()
|
||||
|
||||
43
backend/tests/test_board_groups_delete.py
Normal file
43
backend/tests/test_board_groups_delete.py
Normal file
@@ -0,0 +1,43 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from types import SimpleNamespace
|
||||
from typing import Any
|
||||
from uuid import uuid4
|
||||
|
||||
import pytest
|
||||
|
||||
from app.api import board_groups
|
||||
|
||||
|
||||
@dataclass
|
||||
class _FakeSession:
|
||||
executed: list[Any] = field(default_factory=list)
|
||||
committed: int = 0
|
||||
|
||||
async def execute(self, statement: Any) -> None:
|
||||
self.executed.append(statement)
|
||||
|
||||
async def commit(self) -> None:
|
||||
self.committed += 1
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_delete_board_group_cleans_group_memory_first(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
group_id = uuid4()
|
||||
|
||||
async def _fake_require_group_access(*_args: Any, **_kwargs: Any) -> None:
|
||||
return None
|
||||
|
||||
monkeypatch.setattr(board_groups, "_require_group_access", _fake_require_group_access)
|
||||
|
||||
session = _FakeSession()
|
||||
ctx = SimpleNamespace(member=object())
|
||||
|
||||
await board_groups.delete_board_group(group_id=group_id, session=session, ctx=ctx)
|
||||
|
||||
statement_tables = [statement.table.name for statement in session.executed]
|
||||
assert statement_tables == ["boards", "board_group_memory", "board_groups"]
|
||||
assert session.committed == 1
|
||||
Reference in New Issue
Block a user