Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions src/tests/test_accounts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import pytest
from fastapi.testclient import TestClient
from sqlalchemy.orm import Session
from main import app
from ..database.session_postgresql import get_postgresql_db
from unittest.mock import MagicMock

client = TestClient(app)


@pytest.fixture
def db_session():
mock_db = MagicMock(spec=Session)
yield mock_db


@pytest.fixture
def override_get_db(db_session):
app.dependency_overrides[get_postgresql_db] = lambda: db_session
yield
app.dependency_overrides.clear()


def test_register_user(override_get_db):
response = client.post(
"/register/",
json={"email": "test@example.com", "password": "password123"}
)
assert response.status_code == 201
assert "email" in response.json()


def test_register_existing_user(override_get_db):
client.post("/register/", json={"email": "test@example.com", "password": "password123"})
response = client.post("/register/", json={"email": "test@example.com", "password": "password123"})
assert response.status_code == 409
assert response.json()["detail"].startswith("A user with this email")


def test_activate_account(override_get_db):
response = client.post(
"/activate/",
json={"email": "test@example.com", "token": "valid_token"}
)
assert response.status_code == 200
assert response.json()["message"] == "User account activated successfully."


def test_login_user(override_get_db):
response = client.post(
"/login/",
json={"email": "test@example.com", "password": "password123"}
)
assert response.status_code == 201
assert "access_token" in response.json()
assert "refresh_token" in response.json()


def test_request_password_reset(override_get_db):
response = client.post(
"/password-reset/request/",
json={"email": "test@example.com"}
)
assert response.status_code == 200
assert "message" in response.json()


def test_refresh_access_token(override_get_db):
response = client.post(
"/refresh/",
json={"refresh_token": "valid_refresh_token"}
)
assert response.status_code == 200
assert "access_token" in response.json()
90 changes: 90 additions & 0 deletions src/tests/test_movies.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import pytest
from httpx import AsyncClient
from main import app


@pytest.fixture
async def client():
async with AsyncClient(app=app, base_url="http://test") as ac:
yield ac


@pytest.mark.asyncio
async def test_get_movies(client):
response = await client.get("/movies/")
assert response.status_code == 200
assert isinstance(response.json(), list)


@pytest.mark.asyncio
async def test_create_movie(client):
movie_data = {
"title": "Test Movie",
"description": "Test Description",
"release_year": 2024,
"rating": 8.5,
"genre_ids": [],
"actor_ids": []
}
response = await client.post("/movies/", json=movie_data)
assert response.status_code == 201
data = response.json()
assert data["title"] == movie_data["title"]
assert "id" in data


@pytest.mark.asyncio
async def test_get_movie_by_id(client):
movie_data = {
"title": "Sample Movie",
"description": "Sample Description",
"release_year": 2024,
"rating": 7.8,
"genre_ids": [],
"actor_ids": []
}
create_response = await client.post("/movies/", json=movie_data)
movie_id = create_response.json()["id"]

response = await client.get(f"/movies/{movie_id}")
assert response.status_code == 200
assert response.json()["id"] == movie_id


@pytest.mark.asyncio
async def test_update_movie(client):
movie_data = {
"title": "Old Title",
"description": "Old Description",
"release_year": 2020,
"rating": 6.0,
"genre_ids": [],
"actor_ids": []
}
create_response = await client.post("/movies/", json=movie_data)
movie_id = create_response.json()["id"]

update_data = {"title": "New Title"}
response = await client.patch(f"/movies/{movie_id}", json=update_data)
assert response.status_code == 200
assert response.json()["title"] == "New Title"


@pytest.mark.asyncio
async def test_delete_movie(client):
movie_data = {
"title": "To Be Deleted",
"description": "Will be removed",
"release_year": 2021,
"rating": 5.5,
"genre_ids": [],
"actor_ids": []
}
create_response = await client.post("/movies/", json=movie_data)
movie_id = create_response.json()["id"]

delete_response = await client.delete(f"/movies/{movie_id}")
assert delete_response.status_code == 204

response = await client.get(f"/movies/{movie_id}")
assert response.status_code == 404
Loading