mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 18:19:34 +00:00
Forum topic in FSM (#1161)
* Base implementation * Added tests, fixed arguments priority * Use `Optional[X]` instead of `X | None` * Added changelog * Added tests
This commit is contained in:
parent
1538bc2e2d
commit
942ba0d520
10 changed files with 164 additions and 60 deletions
|
|
@ -11,6 +11,7 @@ PREFIX = "test"
|
|||
BOT_ID = 42
|
||||
CHAT_ID = -1
|
||||
USER_ID = 2
|
||||
THREAD_ID = 3
|
||||
FIELD = "data"
|
||||
|
||||
|
||||
|
|
@ -46,6 +47,19 @@ class TestRedisDefaultKeyBuilder:
|
|||
with pytest.raises(ValueError):
|
||||
key_builder.build(key, FIELD)
|
||||
|
||||
def test_thread_id(self):
|
||||
key_builder = DefaultKeyBuilder(
|
||||
prefix=PREFIX,
|
||||
)
|
||||
key = StorageKey(
|
||||
chat_id=CHAT_ID,
|
||||
user_id=USER_ID,
|
||||
bot_id=BOT_ID,
|
||||
thread_id=THREAD_ID,
|
||||
destiny=DEFAULT_DESTINY,
|
||||
)
|
||||
assert key_builder.build(key, FIELD) == f"{PREFIX}:{CHAT_ID}:{THREAD_ID}:{USER_ID}:{FIELD}"
|
||||
|
||||
def test_create_isolation(self):
|
||||
fake_redis = object()
|
||||
storage = RedisStorage(redis=fake_redis)
|
||||
|
|
|
|||
|
|
@ -2,19 +2,41 @@ import pytest
|
|||
|
||||
from aiogram.fsm.strategy import FSMStrategy, apply_strategy
|
||||
|
||||
CHAT_ID = -42
|
||||
USER_ID = 42
|
||||
THREAD_ID = 1
|
||||
|
||||
PRIVATE = (USER_ID, USER_ID, None)
|
||||
CHAT = (CHAT_ID, USER_ID, None)
|
||||
THREAD = (CHAT_ID, USER_ID, THREAD_ID)
|
||||
|
||||
|
||||
class TestStrategy:
|
||||
@pytest.mark.parametrize(
|
||||
"strategy,case,expected",
|
||||
[
|
||||
[FSMStrategy.USER_IN_CHAT, (-42, 42), (-42, 42)],
|
||||
[FSMStrategy.CHAT, (-42, 42), (-42, -42)],
|
||||
[FSMStrategy.GLOBAL_USER, (-42, 42), (42, 42)],
|
||||
[FSMStrategy.USER_IN_CHAT, (42, 42), (42, 42)],
|
||||
[FSMStrategy.CHAT, (42, 42), (42, 42)],
|
||||
[FSMStrategy.GLOBAL_USER, (42, 42), (42, 42)],
|
||||
[FSMStrategy.USER_IN_CHAT, CHAT, CHAT],
|
||||
[FSMStrategy.USER_IN_CHAT, PRIVATE, PRIVATE],
|
||||
[FSMStrategy.USER_IN_CHAT, THREAD, CHAT],
|
||||
[FSMStrategy.CHAT, CHAT, (CHAT_ID, CHAT_ID, None)],
|
||||
[FSMStrategy.CHAT, PRIVATE, (USER_ID, USER_ID, None)],
|
||||
[FSMStrategy.CHAT, THREAD, (CHAT_ID, CHAT_ID, None)],
|
||||
[FSMStrategy.GLOBAL_USER, CHAT, PRIVATE],
|
||||
[FSMStrategy.GLOBAL_USER, PRIVATE, PRIVATE],
|
||||
[FSMStrategy.GLOBAL_USER, THREAD, PRIVATE],
|
||||
[FSMStrategy.USER_IN_THREAD, CHAT, CHAT],
|
||||
[FSMStrategy.USER_IN_THREAD, PRIVATE, PRIVATE],
|
||||
[FSMStrategy.USER_IN_THREAD, THREAD, THREAD],
|
||||
],
|
||||
)
|
||||
def test_strategy(self, strategy, case, expected):
|
||||
chat_id, user_id = case
|
||||
assert apply_strategy(chat_id=chat_id, user_id=user_id, strategy=strategy) == expected
|
||||
chat_id, user_id, thread_id = case
|
||||
assert (
|
||||
apply_strategy(
|
||||
chat_id=chat_id,
|
||||
user_id=user_id,
|
||||
thread_id=thread_id,
|
||||
strategy=strategy,
|
||||
)
|
||||
== expected
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue