From cd732e312f56b205c5ad9af46dfb2a7be3af846e Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Sun, 8 Feb 2026 23:41:20 +0530 Subject: [PATCH] test: add unit test for board deletion and organization access cleanup --- backend/tests/test_boards_delete.py | 52 +++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 backend/tests/test_boards_delete.py diff --git a/backend/tests/test_boards_delete.py b/backend/tests/test_boards_delete.py new file mode 100644 index 0000000..ffa21f3 --- /dev/null +++ b/backend/tests/test_boards_delete.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import Any +from uuid import uuid4 + +import pytest + +from app.api import boards +from app.models.boards import Board + + +@dataclass +class _FakeSession: + exec_results: list[Any] + executed: list[Any] = field(default_factory=list) + deleted: list[Any] = field(default_factory=list) + committed: int = 0 + + async def exec(self, _statement: Any) -> Any: + if not self.exec_results: + raise AssertionError("No more exec_results left for session.exec") + return self.exec_results.pop(0) + + async def execute(self, statement: Any) -> None: + self.executed.append(statement) + + async def delete(self, value: Any) -> None: + self.deleted.append(value) + + async def commit(self) -> None: + self.committed += 1 + + +@pytest.mark.asyncio +async def test_delete_board_cleans_org_board_access_rows() -> None: + session = _FakeSession(exec_results=[[], []]) + board = Board( + id=uuid4(), + organization_id=uuid4(), + name="Demo Board", + slug="demo-board", + gateway_id=None, + ) + + await boards.delete_board(session=session, board=board) + + deleted_table_names = [statement.table.name for statement in session.executed] + assert "organization_board_access" in deleted_table_names + assert "organization_invite_board_access" in deleted_table_names + assert board in session.deleted + assert session.committed == 1