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

1from fastapi.testclient import TestClient 

2from sqlmodel import Session 

3 

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 

8 

9 

10def user_authentication_headers( 

11 *, client: TestClient, email: str, password: str 

12) -> dict[str, str]: 

13 data = {"username": email, "password": password} 

14 

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 

20 

21 

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 

28 

29 

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. 

35 

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) 

48 

49 return user_authentication_headers(client=client, email=email, password=password)