mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2025-11-03 13:42:16 +08:00
* add tortoise to dependencies * add tortoise as optional dependency in pyproject.toml * add tortoise support (tests needed) * Add tortoise support (also defined orm_mode in pydantic model * tests for tortoise support * format by black * docs for tortoise * delete type annotations * delete underscore * do it in 1 line * add 1 line before yield * fix in docs * fix bug and add annotation for test * Tweak documentation and fix Tortoise error about id update * Improve Tortoise coverage by using get instead of filter * Fix Pipfile.lock
83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
from typing import AsyncGenerator
|
|
|
|
import pytest
|
|
from tortoise import Model
|
|
from tortoise.exceptions import IntegrityError
|
|
from tortoise import Tortoise
|
|
from fastapi_users.db.tortoise import TortoiseUserDatabase, BaseUserModel
|
|
from fastapi_users.models import BaseUserDB
|
|
from fastapi_users.password import get_password_hash
|
|
|
|
|
|
class User(BaseUserModel, Model):
|
|
pass
|
|
|
|
|
|
@pytest.fixture
|
|
async def tortoise_user_db() -> AsyncGenerator[TortoiseUserDatabase, None]:
|
|
DATABASE_URL = "sqlite://./test.db"
|
|
|
|
await Tortoise.init(
|
|
db_url=DATABASE_URL, modules={"models": ["tests.test_db_tortoise"]}
|
|
)
|
|
await Tortoise.generate_schemas()
|
|
|
|
yield TortoiseUserDatabase(User)
|
|
|
|
await User.all().delete()
|
|
await Tortoise.close_connections()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.db
|
|
async def test_queries(tortoise_user_db: TortoiseUserDatabase):
|
|
user = BaseUserDB(
|
|
id="111",
|
|
email="lancelot@camelot.bt",
|
|
hashed_password=get_password_hash("guinevere"),
|
|
)
|
|
|
|
# Create
|
|
user_db = await tortoise_user_db.create(user)
|
|
assert user_db.id is not None
|
|
assert user_db.is_active is True
|
|
assert user_db.is_superuser is False
|
|
assert user_db.email == user.email
|
|
|
|
# Update
|
|
user_db.is_superuser = True
|
|
await tortoise_user_db.update(user_db)
|
|
|
|
# Get by id
|
|
id_user = await tortoise_user_db.get(user.id)
|
|
assert id_user.id == user_db.id
|
|
assert id_user.is_superuser is True
|
|
|
|
# Get by email
|
|
email_user = await tortoise_user_db.get_by_email(user.email)
|
|
assert email_user.id == user_db.id
|
|
|
|
# List
|
|
users = await tortoise_user_db.list()
|
|
assert len(users) == 1
|
|
first_user = users[0]
|
|
assert first_user.id == user_db.id
|
|
|
|
# Exception when inserting existing email
|
|
with pytest.raises(IntegrityError):
|
|
await tortoise_user_db.create(user)
|
|
|
|
# Exception when inserting non-nullable fields
|
|
with pytest.raises(ValueError):
|
|
wrong_user = BaseUserDB(id="222", hashed_password="aaa")
|
|
await tortoise_user_db.create(wrong_user)
|
|
|
|
# Unknown user
|
|
unknown_user = await tortoise_user_db.get_by_email("galahad@camelot.bt")
|
|
assert unknown_user is None
|
|
|
|
# Delete user
|
|
await tortoise_user_db.delete(user)
|
|
deleted_user = await tortoise_user_db.get(user.id)
|
|
assert deleted_user is None
|