diff --git a/backend/app/api/board_groups.py b/backend/app/api/board_groups.py index e6988186..c21b005e 100644 --- a/backend/app/api/board_groups.py +++ b/backend/app/api/board_groups.py @@ -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() diff --git a/backend/tests/test_board_groups_delete.py b/backend/tests/test_board_groups_delete.py new file mode 100644 index 00000000..d904716e --- /dev/null +++ b/backend/tests/test_board_groups_delete.py @@ -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