| """ |
| Task Helper Utilities for Testing |
| |
| This module provides utility functions for creating and managing tasks in tests. |
| """ |
|
|
| from typing import Optional, List |
| from datetime import datetime |
| from sqlmodel import Session |
|
|
| from src.models.task import Task |
|
|
|
|
| def create_test_task( |
| session: Session, |
| user_id: int, |
| title: str = "Test Task", |
| description: Optional[str] = None, |
| completed: bool = False |
| ) -> Task: |
| """ |
| Create a test task in the database. |
| |
| Args: |
| session: Database session |
| user_id: User ID who owns the task |
| title: Task title |
| description: Optional task description |
| completed: Completion status |
| |
| Returns: |
| Created Task instance |
| """ |
| task = Task( |
| user_id=user_id, |
| title=title, |
| description=description, |
| completed=completed, |
| created_at=datetime.utcnow(), |
| updated_at=datetime.utcnow() |
| ) |
|
|
| session.add(task) |
| session.commit() |
| session.refresh(task) |
|
|
| return task |
|
|
|
|
| def create_multiple_tasks( |
| session: Session, |
| user_id: int, |
| count: int, |
| title_prefix: str = "Task", |
| completed: bool = False |
| ) -> List[Task]: |
| """ |
| Create multiple test tasks for a user. |
| |
| Args: |
| session: Database session |
| user_id: User ID who owns the tasks |
| count: Number of tasks to create |
| title_prefix: Prefix for task titles |
| completed: Completion status for all tasks |
| |
| Returns: |
| List of created Task instances |
| """ |
| tasks = [] |
|
|
| for i in range(count): |
| task = create_test_task( |
| session=session, |
| user_id=user_id, |
| title=f"{title_prefix} {i+1}", |
| description=f"Description for {title_prefix} {i+1}", |
| completed=completed |
| ) |
| tasks.append(task) |
|
|
| return tasks |
|
|
|
|
| def get_task_by_id(session: Session, task_id: int) -> Optional[Task]: |
| """ |
| Retrieve a task by ID. |
| |
| Args: |
| session: Database session |
| task_id: Task ID to retrieve |
| |
| Returns: |
| Task instance or None if not found |
| """ |
| return session.get(Task, task_id) |
|
|
|
|
| def delete_all_tasks(session: Session, user_id: Optional[int] = None): |
| """ |
| Delete all tasks, optionally filtered by user. |
| |
| Args: |
| session: Database session |
| user_id: Optional user ID to filter by |
| """ |
| if user_id: |
| session.query(Task).filter(Task.user_id == user_id).delete() |
| else: |
| session.query(Task).delete() |
|
|
| session.commit() |
|
|
|
|
| def count_tasks(session: Session, user_id: int, completed: Optional[bool] = None) -> int: |
| """ |
| Count tasks for a user, optionally filtered by completion status. |
| |
| Args: |
| session: Database session |
| user_id: User ID to count tasks for |
| completed: Optional completion status filter |
| |
| Returns: |
| Number of tasks matching criteria |
| """ |
| query = session.query(Task).filter(Task.user_id == user_id) |
|
|
| if completed is not None: |
| query = query.filter(Task.completed == completed) |
|
|
| return query.count() |
|
|
|
|
| def assert_task_equals(task: Task, expected_title: str, expected_user_id: int, expected_completed: bool = False): |
| """ |
| Assert that a task matches expected values. |
| |
| Args: |
| task: Task instance to check |
| expected_title: Expected task title |
| expected_user_id: Expected user ID |
| expected_completed: Expected completion status |
| |
| Raises: |
| AssertionError: If task doesn't match expected values |
| """ |
| assert task.title == expected_title, f"Expected title '{expected_title}', got '{task.title}'" |
| assert task.user_id == expected_user_id, f"Expected user_id {expected_user_id}, got {task.user_id}" |
| assert task.completed == expected_completed, f"Expected completed {expected_completed}, got {task.completed}" |
|
|