from __future__ import annotations from types import SimpleNamespace import pytest from pyrogram.enums import ChatMemberStatus def _member(status, **privileges): return SimpleNamespace( status=status, privileges=SimpleNamespace(**privileges) if privileges else None, ) async def test_actor_and_bot_permissions_are_checked_at_execution(app_modules): service = app_modules.load("wbb.services.chat_management") app_modules.app.members[(-100, 999)] = _member( ChatMemberStatus.ADMINISTRATOR, can_restrict_members=True ) app_modules.app.members[(-100, 10)] = _member( ChatMemberStatus.ADMINISTRATOR, can_restrict_members=True ) await service.ensure_permission(-100, "can_restrict_members", actor_id=10) app_modules.app.members[(-100, 10)] = _member(ChatMemberStatus.MEMBER) with pytest.raises(service.ChatManagementError) as error: await service.ensure_permission(-100, "can_restrict_members", actor_id=10) assert error.value.code == "actor_permission_missing" app_modules.app.members[(-100, 999)] = _member(ChatMemberStatus.ADMINISTRATOR) with pytest.raises(service.ChatManagementError) as error: await service.ensure_permission(-100, "can_restrict_members", actor_id=None) assert error.value.code == "bot_permission_missing"