mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2026-03-13 07:49:55 +08:00
Put user_db_model as attribute of UserManager
This commit is contained in:
@@ -51,6 +51,7 @@ class BaseUserManager(Generic[models.UC, models.UD]):
|
||||
"""
|
||||
User management logic.
|
||||
|
||||
:attribute user_db_model: Pydantic model of a DB representation of a user.
|
||||
:attribute reset_password_token_secret: Secret to encode reset password token.
|
||||
:attribute reset_password_token_lifetime_seconds: Lifetime of reset password token.
|
||||
:attribute reset_password_token_audience: JWT audience of reset password token.
|
||||
@@ -58,13 +59,10 @@ class BaseUserManager(Generic[models.UC, models.UD]):
|
||||
:attribute verification_token_lifetime_seconds: Lifetime of verification token.
|
||||
:attribute verification_token_audience: JWT audience of verification token.
|
||||
|
||||
:param user_db_model: Pydantic model of a DB representation of a user.
|
||||
:param user_db: Database adapter instance.
|
||||
"""
|
||||
|
||||
user_db_model: Type[models.UD]
|
||||
user_db: BaseUserDatabase[models.UD]
|
||||
|
||||
reset_password_token_secret: SecretType
|
||||
reset_password_token_lifetime_seconds: int = 3600
|
||||
reset_password_token_audience: str = RESET_PASSWORD_TOKEN_AUDIENCE
|
||||
@@ -73,12 +71,9 @@ class BaseUserManager(Generic[models.UC, models.UD]):
|
||||
verification_token_lifetime_seconds: int = 3600
|
||||
verification_token_audience: str = VERIFY_USER_TOKEN_AUDIENCE
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
user_db_model: Type[models.UD],
|
||||
user_db: BaseUserDatabase[models.UD],
|
||||
):
|
||||
self.user_db_model = user_db_model
|
||||
user_db: BaseUserDatabase[models.UD]
|
||||
|
||||
def __init__(self, user_db: BaseUserDatabase[models.UD]):
|
||||
self.user_db = user_db
|
||||
|
||||
async def get(self, id: UUID4) -> models.UD:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import asyncio
|
||||
from typing import Any, AsyncGenerator, Callable, List, Optional, Union
|
||||
from typing import Any, AsyncGenerator, Callable, Generic, List, Optional, Type, Union
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import httpx
|
||||
@@ -54,12 +54,14 @@ class UserDBOAuth(UserOAuth, UserDB):
|
||||
pass
|
||||
|
||||
|
||||
class UserManager(BaseUserManager[UserCreate, UserDB]):
|
||||
class BaseTestUserManager(
|
||||
Generic[models.UC, models.UD], BaseUserManager[models.UC, models.UD]
|
||||
):
|
||||
reset_password_token_secret = "SECRET"
|
||||
verification_token_secret = "SECRET"
|
||||
|
||||
async def validate_password(
|
||||
self, password: str, user: Union[UserCreate, UserDB]
|
||||
self, password: str, user: Union[models.UC, models.UD]
|
||||
) -> None:
|
||||
if len(password) < 3:
|
||||
raise InvalidPasswordException(
|
||||
@@ -67,6 +69,14 @@ class UserManager(BaseUserManager[UserCreate, UserDB]):
|
||||
)
|
||||
|
||||
|
||||
class UserManager(BaseTestUserManager[UserCreate, UserDB]):
|
||||
user_db_model = UserDB
|
||||
|
||||
|
||||
class UserManagerOAuth(BaseTestUserManager[UserCreate, UserDBOAuth]):
|
||||
user_db_model = UserDBOAuth
|
||||
|
||||
|
||||
class UserManagerMock(UserManager):
|
||||
get_by_email: MagicMock
|
||||
request_verify: MagicMock
|
||||
@@ -381,8 +391,8 @@ def mock_user_db_oauth(
|
||||
|
||||
@pytest.fixture
|
||||
def make_user_manager(mocker: MockerFixture):
|
||||
def _make_user_manager(user_db_model, mock_user_db):
|
||||
user_manager = UserManager(user_db_model, mock_user_db)
|
||||
def _make_user_manager(user_manager_class: Type[BaseTestUserManager], mock_user_db):
|
||||
user_manager = user_manager_class(mock_user_db)
|
||||
mocker.spy(user_manager, "get_by_email")
|
||||
mocker.spy(user_manager, "request_verify")
|
||||
mocker.spy(user_manager, "verify")
|
||||
@@ -402,12 +412,12 @@ def make_user_manager(mocker: MockerFixture):
|
||||
|
||||
@pytest.fixture
|
||||
def user_manager(make_user_manager, mock_user_db):
|
||||
return make_user_manager(UserDB, mock_user_db)
|
||||
return make_user_manager(UserManager, mock_user_db)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def user_manager_oauth(make_user_manager, mock_user_db_oauth):
|
||||
return make_user_manager(UserDBOAuth, mock_user_db_oauth)
|
||||
return make_user_manager(UserManagerOAuth, mock_user_db_oauth)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
||||
Reference in New Issue
Block a user