Coverage for app/tests/utils/user.py: 97%
30 statements
« prev ^ index » next coverage.py v7.6.1, created at 2026-03-24 11:40 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2026-03-24 11:40 +0000
1from fastapi.testclient import TestClient
2from sqlmodel import Session
4from app import crud
5from app.core.config import settings
6from app.models import User, UserCreate, UserUpdate
7from app.tests.utils.utils import random_email, random_lower_string
10def user_authentication_headers(
11 *, client: TestClient, email: str, password: str
12) -> dict[str, str]:
13 data = {"username": email, "password": password}
15 r = client.post(f"{settings.API_V1_STR}/login/access-token", data=data)
16 response = r.json()
17 auth_token = response["access_token"]
18 headers = {"Authorization": f"Bearer {auth_token}"}
19 return headers
22def create_random_user(db: Session) -> User:
23 email = random_email()
24 password = random_lower_string()
25 user_in = UserCreate(email=email, password=password)
26 user = crud.create_user(session=db, user_create=user_in)
27 return user
30def authentication_token_from_email(
31 *, client: TestClient, email: str, db: Session
32) -> dict[str, str]:
33 """
34 Return a valid token for the user with given email.
36 If the user doesn't exist it is created first.
37 """
38 password = random_lower_string()
39 user = crud.get_user_by_email(session=db, email=email)
40 if not user:
41 user_in_create = UserCreate(email=email, password=password)
42 user = crud.create_user(session=db, user_create=user_in_create)
43 else:
44 user_in_update = UserUpdate(password=password)
45 if not user.id:
46 raise Exception("User id not set")
47 user = crud.update_user(session=db, db_user=user, user_in=user_in_update)
49 return user_authentication_headers(client=client, email=email, password=password)