"""Tests for State Manager""" import pytest from apicord.config import EmulatorConfig from apicord.state.manager import StateManager from apicord.models.discord import User, Role, Channel, ChannelType, Guild class TestStateManager: @pytest.fixture def config(self): return EmulatorConfig( bot_token="test_token_123", bot_id="444444444444444444", persist_state=False, ) @pytest.fixture async def state_manager(self, config): manager = StateManager(config) await manager.create_default_state(guilds=1, channels_per_guild=2, users=3) return manager @pytest.mark.asyncio async def test_create_default_state(self, state_manager): assert len(state_manager.guilds) == 1 assert len(state_manager.channels) == 2 assert len(state_manager.users) == 4 # 3 test users + bot @pytest.mark.asyncio async def test_bot_user_created(self, state_manager): bot = state_manager.get_bot_user() assert bot is not None assert bot.id == "444444444444444444" assert bot.username == "TestBot" assert bot.bot is True @pytest.mark.asyncio async def test_get_guild(self, state_manager): guild = state_manager.get_guild(list(state_manager.guilds.keys())[0]) assert guild is not None assert isinstance(guild, Guild) @pytest.mark.asyncio async def test_get_channel(self, state_manager): channel = state_manager.get_channel(list(state_manager.channels.keys())[0]) assert channel is not None assert isinstance(channel, Channel) @pytest.mark.asyncio async def test_get_user(self, state_manager): user = state_manager.get_user(list(state_manager.users.keys())[0]) assert user is not None assert isinstance(user, User) @pytest.mark.asyncio async def test_add_message(self, state_manager): from apicord.models.discord import Message from datetime import datetime channel_id = list(state_manager.channels.keys())[0] message = Message( id="999999999999999999", channel_id=channel_id, author=state_manager.get_bot_user(), content="Test message", timestamp=datetime.utcnow().isoformat() + "Z", ) state_manager.add_message(message) retrieved = state_manager.get_message(message.id) assert retrieved is not None assert retrieved.content == "Test message" @pytest.mark.asyncio async def test_state_summary(self, state_manager): summary = state_manager.get_state_summary() assert "guilds" in summary assert "channels" in summary assert "users" in summary assert summary["guilds"] == 1 assert summary["channels"] == 2 assert summary["users"] == 4 # 3 + bot