Skip to content

Commit 35558d3

Browse files
committed
v0.2.0
1 parent cb2f02c commit 35558d3

File tree

9 files changed

+351
-299
lines changed

9 files changed

+351
-299
lines changed

fastapi_user_auth/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "0.1.3"
1+
__version__ = "0.2.0"
22
__url__ = "https://github.com/amisadmin/fastapi_user_auth"
33

44
import gettext

tests/conftest.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from sqlalchemy_database import Database, AsyncDatabase
2+
3+
# sqlite
4+
sync_db = Database.create('sqlite:///amisadmin.db?check_same_thread=False')
5+
async_db = AsyncDatabase.create('sqlite+aiosqlite:///amisadmin.db?check_same_thread=False')
6+
7+
# mysql
8+
# sync_db = Database.create('mysql+pymysql://root:[email protected]:3306/amisadmin?charset=utf8mb4')
9+
# async_db = AsyncDatabase.create('mysql+aiomysql://root:[email protected]:3306/amisadmin?charset=utf8mb4')
10+
11+
# postgresql
12+
# sync_db = Database.create('postgresql://postgres:[email protected]:5432/amisadmin')
13+
# async_db = AsyncDatabase.create('postgresql+asyncpg://postgres:[email protected]:5432/amisadmin')
14+
15+
# oracle
16+
# sync_db = Database.create('oracle+cx_oracle://scott:tiger@tnsname')
17+
18+
# SQL Server
19+
# sync_db = Database.create('mssql+pyodbc://scott:tiger@mydsn')

tests/test_auth/conftest.py

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,35 @@
1+
import asyncio
2+
from typing import AsyncGenerator
3+
from typing import Union
4+
15
import pytest
6+
import pytest_asyncio
7+
from fastapi import FastAPI
8+
from sqlalchemy.orm import Session
9+
from sqlalchemy_database import Database, AsyncDatabase
10+
from sqlmodel import SQLModel
211
from starlette.testclient import TestClient
312

13+
from fastapi_user_auth.auth.auth import Auth, AuthRouter
14+
from fastapi_user_auth.auth.models import Role, Permission, Group
415
from fastapi_user_auth.auth.models import User
5-
from tests.test_auth.main import app
16+
from tests.conftest import async_db, sync_db
17+
18+
19+
@pytest.fixture(params=[async_db, sync_db])
20+
async def db(request) -> Union[Database, AsyncDatabase]:
21+
database = request.param
22+
await database.async_run_sync(SQLModel.metadata.create_all, is_session=False)
23+
yield database
24+
await database.async_run_sync(SQLModel.metadata.drop_all, is_session=False)
25+
26+
27+
app = FastAPI()
28+
# 创建auth实例
29+
auth = Auth(db=async_db)
30+
# 注册auth基础路由
31+
auth_router = AuthRouter(auth=auth)
32+
app.include_router(auth_router.router)
633

734

835
class UserClient:
@@ -26,7 +53,7 @@ def get_login_client(username: str = None, password: str = None) -> UserClient:
2653
return UserClient(client=client, user=user)
2754

2855

29-
@pytest.fixture(scope='session')
56+
@pytest.fixture
3057
def logins(request) -> UserClient:
3158
user_data = {
3259
'admin': {"username": "admin", "password": "admin"},
@@ -38,7 +65,51 @@ def logins(request) -> UserClient:
3865
return get_login_client(**user)
3966

4067

41-
@pytest.fixture(scope='session', autouse=True)
42-
def startup():
43-
import asyncio
44-
asyncio.run(app.router.startup())
68+
@pytest.fixture(scope="session")
69+
async def prepare_database() -> AsyncGenerator[None, None]:
70+
await auth.db.async_run_sync(SQLModel.metadata.create_all, is_session=False)
71+
yield
72+
await auth.db.async_run_sync(SQLModel.metadata.drop_all, is_session=False)
73+
74+
75+
@pytest.fixture(scope="session")
76+
def event_loop():
77+
loop = asyncio.get_event_loop_policy().new_event_loop()
78+
yield loop
79+
loop.close()
80+
81+
82+
@pytest_asyncio.fixture(scope="session", autouse=True)
83+
async def fake_users(prepare_database):
84+
await auth.db.async_run_sync(create_fake_users)
85+
86+
87+
# noinspection PyTypeChecker
88+
def create_fake_users(session: Session):
89+
# init permission
90+
admin_perm = Permission(key='admin', name='admin permission')
91+
vip_perm = Permission(key='vip', name='vip permission')
92+
test_perm = Permission(key='test', name='test permission')
93+
session.add_all([admin_perm, vip_perm, test_perm])
94+
session.flush([admin_perm, vip_perm, test_perm])
95+
# init role
96+
admin_role = Role(key='admin', name='admin role', permissions=[admin_perm])
97+
vip_role = Role(key='vip', name='vip role', permissions=[vip_perm])
98+
test_role = Role(key='test', name='test role', permissions=[test_perm])
99+
session.add_all([admin_role, vip_role, test_role])
100+
session.flush([admin_role, vip_role, test_role])
101+
# init group
102+
admin_group = Group(key='admin', name='admin group', roles=[admin_role])
103+
vip_group = Group(key='vip', name='vip group', roles=[vip_role])
104+
test_group = Group(key='test', name='test group', roles=[test_role])
105+
session.add_all([admin_group, vip_group, test_group])
106+
session.flush([admin_group, vip_group, test_group])
107+
# init user
108+
admin_user = User(username='admin', password=auth.pwd_context.hash('admin'), email='[email protected]',
109+
roles=[admin_role], groups=[admin_group])
110+
vip_user = User(username='vip', password=auth.pwd_context.hash('vip'), email='[email protected]', roles=[vip_role],
111+
groups=[vip_group])
112+
test_user = User(username='test', password=auth.pwd_context.hash('test'), email='[email protected]', roles=[test_role],
113+
groups=[test_group])
114+
session.add_all([admin_user, vip_user, test_user])
115+
session.flush([admin_user, vip_user, test_user])

tests/test_auth/db.py

Lines changed: 0 additions & 7 deletions
This file was deleted.

tests/test_auth/main.py

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)