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