Files
TimeTracker/tests/test_services/test_task_service.py
Dries Peeters 90dde470da style: standardize code formatting and normalize line endings
- Normalize line endings from CRLF to LF across all files to match .editorconfig
- Standardize quote style from single quotes to double quotes
- Normalize whitespace and formatting throughout codebase
- Apply consistent code style across 372 files including:
  * Application code (models, routes, services, utils)
  * Test files
  * Configuration files
  * CI/CD workflows

This ensures consistency with the project's .editorconfig settings and
improves code maintainability.
2025-11-28 20:05:37 +01:00

83 lines
2.3 KiB
Python

"""
Tests for TaskService.
"""
import pytest
from datetime import date
from app.services import TaskService
from app.models import Task, Project, User
from app import db
@pytest.mark.unit
def test_create_task_success(app, test_project, test_user):
"""Test successful task creation"""
service = TaskService()
result = service.create_task(
name="Test Task",
project_id=test_project.id,
description="Test description",
priority="high",
created_by=test_user.id,
)
assert result["success"] is True
assert result["task"] is not None
assert result["task"].name == "Test Task"
assert result["task"].project_id == test_project.id
@pytest.mark.unit
def test_create_task_invalid_project(app, test_user):
"""Test task creation with invalid project"""
service = TaskService()
result = service.create_task(name="Test Task", project_id=99999, created_by=test_user.id) # Non-existent project
assert result["success"] is False
assert result["error"] == "invalid_project"
@pytest.mark.unit
def test_list_tasks_with_eager_loading(app, test_project, test_user):
"""Test listing tasks with eager loading prevents N+1"""
service = TaskService()
# Create a task
task = Task(name="Test Task", project_id=test_project.id, created_by=test_user.id)
db.session.add(task)
db.session.commit()
# List tasks
result = service.list_tasks(project_id=test_project.id, user_id=test_user.id, is_admin=True, page=1, per_page=20)
assert result["tasks"] is not None
assert len(result["tasks"]) >= 1
# Verify project is loaded (no N+1 query)
task = result["tasks"][0]
assert task.project is not None
assert task.project.id == test_project.id
@pytest.mark.unit
def test_get_task_with_details(app, test_project, test_user):
"""Test getting task with all details"""
service = TaskService()
# Create a task
task = Task(name="Test Task", project_id=test_project.id, created_by=test_user.id)
db.session.add(task)
db.session.commit()
# Get task details
task = service.get_task_with_details(
task_id=task.id, include_time_entries=True, include_comments=True, include_activities=True
)
assert task is not None
assert task.name == "Test Task"
# Verify relations are loaded
assert task.project is not None