Optimization
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
"""Unit tests for ConversationManagerService."""
|
||||
|
||||
import asyncio
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from typing import Literal
|
||||
from unittest.mock import AsyncMock, Mock, patch
|
||||
@@ -471,6 +472,7 @@ class TestQuickReplyPath:
|
||||
session=sample_session,
|
||||
)
|
||||
|
||||
await asyncio.sleep(0.01) # Let fire-and-forget background tasks complete
|
||||
assert mock_firestore.save_entry.await_count == 2
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -499,6 +501,7 @@ class TestQuickReplyPath:
|
||||
session=sample_session,
|
||||
)
|
||||
|
||||
await asyncio.sleep(0.01) # Let fire-and-forget background tasks complete
|
||||
mock_firestore.save_session.assert_awaited_once()
|
||||
mock_redis.save_session.assert_awaited_once()
|
||||
|
||||
@@ -571,6 +574,7 @@ class TestStandardConversation:
|
||||
session=sample_session,
|
||||
)
|
||||
|
||||
await asyncio.sleep(0.01) # Let fire-and-forget background tasks complete
|
||||
assert mock_firestore.save_entry.await_count == 2
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -588,6 +592,7 @@ class TestStandardConversation:
|
||||
session=sample_session,
|
||||
)
|
||||
|
||||
await asyncio.sleep(0.01) # Let fire-and-forget background tasks complete
|
||||
# save_session is called in _update_session_after_turn
|
||||
assert mock_firestore.save_session.await_count >= 1
|
||||
assert mock_redis.save_session.await_count >= 1
|
||||
@@ -611,6 +616,7 @@ class TestStandardConversation:
|
||||
session=sample_session,
|
||||
)
|
||||
|
||||
await asyncio.sleep(0.01) # Let fire-and-forget background tasks complete
|
||||
mock_firestore.update_notification_status.assert_awaited_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
@@ -120,10 +120,8 @@ class TestSessionManagement:
|
||||
|
||||
mock_collection = MagicMock()
|
||||
mock_where = MagicMock()
|
||||
mock_order = MagicMock()
|
||||
mock_collection.where.return_value = mock_where
|
||||
mock_where.order_by.return_value = mock_order
|
||||
mock_order.limit.return_value = mock_query
|
||||
mock_where.limit.return_value = mock_query
|
||||
|
||||
original_collection = clean_firestore.db.collection
|
||||
clean_firestore.db.collection = MagicMock(return_value=mock_collection)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
"""Tests for QuickReplySessionService."""
|
||||
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from unittest.mock import AsyncMock, Mock
|
||||
from uuid import uuid4
|
||||
|
||||
@@ -160,6 +161,39 @@ async def test_start_session_existing_user(service, mock_firestore, mock_redis,
|
||||
mock_content.get_quick_replies.assert_called_once_with("pagos")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_start_session_updates_last_modified_on_existing(
|
||||
service, mock_firestore, mock_redis, mock_content
|
||||
):
|
||||
"""Test that last_modified is refreshed when updating pantalla_contexto.
|
||||
|
||||
Ensures quick reply context won't be incorrectly marked as stale
|
||||
when the session was idle before the user opened a quick reply screen.
|
||||
"""
|
||||
stale_time = datetime.now(UTC) - timedelta(minutes=20)
|
||||
test_session = ConversationSession.create(
|
||||
session_id="session-123",
|
||||
user_id="user_by_phone_5551234",
|
||||
telefono="555-1234",
|
||||
pantalla_contexto=None,
|
||||
)
|
||||
test_session.last_modified = stale_time
|
||||
|
||||
mock_redis.get_session.return_value = test_session
|
||||
mock_content.get_quick_replies.return_value = QuickReplyScreen(
|
||||
header="H", body=None, button=None, header_section=None, preguntas=[]
|
||||
)
|
||||
|
||||
await service.start_quick_reply_session(
|
||||
telefono="555-1234",
|
||||
_nombre="John",
|
||||
pantalla_contexto="pagos",
|
||||
)
|
||||
|
||||
saved_session = mock_redis.save_session.call_args[0][0]
|
||||
assert saved_session.last_modified > stale_time
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_start_session_invalid_phone(service):
|
||||
"""Test starting session with invalid phone number."""
|
||||
|
||||
@@ -47,14 +47,15 @@ def test_app_has_routers():
|
||||
|
||||
def test_main_entry_point():
|
||||
"""Test main entry point calls uvicorn.run."""
|
||||
with patch("capa_de_integracion.main.uvicorn.run") as mock_run:
|
||||
with patch("capa_de_integracion.main.uvicorn.run") as mock_run, \
|
||||
patch("sys.argv", ["capa-de-integracion"]):
|
||||
main()
|
||||
|
||||
mock_run.assert_called_once()
|
||||
call_kwargs = mock_run.call_args.kwargs
|
||||
assert call_kwargs["host"] == "0.0.0.0"
|
||||
assert call_kwargs["port"] == 8080
|
||||
assert call_kwargs["reload"] is True
|
||||
assert call_kwargs["workers"] == 1
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
Reference in New Issue
Block a user