Automated Action 7658939790 Create Task Manager API with FastAPI and SQLite
- Set up project structure and dependencies
- Create task model and schema
- Implement Alembic migrations
- Add CRUD API endpoints for task management
- Add health endpoint with database connectivity check
- Add comprehensive error handling
- Add tests for API endpoints
- Update README with API documentation
2025-06-04 22:52:31 +00:00

152 lines
3.6 KiB
Python

from fastapi import status
from app.models.task import Task
def test_create_task(client, db):
"""
Test creating a new task.
"""
task_data = {
"title": "Test Task",
"description": "This is a test task",
"priority": 2
}
response = client.post("/api/v1/tasks/", json=task_data)
data = response.json()
assert response.status_code == status.HTTP_201_CREATED
assert data["title"] == task_data["title"]
assert data["description"] == task_data["description"]
assert data["priority"] == task_data["priority"]
assert "id" in data
assert "created_at" in data
def test_read_tasks(client, db):
"""
Test getting a list of tasks.
"""
# Create test tasks
task1 = Task(
title="Task 1",
description="Description 1",
priority=1
)
task2 = Task(
title="Task 2",
description="Description 2",
priority=2
)
db.add(task1)
db.add(task2)
db.commit()
response = client.get("/api/v1/tasks/")
data = response.json()
assert response.status_code == status.HTTP_200_OK
assert len(data) == 2
assert data[0]["title"] == "Task 1"
assert data[1]["title"] == "Task 2"
def test_read_task(client, db):
"""
Test getting a specific task.
"""
# Create test task
task = Task(
title="Test Task",
description="Test Description",
priority=2
)
db.add(task)
db.commit()
response = client.get(f"/api/v1/tasks/{task.id}")
data = response.json()
assert response.status_code == status.HTTP_200_OK
assert data["title"] == task.title
assert data["description"] == task.description
assert data["priority"] == task.priority
def test_update_task(client, db):
"""
Test updating a task.
"""
# Create test task
task = Task(
title="Old Title",
description="Old Description",
priority=1
)
db.add(task)
db.commit()
update_data = {
"title": "New Title",
"description": "New Description",
"priority": 3
}
response = client.put(f"/api/v1/tasks/{task.id}", json=update_data)
data = response.json()
assert response.status_code == status.HTTP_200_OK
assert data["title"] == update_data["title"]
assert data["description"] == update_data["description"]
assert data["priority"] == update_data["priority"]
def test_delete_task(client, db):
"""
Test deleting a task.
"""
# Create test task
task = Task(
title="Task to Delete",
description="This task will be deleted",
priority=2
)
db.add(task)
db.commit()
response = client.delete(f"/api/v1/tasks/{task.id}")
assert response.status_code == status.HTTP_204_NO_CONTENT
# Verify task was deleted
task_in_db = db.query(Task).filter(Task.id == task.id).first()
assert task_in_db is None
def test_filter_tasks_by_completed(client, db):
"""
Test filtering tasks by completed status.
"""
# Create test tasks
task1 = Task(
title="Task 1",
description="Description 1",
completed=True
)
task2 = Task(
title="Task 2",
description="Description 2",
completed=False
)
db.add(task1)
db.add(task2)
db.commit()
response = client.get("/api/v1/tasks/?completed=true")
data = response.json()
assert response.status_code == status.HTTP_200_OK
assert len(data) == 1
assert data[0]["title"] == "Task 1"
assert data[0]["completed"] is True