-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
cf1344f
commit 79652f4
Showing
7 changed files
with
200 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import pytest | ||
from datetime import datetime, timedelta | ||
from jose import jwt | ||
from fastapi import HTTPException, status | ||
from sqlalchemy.orm import Session | ||
from app.services.auth import create_access_token, get_current_user | ||
from app.models.user import User | ||
from app.database.base import Base | ||
from app.services.user_service import get_user_by_email | ||
import os | ||
|
||
os.environ["SECRET_KEY"] = "test_secret_key" | ||
os.environ["ALGORITHM"] = "HS256" | ||
|
||
@pytest.fixture(scope="module") | ||
def db(): | ||
from sqlalchemy import create_engine | ||
engine = create_engine('sqlite:///:memory:') | ||
Base.metadata.create_all(bind=engine) | ||
connection = engine.connect() | ||
yield connection | ||
connection.close() | ||
|
||
def mock_get_current_user(db: Session, token: str): | ||
payload = jwt.decode(token, os.getenv("SECRET_KEY"), algorithms=[os.getenv("ALGORITHM")]) | ||
email = payload.get("sub") | ||
if email is None: | ||
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid credentials") | ||
user = get_user_by_email(db, email=email) | ||
if user is None: | ||
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="User not found") | ||
return user | ||
|
||
def test_create_access_token(): | ||
# test data | ||
user_data = {"sub": "[email protected]"} | ||
access_token = create_access_token(user_data) | ||
|
||
# Validate token | ||
assert isinstance(access_token, str) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
import pytest | ||
from sqlalchemy import create_engine | ||
from sqlalchemy.orm import sessionmaker | ||
from app.models.task import Task | ||
from app.schemas.task import TaskCreate, TaskUpdate | ||
from app.database.base import Base | ||
from app.services.task_service import create_task, get_tasks, get_task_by_id, update_task, delete_task | ||
|
||
DATABASE_URL = "sqlite:///./test.db" | ||
engine = create_engine(DATABASE_URL) | ||
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | ||
Base.metadata.create_all(bind=engine) | ||
|
||
@pytest.fixture(scope="module") | ||
def db(): | ||
connection = engine.connect() | ||
transaction = connection.begin() | ||
session = TestingSessionLocal(bind=connection) | ||
yield session | ||
session.close() | ||
transaction.rollback() | ||
connection.close() | ||
|
||
def test_get_tasks(db): | ||
user_id = 1 | ||
task_data_1 = TaskCreate(title="Task 1", description="Task 1 description") | ||
task_data_2 = TaskCreate(title="Task 2", description="Task 2 description") | ||
create_task(db, task_data_1, user_id) | ||
create_task(db, task_data_2, user_id) | ||
|
||
|
||
tasks = get_tasks(db, user_id) | ||
|
||
assert len(tasks) == 2 | ||
assert tasks[0].title == "Task 1" | ||
assert tasks[1].title == "Task 2" | ||
|
||
def test_create_task(db): | ||
user_id = 1 | ||
task_data = TaskCreate(title="Test Task", description="Testing task creation") | ||
|
||
created_task = create_task(db, task_data, user_id) | ||
|
||
assert created_task.id is not None | ||
assert created_task.title == "Test Task" | ||
assert created_task.description == "Testing task creation" | ||
assert created_task.user_id == user_id | ||
|
||
|
||
|
||
def test_get_task_by_id(db): | ||
# Test data | ||
user_id = 1 | ||
task_data = TaskCreate(title="Test Task", description="Testing get task by id") | ||
created_task = create_task(db, task_data, user_id) | ||
|
||
fetched_task = get_task_by_id(db, created_task.id, user_id) | ||
|
||
assert fetched_task is not None | ||
assert fetched_task.title == "Test Task" | ||
assert fetched_task.description == "Testing get task by id" | ||
|
||
|
||
def test_update_task(db): | ||
user_id = 1 | ||
task_data = TaskCreate(title="Initial Task", description="Initial description") | ||
created_task = create_task(db, task_data, user_id) | ||
|
||
updated_data = TaskUpdate(title="Updated Task", description="Updated description") | ||
|
||
updated_task = update_task(db, created_task.id, updated_data, user_id) | ||
|
||
assert updated_task is not None | ||
assert updated_task.id == created_task.id | ||
assert updated_task.title == "Updated Task" | ||
assert updated_task.description == "Updated description" | ||
|
||
def test_delete_task(db): | ||
user_id = 1 | ||
task_data = TaskCreate(title="Task to delete", description="Task to delete description") | ||
created_task = create_task(db, task_data, user_id) | ||
|
||
deleted_task = delete_task(db, created_task.id, user_id) | ||
|
||
assert deleted_task is not None | ||
assert deleted_task.id == created_task.id | ||
|
||
fetched_task = get_task_by_id(db, created_task.id, user_id) | ||
assert fetched_task is None |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
import pytest | ||
from sqlalchemy import create_engine | ||
from sqlalchemy.orm import sessionmaker | ||
from app.services.user_service import create_user, get_user_by_email, verify_password | ||
from app.schemas.user import UserCreate | ||
from app.database.base import Base | ||
from sqlalchemy.exc import IntegrityError | ||
|
||
DATABASE_URL = "sqlite:///./test.db" | ||
engine = create_engine(DATABASE_URL) | ||
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | ||
Base.metadata.create_all(bind=engine) | ||
|
||
@pytest.fixture(scope="function", autouse=True) | ||
def db(): | ||
connection = engine.connect() | ||
transaction = connection.begin() | ||
session = TestingSessionLocal(bind=connection) | ||
yield session | ||
session.close() | ||
transaction.rollback() | ||
connection.close() | ||
|
||
def test_create_user(db): | ||
user_data = UserCreate(username="testuser", email="[email protected]", password="testpassword") | ||
user = create_user(db, user_data) | ||
assert user.username == "testuser" | ||
assert user.email == "[email protected]" | ||
assert verify_password("testpassword", user.hashed_password) | ||
|
||
def test_get_user_by_email(db): | ||
user_data = UserCreate(username="testuser3", email="[email protected]", password="testpassword") | ||
user = create_user(db, user_data) | ||
fetched_user = get_user_by_email(db, email="[email protected]") | ||
assert fetched_user.username == "testuser3" | ||
assert fetched_user.email == "[email protected]" | ||
|
||
def test_create_duplicate_user(db): | ||
user_data = UserCreate(username="testuser2", email="[email protected]", password="testpassword") | ||
create_user(db, user_data) | ||
|
||
with pytest.raises(IntegrityError): | ||
duplicate_user_data = UserCreate(username="testuser2", email="[email protected]", password="testpassword") | ||
create_user(db, duplicate_user_data) |