mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-06 07:50:32 +00:00
add simple tests for RedisStorage2
This commit is contained in:
parent
cffec23371
commit
5a9a4c888e
3 changed files with 71 additions and 1 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -60,3 +60,6 @@ docs/html
|
||||||
|
|
||||||
# i18n/l10n
|
# i18n/l10n
|
||||||
*.mo
|
*.mo
|
||||||
|
|
||||||
|
# pynev
|
||||||
|
.python-version
|
||||||
|
|
|
||||||
|
|
@ -1 +1,35 @@
|
||||||
# pytest_plugins = "pytest_asyncio.plugin"
|
import pytest
|
||||||
|
from _pytest.config import UsageError
|
||||||
|
import aioredis.util
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_addoption(parser):
|
||||||
|
parser.addoption("--redis", default=None,
|
||||||
|
help="run tests which require redis connection")
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_configure(config):
|
||||||
|
config.addinivalue_line("markers", "redis: marked tests require redis connection to run")
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_collection_modifyitems(config, items):
|
||||||
|
redis_uri = config.getoption("--redis")
|
||||||
|
if redis_uri is None:
|
||||||
|
skip_redis = pytest.mark.skip(reason="need --redis option with redis URI to run")
|
||||||
|
for item in items:
|
||||||
|
if "redis" in item.keywords:
|
||||||
|
item.add_marker(skip_redis)
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
address, options = aioredis.util.parse_url(redis_uri)
|
||||||
|
assert isinstance(address, tuple), "Only redis and rediss schemas are supported, eg redis://foo."
|
||||||
|
except AssertionError as e:
|
||||||
|
raise UsageError(f"Invalid redis URI {redis_uri!r}: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def redis_options(request):
|
||||||
|
redis_uri = request.config.getoption("--redis")
|
||||||
|
(host, port), options = aioredis.util.parse_url(redis_uri)
|
||||||
|
options.update({'host': host, 'port': port})
|
||||||
|
return options
|
||||||
|
|
|
||||||
33
tests/contrib/fsm_storage/test_redis.py
Normal file
33
tests/contrib/fsm_storage/test_redis.py
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from aiogram.contrib.fsm_storage.redis import RedisStorage2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
async def store(redis_options):
|
||||||
|
s = RedisStorage2(**redis_options)
|
||||||
|
try:
|
||||||
|
yield s
|
||||||
|
finally:
|
||||||
|
conn = await s.redis()
|
||||||
|
await conn.flushdb()
|
||||||
|
await s.close()
|
||||||
|
await s.wait_closed()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.redis
|
||||||
|
class TestRedisStorage2:
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_set_get(self, store):
|
||||||
|
assert await store.get_data(chat='1234') == {}
|
||||||
|
await store.set_data(chat='1234', data={'foo': 'bar'})
|
||||||
|
assert await store.get_data(chat='1234') == {'foo': 'bar'}
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_close_and_open_connection(self, store):
|
||||||
|
await store.set_data(chat='1234', data={'foo': 'bar'})
|
||||||
|
assert await store.get_data(chat='1234') == {'foo': 'bar'}
|
||||||
|
pool_id = id(store._redis)
|
||||||
|
await store.close()
|
||||||
|
assert await store.get_data(chat='1234') == {'foo': 'bar'} # new pool was opened at this point
|
||||||
|
assert id(store._redis) != pool_id
|
||||||
Loading…
Add table
Add a link
Reference in a new issue