mirror of
https://github.com/langgenius/dify.git
synced 2026-04-16 02:16:57 +08:00
This commit is contained in:
parent
ebf741114d
commit
381c518b23
@ -0,0 +1,73 @@
|
||||
from datetime import datetime
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
from sqlalchemy.orm import Session
|
||||
from werkzeug.exceptions import NotFound
|
||||
|
||||
from controllers.console.app.conversation import _get_conversation
|
||||
from models.enums import ConversationFromSource
|
||||
from models.model import AppMode, Conversation
|
||||
from tests.test_containers_integration_tests.controllers.console.helpers import (
|
||||
create_console_account_and_tenant,
|
||||
create_console_app,
|
||||
)
|
||||
|
||||
|
||||
def test_get_conversation_mark_read_keeps_updated_at_unchanged(
|
||||
db_session_with_containers: Session,
|
||||
):
|
||||
account, tenant = create_console_account_and_tenant(db_session_with_containers)
|
||||
app = create_console_app(db_session_with_containers, tenant.id, account.id, AppMode.CHAT)
|
||||
|
||||
original_updated_at = datetime(2026, 2, 8, 0, 0, 0)
|
||||
conversation = Conversation(
|
||||
app_id=app.id,
|
||||
name="read timestamp test",
|
||||
inputs={},
|
||||
status="normal",
|
||||
mode=AppMode.CHAT,
|
||||
from_source=ConversationFromSource.CONSOLE,
|
||||
from_account_id=account.id,
|
||||
updated_at=original_updated_at,
|
||||
)
|
||||
db_session_with_containers.add(conversation)
|
||||
db_session_with_containers.commit()
|
||||
|
||||
read_at = datetime(2026, 2, 9, 0, 0, 0)
|
||||
|
||||
with (
|
||||
patch(
|
||||
"controllers.console.app.conversation.current_account_with_tenant",
|
||||
return_value=(account, tenant.id),
|
||||
autospec=True,
|
||||
),
|
||||
patch(
|
||||
"controllers.console.app.conversation.naive_utc_now",
|
||||
return_value=read_at,
|
||||
autospec=True,
|
||||
),
|
||||
):
|
||||
loaded = _get_conversation(app, conversation.id)
|
||||
|
||||
db_session_with_containers.refresh(conversation)
|
||||
|
||||
assert loaded.id == conversation.id
|
||||
assert conversation.read_at == read_at
|
||||
assert conversation.read_account_id == account.id
|
||||
assert conversation.updated_at == original_updated_at
|
||||
|
||||
|
||||
def test_get_conversation_raises_not_found_for_missing_conversation(
|
||||
db_session_with_containers: Session,
|
||||
):
|
||||
account, tenant = create_console_account_and_tenant(db_session_with_containers)
|
||||
app = create_console_app(db_session_with_containers, tenant.id, account.id, AppMode.CHAT)
|
||||
|
||||
with patch(
|
||||
"controllers.console.app.conversation.current_account_with_tenant",
|
||||
return_value=(account, tenant.id),
|
||||
autospec=True,
|
||||
):
|
||||
with pytest.raises(NotFound):
|
||||
_get_conversation(app, "00000000-0000-0000-0000-000000000000")
|
||||
@ -1,42 +0,0 @@
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from controllers.console.app.conversation import _get_conversation
|
||||
|
||||
|
||||
def test_get_conversation_mark_read_keeps_updated_at_unchanged():
|
||||
app_model = SimpleNamespace(id="app-id")
|
||||
account = SimpleNamespace(id="account-id")
|
||||
conversation = MagicMock()
|
||||
conversation.id = "conversation-id"
|
||||
|
||||
with (
|
||||
patch(
|
||||
"controllers.console.app.conversation.current_account_with_tenant",
|
||||
return_value=(account, None),
|
||||
autospec=True,
|
||||
),
|
||||
patch(
|
||||
"controllers.console.app.conversation.naive_utc_now",
|
||||
return_value=datetime(2026, 2, 9, 0, 0, 0),
|
||||
autospec=True,
|
||||
),
|
||||
patch("controllers.console.app.conversation.db.session", autospec=True) as mock_session,
|
||||
):
|
||||
mock_session.scalar.return_value = conversation
|
||||
|
||||
_get_conversation(app_model, "conversation-id")
|
||||
|
||||
statement = mock_session.execute.call_args[0][0]
|
||||
compiled = statement.compile()
|
||||
sql_text = str(compiled).lower()
|
||||
compact_sql_text = sql_text.replace(" ", "")
|
||||
params = compiled.params
|
||||
|
||||
assert "updated_at=current_timestamp" not in compact_sql_text
|
||||
assert "updated_at=conversations.updated_at" in compact_sql_text
|
||||
assert "read_at=:read_at" in compact_sql_text
|
||||
assert "read_account_id=:read_account_id" in compact_sql_text
|
||||
assert params["read_at"] == datetime(2026, 2, 9, 0, 0, 0)
|
||||
assert params["read_account_id"] == "account-id"
|
||||
Loading…
Reference in New Issue
Block a user