import pytest

from aiogram import Dispatcher, Bot

pytestmark = pytest.mark.asyncio


@pytest.yield_fixture()
async def bot(event_loop):
    """ Bot fixture """
    _bot = Bot(token='123456789:AABBCCDDEEFFaabbccddeeff-1234567890',
               loop=event_loop)
    yield _bot
    await _bot.close()


class TestDispatcherInit:
    async def test_successful_init(self, bot):
        """
        Success __init__ case

        :param bot: bot instance
        :type bot: Bot
        """
        dp = Dispatcher(bot=bot)
        assert isinstance(dp, Dispatcher)

    @pytest.mark.parametrize("bot_instance", [None, Bot, 123, 'abc'])
    async def test_wrong_bot_instance(self, bot_instance):
        """
        User provides wrong data to 'bot' argument.
        :return: TypeError with reason
        """
        with pytest.raises(TypeError):
            _ = Dispatcher(bot=bot_instance)
