131 lines
3.6 KiB
Python
131 lines
3.6 KiB
Python
import pytest
|
|
from fastapi.testclient import TestClient
|
|
|
|
from src.main import app, get_db
|
|
from tests.base import avatar_index, client, password, username, register_user
|
|
from tests.config.database import clear_db, override_get_db
|
|
|
|
patched_username = "New name"
|
|
patched_password = "New password"
|
|
patched_avatar = "New avatar"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_current_user():
|
|
"""Test the GET /users endpoint to get info about the current user"""
|
|
clear_db()
|
|
|
|
token = await register_user()
|
|
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
|
|
|
|
response = client.get("/users", headers=headers)
|
|
assert response.status_code == 200
|
|
response = response.json()
|
|
assert response["username"] == username
|
|
assert response["avatar"] == avatar
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_current_user_without_auth():
|
|
"""Getting the current user without a token should fail"""
|
|
clear_db()
|
|
|
|
response = client.get("/users", headers={"Content-Type": "application/json"})
|
|
|
|
assert response.status_code == 403
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_patch_user():
|
|
"""Test the patching of a user's username, password and avatar"""
|
|
clear_db()
|
|
|
|
response = client.post(
|
|
"/register",
|
|
headers={"Content-Type": "application/json"},
|
|
json={"username": username, "password": password, "avatar": avatar},
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
token = response.json()["access_token"]
|
|
|
|
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
|
|
|
|
response = client.patch(
|
|
"/users",
|
|
json={
|
|
"username": patched_username,
|
|
"password": patched_password,
|
|
"avatar": patched_avatar,
|
|
},
|
|
headers=headers,
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
response = client.post(
|
|
"/login",
|
|
headers={"Content-Type": "application/json"},
|
|
json={"username": patched_username, "password": patched_password},
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
token = response.json()["access_token"]
|
|
|
|
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
|
|
|
|
response = client.get("/users", headers=headers)
|
|
assert response.status_code == 200
|
|
|
|
# Correctness of password and username is already asserted by the login
|
|
assert response.json()["avatar"] == patched_avatar
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_patch_user_with_empty_fields():
|
|
"""Patching a user with empty fields should fail"""
|
|
clear_db()
|
|
|
|
response = client.post(
|
|
"/register",
|
|
headers={"Content-Type": "application/json"},
|
|
json={"username": username, "password": password, "avatar": avatar},
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
token = response.json()["access_token"]
|
|
|
|
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
|
|
|
|
response = client.patch(
|
|
"/users",
|
|
json={
|
|
"username": patched_username,
|
|
"password": patched_password,
|
|
"avatar": "",
|
|
},
|
|
headers=headers,
|
|
)
|
|
assert response.status_code == 400
|
|
|
|
response = client.patch(
|
|
"/users",
|
|
json={
|
|
"username": patched_username,
|
|
"password": "",
|
|
"avatar": patched_avatar,
|
|
},
|
|
headers=headers,
|
|
)
|
|
assert response.status_code == 400
|
|
|
|
response = client.patch(
|
|
"/users",
|
|
json={
|
|
"username": "",
|
|
"password": patched_password,
|
|
"avatar": patched_avatar,
|
|
},
|
|
headers=headers,
|
|
)
|
|
assert response.status_code == 400
|