63 lines
1.7 KiB
Python
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)
|