pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.9 KiB
121 lines
3.9 KiB
from fastapi.testclient import TestClient
|
|
from sqlmodel import Session
|
|
|
|
from app import crud
|
|
from app.core.config import settings
|
|
from app.models import UserCreate
|
|
from app.tests.utils.utils import random_email, random_lower_string
|
|
|
|
|
|
def test_get_users_superuser_me(
|
|
client: TestClient, superuser_token_headers: dict[str, str]
|
|
) -> None:
|
|
r = client.get(f"{settings.API_V1_STR}/users/me", headers=superuser_token_headers)
|
|
current_user = r.json()
|
|
assert current_user
|
|
assert current_user["is_active"] is True
|
|
assert current_user["is_superuser"]
|
|
assert current_user["email"] == settings.FIRST_SUPERUSER
|
|
|
|
|
|
def test_get_users_normal_user_me(
|
|
client: TestClient, normal_user_token_headers: dict[str, str]
|
|
) -> None:
|
|
r = client.get(f"{settings.API_V1_STR}/users/me", headers=normal_user_token_headers)
|
|
current_user = r.json()
|
|
assert current_user
|
|
assert current_user["is_active"] is True
|
|
assert current_user["is_superuser"] is False
|
|
assert current_user["email"] == settings.EMAIL_TEST_USER
|
|
|
|
|
|
def test_create_user_new_email(
|
|
client: TestClient, superuser_token_headers: dict, db: Session
|
|
) -> None:
|
|
username = random_email()
|
|
password = random_lower_string()
|
|
data = {"email": username, "password": password}
|
|
r = client.post(
|
|
f"{settings.API_V1_STR}/users/",
|
|
headers=superuser_token_headers,
|
|
json=data,
|
|
)
|
|
assert 200 <= r.status_code < 300
|
|
created_user = r.json()
|
|
user = crud.get_user_by_email(session=db, email=username)
|
|
assert user
|
|
assert user.email == created_user["email"]
|
|
|
|
|
|
def test_get_existing_user(
|
|
client: TestClient, superuser_token_headers: dict, db: Session
|
|
) -> None:
|
|
username = random_email()
|
|
password = random_lower_string()
|
|
user_in = UserCreate(email=username, password=password)
|
|
user = crud.create_user(session=db, user_create=user_in)
|
|
user_id = user.id
|
|
r = client.get(
|
|
f"{settings.API_V1_STR}/users/{user_id}",
|
|
headers=superuser_token_headers,
|
|
)
|
|
assert 200 <= r.status_code < 300
|
|
api_user = r.json()
|
|
existing_user = crud.get_user_by_email(session=db, email=username)
|
|
assert existing_user
|
|
assert existing_user.email == api_user["email"]
|
|
|
|
|
|
def test_create_user_existing_username(
|
|
client: TestClient, superuser_token_headers: dict, db: Session
|
|
) -> None:
|
|
username = random_email()
|
|
# username = email
|
|
password = random_lower_string()
|
|
user_in = UserCreate(email=username, password=password)
|
|
crud.create_user(session=db, user_create=user_in)
|
|
data = {"email": username, "password": password}
|
|
r = client.post(
|
|
f"{settings.API_V1_STR}/users/",
|
|
headers=superuser_token_headers,
|
|
json=data,
|
|
)
|
|
created_user = r.json()
|
|
assert r.status_code == 400
|
|
assert "_id" not in created_user
|
|
|
|
|
|
def test_create_user_by_normal_user(
|
|
client: TestClient, normal_user_token_headers: dict[str, str]
|
|
) -> None:
|
|
username = random_email()
|
|
password = random_lower_string()
|
|
data = {"email": username, "password": password}
|
|
r = client.post(
|
|
f"{settings.API_V1_STR}/users/",
|
|
headers=normal_user_token_headers,
|
|
json=data,
|
|
)
|
|
assert r.status_code == 400
|
|
|
|
|
|
def test_retrieve_users(
|
|
client: TestClient, superuser_token_headers: dict, db: Session
|
|
) -> None:
|
|
username = random_email()
|
|
password = random_lower_string()
|
|
user_in = UserCreate(email=username, password=password)
|
|
crud.create_user(session=db, user_create=user_in)
|
|
|
|
username2 = random_email()
|
|
password2 = random_lower_string()
|
|
user_in2 = UserCreate(email=username2, password=password2)
|
|
crud.create_user(session=db, user_create=user_in2)
|
|
|
|
r = client.get(f"{settings.API_V1_STR}/users/", headers=superuser_token_headers)
|
|
all_users = r.json()
|
|
|
|
assert len(all_users["data"]) > 1
|
|
assert "count" in all_users
|
|
for item in all_users["data"]:
|
|
assert "email" in item
|
|
|