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")