aiogram/tests/test_states_group_navigation.py

83 lines
2.5 KiB
Python

import pytest
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State
class FakeDispatcher:
context = FSMContext(MemoryStorage(), chat=1, user=1)
@classmethod
def get_current(cls, no_error=True):
return cls
@classmethod
def current_state(cls):
return cls.context
@classmethod
def reset(cls):
cls.context = FSMContext(MemoryStorage(), chat=1, user=1)
@pytest.fixture
async def reset_dispatcher():
FakeDispatcher.reset()
context = FakeDispatcher.get_current().current_state()
current_state = await context.get_state()
assert current_state == None
yield FakeDispatcher
class MyGroup(StatesGroup, dispatcher=FakeDispatcher()):
state_1 = State()
state_2 = State()
class TestNavigation:
@pytest.mark.asyncio
async def test_first(self, reset_dispatcher):
state = await MyGroup.first()
assert state == 'MyGroup:state_1'
@pytest.mark.asyncio
async def test_last(self, reset_dispatcher):
state = await MyGroup.last()
assert state == 'MyGroup:state_2'
class TestNext:
@pytest.mark.asyncio
async def test_next_from_none(self, reset_dispatcher):
state = await MyGroup.next()
assert state == 'MyGroup:state_1'
@pytest.mark.asyncio
async def test_next_from_the_first_state(self, reset_dispatcher):
await MyGroup.state_1.set()
state = await MyGroup.next()
assert state == 'MyGroup:state_2'
@pytest.mark.asyncio
async def test_next_from_the_last_state(self, reset_dispatcher):
await MyGroup.last()
state = await MyGroup.next()
assert state == None
class TestPrevious:
@pytest.mark.asyncio
async def test_previous_from_none(self, reset_dispatcher):
state = await MyGroup.previous()
assert state == 'MyGroup:state_1'
@pytest.mark.asyncio
async def test_previous_from_the_first_state(self, reset_dispatcher):
await MyGroup.first()
state = await MyGroup.previous()
assert state == None
@pytest.mark.asyncio
async def test_previous_from_the_last_state(self, reset_dispatcher):
await MyGroup.state_2.set()
state = await MyGroup.previous()
assert state == 'MyGroup:state_1'