test: restructure tests (#2444)
unit, api, wallets * only run test-api for migration
This commit is contained in:
parent
67fdb77339
commit
e607ab7a3e
21 changed files with 605 additions and 563 deletions
0
tests/unit/__init__.py
Normal file
0
tests/unit/__init__.py
Normal file
62
tests/unit/test_cache.py
Normal file
62
tests/unit/test_cache.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
from lnbits.utils.cache import Cache
|
||||
from tests.conftest import pytest_asyncio
|
||||
|
||||
key = "foo"
|
||||
value = "bar"
|
||||
|
||||
|
||||
@pytest_asyncio.fixture
|
||||
async def cache():
|
||||
cache = Cache(interval=0.1)
|
||||
|
||||
task = asyncio.create_task(cache.invalidate_forever())
|
||||
yield cache
|
||||
task.cancel()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cache_get_set(cache):
|
||||
cache.set(key, value)
|
||||
assert cache.get(key) == value
|
||||
assert cache.get(key, default="default") == value
|
||||
assert cache.get("i-dont-exist", default="default") == "default"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cache_expiry(cache):
|
||||
# gets expired by `get` call
|
||||
cache.set(key, value, expiry=0.01)
|
||||
await asyncio.sleep(0.02)
|
||||
assert not cache.get(key)
|
||||
|
||||
# gets expired by invalidation task
|
||||
cache.set(key, value, expiry=0.1)
|
||||
await asyncio.sleep(0.2)
|
||||
assert key not in cache._values
|
||||
assert not cache.get(key)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cache_pop(cache):
|
||||
cache.set(key, value)
|
||||
assert cache.pop(key) == value
|
||||
assert not cache.get(key)
|
||||
assert cache.pop(key, default="a") == "a"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cache_coro(cache):
|
||||
called = 0
|
||||
|
||||
async def test():
|
||||
nonlocal called
|
||||
called += 1
|
||||
return called
|
||||
|
||||
await cache.save_result(test, key="test")
|
||||
result = await cache.save_result(test, key="test")
|
||||
assert result == called == 1
|
||||
37
tests/unit/test_db.py
Normal file
37
tests/unit/test_db.py
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
from datetime import date
|
||||
|
||||
import pytest
|
||||
|
||||
from lnbits.core.crud import (
|
||||
create_wallet,
|
||||
delete_wallet,
|
||||
get_wallet,
|
||||
get_wallet_for_key,
|
||||
)
|
||||
from lnbits.db import POSTGRES
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_date_conversion(db):
|
||||
if db.type == POSTGRES:
|
||||
row = await db.fetchone("SELECT now()::date")
|
||||
assert row and isinstance(row[0], date)
|
||||
|
||||
|
||||
# make test to create wallet and delete wallet
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_wallet_and_delete_wallet(app, to_user):
|
||||
# create wallet
|
||||
wallet = await create_wallet(user_id=to_user.id, wallet_name="test_wallet_delete")
|
||||
assert wallet
|
||||
|
||||
# delete wallet
|
||||
await delete_wallet(user_id=to_user.id, wallet_id=wallet.id)
|
||||
|
||||
# check if wallet is deleted
|
||||
del_wallet = await get_wallet(wallet.id)
|
||||
assert del_wallet is not None
|
||||
assert del_wallet.deleted is True
|
||||
|
||||
del_wallet = await get_wallet_for_key(wallet.inkey)
|
||||
assert del_wallet is None
|
||||
74
tests/unit/test_db_fetch_page.py
Normal file
74
tests/unit/test_db_fetch_page.py
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
import pytest
|
||||
import pytest_asyncio
|
||||
|
||||
from tests.helpers import DbTestModel
|
||||
|
||||
|
||||
@pytest_asyncio.fixture(scope="session")
|
||||
async def fetch_page(db):
|
||||
await db.execute("DROP TABLE IF EXISTS test_db_fetch_page")
|
||||
await db.execute(
|
||||
"""
|
||||
CREATE TABLE test_db_fetch_page (
|
||||
id TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL,
|
||||
name TEXT NOT NULL
|
||||
)
|
||||
"""
|
||||
)
|
||||
await db.execute(
|
||||
"""
|
||||
INSERT INTO test_db_fetch_page (id, name, value) VALUES
|
||||
('1', 'Alice', 'foo'),
|
||||
('2', 'Bob', 'bar'),
|
||||
('3', 'Carol', 'bar'),
|
||||
('4', 'Dave', 'bar'),
|
||||
('5', 'Dave', 'foo')
|
||||
"""
|
||||
)
|
||||
yield
|
||||
await db.execute("DROP TABLE test_db_fetch_page")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_db_fetch_page_simple(fetch_page, db):
|
||||
row = await db.fetch_page(
|
||||
query="select * from test_db_fetch_page",
|
||||
model=DbTestModel,
|
||||
)
|
||||
|
||||
assert row
|
||||
assert row.total == 5
|
||||
assert len(row.data) == 5
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_db_fetch_page_group_by(fetch_page, db):
|
||||
row = await db.fetch_page(
|
||||
query="select max(id) as id, name from test_db_fetch_page",
|
||||
model=DbTestModel,
|
||||
group_by=["name"],
|
||||
)
|
||||
assert row
|
||||
assert row.total == 4
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_db_fetch_page_group_by_multiple(fetch_page, db):
|
||||
row = await db.fetch_page(
|
||||
query="select max(id) as id, name, value from test_db_fetch_page",
|
||||
model=DbTestModel,
|
||||
group_by=["value", "name"],
|
||||
)
|
||||
assert row
|
||||
assert row.total == 5
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_db_fetch_page_group_by_evil(fetch_page, db):
|
||||
with pytest.raises(ValueError, match="Value for GROUP BY is invalid"):
|
||||
await db.fetch_page(
|
||||
query="select * from test_db_fetch_page",
|
||||
model=DbTestModel,
|
||||
group_by=["name;"],
|
||||
)
|
||||
21
tests/unit/test_helpers_query.py
Normal file
21
tests/unit/test_helpers_query.py
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import pytest
|
||||
|
||||
from lnbits.helpers import (
|
||||
insert_query,
|
||||
update_query,
|
||||
)
|
||||
from tests.helpers import DbTestModel
|
||||
|
||||
test = DbTestModel(id=1, name="test", value="yes")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_helpers_insert_query():
|
||||
q = insert_query("test_helpers_query", test)
|
||||
assert q == "INSERT INTO test_helpers_query (id, name, value) VALUES (?, ?, ?)"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_helpers_update_query():
|
||||
q = update_query("test_helpers_query", test)
|
||||
assert q == "UPDATE test_helpers_query SET id = ?, name = ?, value = ? WHERE id = ?"
|
||||
Loading…
Add table
Add a link
Reference in a new issue