File size: 1,400 Bytes
7cc81cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import pytest
from app.projects.repositories.collaboration_repository import CollaborationRepository
from app.projects.services.collaboration_service import CollaborationService
from app.projects.errors import CollaborationUnauthorizedError

@pytest.mark.asyncio
async def test_collaboration_logic_admin_removal_constraint(db_session):
    # Setup test workspace and admin users
    repo = CollaborationRepository(db_session)
    service = CollaborationService(repo)
    
    workspace_id = "test_workspace"
    admin_user_id = "admin_user"
    target_user_id = "member_user"
    
    # 1. Mock memberships: 2 admins
    # Use actual DB insert here if needed for true integration test
    # ... setup DB state ...

    # 2. Test prevention of last admin removal
    with pytest.raises(CollaborationUnauthorizedError, match="Cannot remove the last administrator."):
        await service.remove_member(workspace_id, admin_user_id, target_user_id)

@pytest.mark.asyncio
async def test_collaboration_logic_self_elevation_prevention(db_session):
    repo = CollaborationRepository(db_session)
    service = CollaborationService(repo)
    
    workspace_id = "test_workspace"
    actor_user_id = "user_1"
    
    with pytest.raises(CollaborationUnauthorizedError, match="Cannot elevate your own privileges."):
        await service.update_member_role(workspace_id, actor_user_id, actor_user_id, "admin")