159 lines
5.8 KiB
Python
159 lines
5.8 KiB
Python
import pytest
|
|
from httpx import AsyncClient
|
|
|
|
from app.services.user_service import UserService
|
|
from app.utils.auth import verify_password
|
|
|
|
|
|
async def test_get_users(ac: AsyncClient):
|
|
response = await ac.get("/users")
|
|
assert response.status_code == 200
|
|
assert isinstance(response.json(), list)
|
|
assert len(response.json()) == 3
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"email,username,password,date_of_birth,status_code",
|
|
[
|
|
("sosi@lox.com", "sobakasutulaya", "12311231", "1990-01-01", 200),
|
|
("sosi@lox.com", "sobakasutulaya", "12311231", "1990-01-01", 409),
|
|
("lox@sosi.com", "sobakasutulaya", "12311231", "1990-01-01", 409),
|
|
("lox@sosi.com", "sobakastroinaya", "3228", "1990-01-01", 422),
|
|
("lox@sosi.com", "sobakastroinaya", "asdwdawdasd", "2030-01-01", 422),
|
|
("lox@sosi.com", "sobakastroinaya", "asdwdawdasd", "2000-01-01", 200),
|
|
],
|
|
)
|
|
async def test_register_user(email, username, password, date_of_birth, status_code, ac: AsyncClient):
|
|
response = await ac.post(
|
|
"/users/register", json={"email": email, "username": username, "password": password, "date_of_birth": date_of_birth}
|
|
)
|
|
|
|
assert response.status_code == status_code
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"email_or_username,password,status_code",
|
|
[
|
|
("sosi@lox.com", "12311231", 200),
|
|
("sobakasutulaya", "12311231", 200),
|
|
("sobakastroinaya", "12311231", 401),
|
|
("sosi@lox.com", "123123", 401),
|
|
("urec@urec.com", "12311231", 200),
|
|
("sobakasutulaya", 12311231, 422),
|
|
(12311231, "sobakasutulaya", 422),
|
|
],
|
|
)
|
|
async def test_login_user(email_or_username: str, password: str, status_code: int, ac: AsyncClient):
|
|
response = await ac.post("/users/login", json={"email_or_username": email_or_username, "password": password})
|
|
assert response.status_code == status_code
|
|
if status_code == 200:
|
|
assert "access_token" in response.json()
|
|
assert "black_phoenix_access_token" in response.cookies
|
|
|
|
|
|
async def test_logout_user(ac: AsyncClient):
|
|
response = await ac.post("/users/logout")
|
|
assert response.status_code == 200
|
|
assert "black_phoenix_access_token" not in response.cookies
|
|
|
|
|
|
async def test_get_user(ac: AsyncClient):
|
|
await ac.post("/users/login", json={"email_or_username": "urec@urec.com", "password": "12311231"})
|
|
response = await ac.get("/users/me")
|
|
assert response.status_code == 200
|
|
assert response.json()["email"] == "urec@urec.com"
|
|
assert response.json()["black_phoenix"] == False # noqa: E712
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"username,password,statuscode",
|
|
[
|
|
("urec", "12311231", 409),
|
|
("neurec", "12311231", 200),
|
|
("urec", "adw", 409),
|
|
("urec", "12311231", 200),
|
|
],
|
|
)
|
|
async def test_rename_user(username: str, password: str, statuscode: int, ac: AsyncClient):
|
|
await ac.post("/users/login", json={"email_or_username": "urec@urec.com", "password": "12311231"})
|
|
response = await ac.patch("/users/rename", json={"username": username, "password": password})
|
|
assert response.status_code == statuscode
|
|
if response.status_code == 200:
|
|
assert response.json()["username"] == username
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"avatar_url,password,statuscode",
|
|
[
|
|
("https://images.black-phoenix.ru/static/images/avatars/v6BtxTxfCFi2dBAl_avatar.png", "12311231", 200),
|
|
(
|
|
"https://images.black-phoenix.ru/static/images/%D1%82%D1%8B%20%D1%83%D0%B6%D0%B5%20%D0%BF%D0%B5%D1%88%D0%BA%D0%B0%20BP.png", # noqa: E501
|
|
"adw",
|
|
409,
|
|
),
|
|
(
|
|
"https://images.black-phoenix.ru/static/images/%D1%82%D1%8B%20%D1%83%D0%B6%D0%B5%20%D0%BF%D0%B5%D1%88%D0%BA%D0%B0%20BP.png", # noqa: E501
|
|
"12311231",
|
|
200,
|
|
),
|
|
],
|
|
)
|
|
async def test_change_avatar(avatar_url: str, password: str, statuscode: int, ac: AsyncClient):
|
|
await ac.post("/users/login", json={"email_or_username": "urec@urec.com", "password": "12311231"})
|
|
response = await ac.patch("/users/change_avatar", json={"new_avatar_image": avatar_url, "password": password})
|
|
assert response.status_code == statuscode
|
|
if response.status_code == 200:
|
|
assert response.json()["new_avatar_image"] == avatar_url
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"login_password,current_password,new_password1,new_password2,statuscode",
|
|
[
|
|
("12311231", "12311231", "12311231", "12311231", 200),
|
|
("12311231", "12311231", "1231121", "12311231", 422),
|
|
("12311231", "12311231", "1231121", "1231231", 422),
|
|
("12311231", "12311231", "1231121", "1231121", 422),
|
|
("12311231", "12311231", "12311231", "1231121", 422),
|
|
("12311231", "1231131", "12311231", "12311231", 422),
|
|
("12311231", "12311231", "12311241", "12311241", 200),
|
|
("12311241", "12311231", "12311241", "12311241", 409),
|
|
("12311241", "12311241", "12311231", "12311231", 200),
|
|
],
|
|
)
|
|
async def test_change_password(
|
|
login_password: str, current_password: str, new_password1: str, new_password2: str, statuscode: int, ac: AsyncClient
|
|
):
|
|
await ac.post("/users/login", json={"email_or_username": "urec@urec.com", "password": login_password})
|
|
response = await ac.patch(
|
|
"/users/change_password",
|
|
json={"current_password": current_password, "new_password": new_password1, "new_password2": new_password2},
|
|
)
|
|
|
|
assert response.status_code == statuscode
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"user_id,password1,password2,statuscode,username",
|
|
[
|
|
(1, "12311234", "12311231", 409, "12311241"),
|
|
(1, "12311231", "12311231", 200, "string"),
|
|
(1, "12341234", "12341234", 200, "string"),
|
|
(3, "12341234", "12341234", 200, "urec"),
|
|
(3, "12341234", "1234123", 422, "urec"),
|
|
(3, "1234123", "12341234", 422, "urec"),
|
|
(3, "1234123", "1234123", 422, "urec"),
|
|
],
|
|
)
|
|
async def test_password_recovery(
|
|
user_id: int, password1: str, password2: str, statuscode: int, username: str, ac: AsyncClient
|
|
):
|
|
response = await ac.post(
|
|
"/users/password_recovery", json={"user_id": user_id, "password1": password1, "password2": password2}
|
|
)
|
|
|
|
assert response.status_code == statuscode
|
|
if response.status_code == 200:
|
|
assert response.json()["username"] == username
|
|
user_data = await UserService.find_one_or_none(user_id=user_id)
|
|
hashed_password = user_data.hashed_password
|
|
assert verify_password(password1, hashed_password)
|