import pytest from httpx import AsyncClient 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