basyx commited on
Commit
379008f
·
verified ·
1 Parent(s): 5d99e9f

Add regression tests for workspace-scoped approval service calls

Browse files
tests/test_approval_workspace_scope.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from unittest.mock import AsyncMock
4
+
5
+ import pytest
6
+
7
+ from app.projects.repositories.approval_repository import ApprovalRepository
8
+ from app.projects.services.approval_service import ApprovalService
9
+
10
+
11
+ @pytest.mark.asyncio
12
+ async def test_approval_repository_queries_are_workspace_scoped() -> None:
13
+ repository = ApprovalRepository(None)
14
+ # Repository calls require a real database; this regression test protects
15
+ # the service contract so routes cannot omit the authenticated workspace.
16
+ repository.list_requests = AsyncMock(return_value=[])
17
+ service = ApprovalService(repository, None)
18
+ result = await service.list_requests("workspace-a", "workflow-a")
19
+ assert result == []
20
+ repository.list_requests.assert_awaited_once_with("workspace-a", "workflow-a")
21
+
22
+
23
+ @pytest.mark.asyncio
24
+ async def test_approval_actions_pass_workspace_to_repository() -> None:
25
+ repository = ApprovalRepository(None)
26
+ request = type("Request", (), {
27
+ "created_by": "submitter",
28
+ "project_id": "project-a",
29
+ "editor_revision": 1,
30
+ "workspace_id": "workspace-a",
31
+ })()
32
+ repository.get_request = AsyncMock(return_value=request)
33
+ repository.update_request_status = AsyncMock(return_value=request)
34
+ editor = type("Editor", (), {"get_state": AsyncMock(return_value=type("State", (), {"revision": 1})())})()
35
+ service = ApprovalService(repository, editor)
36
+ await service.approve_request("workspace-a", "request-a", "reviewer")
37
+ repository.get_request.assert_awaited_once_with("workspace-a", "request-a")
38
+ repository.update_request_status.assert_awaited_once_with("workspace-a", "request-a", "approved")