Files

63 lines
1.7 KiB
Python

from datetime import datetime, timezone
from unittest.mock import AsyncMock, MagicMock
from uuid import UUID, uuid4
import pytest
from core.auth.models import CurrentUser
from models.todos import Todo, TodoStatus
from v1.todo.schemas import TodoUpdate
from v1.todo.service import TodoService
def _create_mock_todo() -> Todo:
todo = MagicMock(spec=Todo)
todo.id = uuid4()
todo.owner_id = UUID("00000000-0000-0000-0000-000000000001")
todo.title = "Test Todo"
todo.description = None
todo.priority = 1
todo.order = 0
todo.status = TodoStatus.PENDING
todo.completed_at = None
now = datetime(2026, 3, 20, 8, 0, 0, tzinfo=timezone.utc)
todo.created_at = now
todo.updated_at = now
return todo
@pytest.mark.asyncio
async def test_update_refreshes_todo_before_building_response() -> None:
user_id = UUID("00000000-0000-0000-0000-000000000001")
todo = _create_mock_todo()
repository = AsyncMock()
repository.get_by_id.return_value = todo
repository.update.return_value = todo
repository.get_schedule_items.return_value = []
schedule_item_repository = AsyncMock()
session = AsyncMock()
service = TodoService(
repository=repository,
schedule_item_repository=schedule_item_repository,
session=session,
current_user=CurrentUser(id=user_id),
)
await service.update(
todo.id,
TodoUpdate(
title="Updated",
description=None,
priority=None,
order=None,
status=None,
schedule_item_ids=None,
),
)
session.commit.assert_awaited_once()
session.refresh.assert_awaited_once_with(todo)