def test_create_user_new_email( client: TestClient, superuser_token_headers: dict, uow: SqlAlchemyUnitOfWork = get_sqlalchemy_uow() ) -> None: email = random_email() name = random_lower_string() password = random_lower_string() data = {"email": email, "password": password, "name": name} 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 = user_services.get_user_by_email(email, uow) assert user assert user.email == created_user["email"] assert user.id == created_user["id"] assert user.id is not None # Ensure we don't expose passwords assert created_user.get("hashed_password") is None assert created_user.get("password") is None
def test_retrieve_users( client: TestClient, superuser_token_headers: dict, uow: SqlAlchemyUnitOfWork = get_sqlalchemy_uow() ) -> None: email = random_email() username = random_lower_string() password = random_lower_string() user_in = UserCreate(email=email, name=username, password=password) user_services.create_user(user_in, uow) email2 = random_email() username2 = random_lower_string() password2 = random_lower_string() UserCreate(email=email2, name=username2, password=password2) r = client.get(f"{settings.API_V1_STR}/users/", headers=superuser_token_headers) all_users = r.json() assert len(all_users) > 1 for item in all_users: assert "email" in item assert "name" in item assert "password" not in item
def init() -> None: user_in = UserCreate( email=settings.FIRST_SUPERUSER_EMAIL, name=settings.FIRST_SUPERUSER_NAME, password=settings.FIRST_SUPERUSER_PASSWORD, ) try: user_services.create_user(create_obj=user_in, uow=get_sqlalchemy_uow()) except user_services.UserAlreadyExists: pass
def test_create_user_existing_username( client: TestClient, superuser_token_headers: dict, uow: SqlAlchemyUnitOfWork = get_sqlalchemy_uow() ) -> None: email = random_email() username = random_lower_string() password = random_lower_string() user_in = UserCreate(email=email, name=username, password=password) user_services.create_user(user_in, uow) data = {"email": email, "password": password, "name": username} 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_get_existing_user( client: TestClient, superuser_token_headers: dict, uow: SqlAlchemyUnitOfWork = get_sqlalchemy_uow() ) -> None: email = random_email() name = random_lower_string() password = random_lower_string() user_in = UserCreate(email=email, name=name, password=password) user = user_services.create_user(user_in, uow) 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 = user_services.get_user_by_email(email, uow) assert existing_user assert existing_user.email == api_user["email"]
def authentication_token_from_email( *, client: TestClient, email: EmailStr, uow: SqlAlchemyUnitOfWork = get_sqlalchemy_uow() ) -> Dict[str, str]: """ Return a valid token for the user with given email. If the user doesn't exist it is created first. """ password = random_lower_string() name = random_lower_string() with uow: user = user_services.get_user_by_email(email, uow) if user: uow.users.delete_by_email(email) uow.commit() user_in = UserCreate(name=name, email=email, password=password) user = user_services.create_user(user_in, uow) uow.commit() return user_authentication_headers( client=client, username=email, password=password )
def uow(): return get_sqlalchemy_uow()