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.pagination import paginate
|
||||||
from app.db.session import get_session
|
from app.db.session import get_session
|
||||||
from app.models.agents import Agent
|
from app.models.agents import Agent
|
||||||
|
from app.models.board_group_memory import BoardGroupMemory
|
||||||
from app.models.board_groups import BoardGroup
|
from app.models.board_groups import BoardGroup
|
||||||
from app.models.boards import Board
|
from app.models.boards import Board
|
||||||
from app.models.gateways import Gateway
|
from app.models.gateways import Gateway
|
||||||
@@ -279,6 +280,9 @@ async def delete_board_group(
|
|||||||
await session.execute(
|
await session.execute(
|
||||||
update(Board).where(col(Board.board_group_id) == group_id).values(board_group_id=None)
|
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.execute(delete(BoardGroup).where(col(BoardGroup.id) == group_id))
|
||||||
await session.commit()
|
await session.commit()
|
||||||
return OkResponse()
|
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