mirror of
https://github.com/DRYTRIX/TimeTracker.git
synced 2026-02-13 23:59:00 -06:00
- 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.
83 lines
2.3 KiB
Python
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
|