86 lines
3.8 KiB
Python
86 lines
3.8 KiB
Python
from contextlib import asynccontextmanager
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
import pytest
|
|
|
|
from konabot.common.database import DatabaseManager
|
|
from konabot.common.permsys import PermManager
|
|
from konabot.common.permsys.entity import PermEntity
|
|
from konabot.common.permsys.migrates import execute_migration, get_current_version
|
|
|
|
|
|
@asynccontextmanager
|
|
async def tempdb():
|
|
with TemporaryDirectory() as _tempdir:
|
|
tempdir = Path(_tempdir)
|
|
db = DatabaseManager(tempdir / "perm.sqlite3")
|
|
yield db
|
|
await db.close_all_connections()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_db_version():
|
|
async with tempdb() as db:
|
|
async with db.get_conn() as conn:
|
|
v = await get_current_version(conn)
|
|
assert v == 0
|
|
v = await get_current_version(conn)
|
|
assert v == 0
|
|
await execute_migration(conn, version=1)
|
|
v = await get_current_version(conn)
|
|
assert v == 1
|
|
await execute_migration(conn, version=0)
|
|
v = await get_current_version(conn)
|
|
assert v == 0
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_perm():
|
|
async with tempdb() as db:
|
|
async with db.get_conn() as conn:
|
|
await execute_migration(conn)
|
|
|
|
service = PermManager(db)
|
|
entity_global = PermEntity("sys", "global", "global")
|
|
entity1 = PermEntity("nonexist-platform", "user", "passthem")
|
|
chain1 = [entity1, entity_global]
|
|
entity2 = PermEntity("nonexist-platform", "user", "jack")
|
|
chain2 = [entity2, entity_global]
|
|
|
|
assert not await service.check_has_permission(chain1, "*")
|
|
|
|
await service.update_permission(entity1, "*", True)
|
|
assert await service.check_has_permission(chain1, "*")
|
|
assert await service.check_has_permission(chain1, "module1")
|
|
assert await service.check_has_permission(chain1, "module1.pack1")
|
|
assert not await service.check_has_permission(chain2, "*")
|
|
assert not await service.check_has_permission(chain2, "module1")
|
|
assert not await service.check_has_permission(chain2, "module1.pack1")
|
|
|
|
await service.update_permission(entity2, "module1", True)
|
|
assert not await service.check_has_permission(chain2, "*")
|
|
assert await service.check_has_permission(chain2, "module1")
|
|
assert await service.check_has_permission(chain2, "module1.pack1")
|
|
assert await service.check_has_permission(chain2, "module1.pack2")
|
|
assert not await service.check_has_permission(chain2, "module2")
|
|
assert not await service.check_has_permission(chain2, "module2.pack1")
|
|
assert not await service.check_has_permission(chain2, "module2.pack2")
|
|
|
|
await service.update_permission(entity2, "module1.pack2", False)
|
|
assert not await service.check_has_permission(chain2, "*")
|
|
assert await service.check_has_permission(chain2, "module1")
|
|
assert await service.check_has_permission(chain2, "module1.pack1")
|
|
assert not await service.check_has_permission(chain2, "module1.pack2")
|
|
assert not await service.check_has_permission(chain2, "module2")
|
|
assert not await service.check_has_permission(chain2, "module2.pack1")
|
|
assert not await service.check_has_permission(chain2, "module2.pack2")
|
|
|
|
await service.update_permission(entity_global, "module2", True)
|
|
assert not await service.check_has_permission(chain2, "*")
|
|
assert await service.check_has_permission(chain2, "module1")
|
|
assert await service.check_has_permission(chain2, "module1.pack1")
|
|
assert not await service.check_has_permission(chain2, "module1.pack2")
|
|
assert await service.check_has_permission(chain2, "module2")
|
|
assert await service.check_has_permission(chain2, "module2.pack1")
|
|
assert await service.check_has_permission(chain2, "module2.pack2")
|