|
|
import pytest |
|
|
from fastapi.testclient import TestClient |
|
|
from sqlalchemy.orm import Session |
|
|
|
|
|
from models.user import User |
|
|
from schemas.user import UserCreate |
|
|
|
|
|
|
|
|
def test_user_registration(client: TestClient, sample_user_data: dict): |
|
|
"""Test user registration endpoint""" |
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 200 |
|
|
data = response.json() |
|
|
assert "token" in data |
|
|
assert data["token"].startswith("fake_token_for_") |
|
|
|
|
|
|
|
|
def test_user_registration_duplicate_email(client: TestClient, sample_user_data: dict): |
|
|
"""Test user registration with duplicate email""" |
|
|
|
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 200 |
|
|
|
|
|
|
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 400 |
|
|
assert "already registered" in response.json()["detail"] |
|
|
|
|
|
|
|
|
def test_user_login_success(client: TestClient, sample_user_data: dict): |
|
|
"""Test successful user login""" |
|
|
|
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 200 |
|
|
|
|
|
|
|
|
login_data = { |
|
|
"email": sample_user_data["email"], |
|
|
"password": sample_user_data["password"] |
|
|
} |
|
|
response = client.post("/users/registration/login", json=login_data) |
|
|
assert response.status_code == 200 |
|
|
data = response.json() |
|
|
assert "token" in data |
|
|
assert data["token"].startswith("fake_token_for_") |
|
|
|
|
|
|
|
|
def test_user_login_invalid_credentials(client: TestClient, sample_user_data: dict): |
|
|
"""Test user login with invalid credentials""" |
|
|
|
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 200 |
|
|
|
|
|
|
|
|
login_data = { |
|
|
"email": sample_user_data["email"], |
|
|
"password": "wrongpassword" |
|
|
} |
|
|
response = client.post("/users/registration/login", json=login_data) |
|
|
assert response.status_code == 401 |
|
|
assert "Incorrect email or password" in response.json()["detail"] |
|
|
|
|
|
|
|
|
def test_user_logout(client: TestClient, sample_user_data: dict): |
|
|
"""Test user logout""" |
|
|
|
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 200 |
|
|
|
|
|
|
|
|
response = client.post("/users/registration/logout", json={}) |
|
|
assert response.status_code == 200 |
|
|
|
|
|
|
|
|
def test_get_user_details(client: TestClient, sample_user_data: dict, db_session: Session): |
|
|
"""Test getting user details by ID""" |
|
|
|
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 200 |
|
|
token_response = response.json() |
|
|
|
|
|
user_id = token_response["token"].replace("fake_token_for_", "") |
|
|
|
|
|
|
|
|
response = client.get(f"/users/{user_id}") |
|
|
assert response.status_code == 200 |
|
|
user_data = response.json() |
|
|
assert user_data["email"] == sample_user_data["email"] |
|
|
assert user_data["first_name"] == sample_user_data["first_name"] |
|
|
assert user_data["last_name"] == sample_user_data["last_name"] |
|
|
assert user_data["role"] == sample_user_data["role"] |
|
|
|
|
|
|
|
|
def test_get_current_user_data(client: TestClient, sample_user_data: dict): |
|
|
"""Test getting current user's data based on token""" |
|
|
|
|
|
response = client.post("/users/registration/signup", json=sample_user_data) |
|
|
assert response.status_code == 200 |
|
|
token_response = response.json() |
|
|
token = token_response["token"] |
|
|
|
|
|
|
|
|
response = client.get("/users/me", headers={"Authorization": f"Bearer {token}"}) |
|
|
assert response.status_code == 200 |
|
|
user_data = response.json() |
|
|
assert user_data["email"] == sample_user_data["email"] |
|
|
assert user_data["first_name"] == sample_user_data["first_name"] |
|
|
assert user_data["last_name"] == sample_user_data["last_name"] |
|
|
assert user_data["role"] == sample_user_data["role"] |
|
|
|
|
|
|
|
|
def test_get_nonexistent_user(client: TestClient): |
|
|
"""Test getting details for a nonexistent user""" |
|
|
response = client.get("/users/nonexistent-id") |
|
|
assert response.status_code == 404 |
|
|
assert "User not found" in response.json()["detail"] |