mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
77 lines
2.3 KiB
Python
77 lines
2.3 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
|
|
|
|
pytestmark = pytest.mark.asyncio
|
|
|
|
|
|
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:
|
|
async def test_first(self, reset_dispatcher):
|
|
state = await MyGroup.first()
|
|
assert state == 'MyGroup:state_1'
|
|
|
|
async def test_last(self, reset_dispatcher):
|
|
state = await MyGroup.last()
|
|
assert state == 'MyGroup:state_2'
|
|
|
|
class TestNext:
|
|
async def test_next_from_none(self, reset_dispatcher):
|
|
state = await MyGroup.next()
|
|
assert state == 'MyGroup:state_1'
|
|
|
|
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'
|
|
|
|
async def test_next_from_the_last_state(self, reset_dispatcher):
|
|
await MyGroup.last()
|
|
state = await MyGroup.next()
|
|
assert state == None
|
|
|
|
class TestPrevious:
|
|
async def test_previous_from_none(self, reset_dispatcher):
|
|
state = await MyGroup.previous()
|
|
assert state == 'MyGroup:state_1'
|
|
|
|
async def test_previous_from_the_first_state(self, reset_dispatcher):
|
|
await MyGroup.first()
|
|
state = await MyGroup.previous()
|
|
assert state == None
|
|
|
|
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'
|