fix: resolve navigation-cache regressions and todo UX

This commit is contained in:
qzl
2026-03-20 16:45:08 +08:00
parent 3f1858d733
commit 55f3805ee9
15 changed files with 160 additions and 105 deletions
@@ -0,0 +1,62 @@
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)