Files
back-end/tests/test_users.py
2023-04-09 13:39:52 -06:00

150 lines
3.9 KiB
Python

import sys
import pytest
from fastapi.testclient import TestClient
sys.path.append("..")
from src.main import app, get_db
from tests.config.database import clear_db, override_get_db
app.dependency_overrides[get_db] = override_get_db
client = TestClient(app)
username = "user1"
password = "password"
avatar = "lion"
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()
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.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