52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
from datetime import timedelta
|
|
from ea_chatbot.api.utils import create_access_token, decode_access_token, convert_to_json_compatible
|
|
from langchain_core.messages import AIMessage
|
|
|
|
def test_create_and_decode_access_token():
|
|
"""Test that a token can be created and then decoded."""
|
|
data = {"sub": "test@example.com", "user_id": "123"}
|
|
token = create_access_token(data)
|
|
|
|
decoded = decode_access_token(token)
|
|
assert decoded["sub"] == data["sub"]
|
|
assert decoded["user_id"] == data["user_id"]
|
|
assert "exp" in decoded
|
|
|
|
def test_decode_invalid_token():
|
|
"""Test that an invalid token returns None."""
|
|
assert decode_access_token("invalid-token") is None
|
|
|
|
def test_expired_token():
|
|
"""Test that an expired token returns None."""
|
|
data = {"sub": "test@example.com"}
|
|
# Create a token that expired 1 minute ago
|
|
token = create_access_token(data, expires_delta=timedelta(minutes=-1))
|
|
|
|
assert decode_access_token(token) is None
|
|
|
|
def test_convert_to_json_compatible_complex_message():
|
|
"""Test that list-based message content is handled correctly."""
|
|
# Mock a message with list-based content (blocks)
|
|
msg = AIMessage(content=[
|
|
{"type": "text", "text": "Hello "},
|
|
{"type": "text", "text": "world!"},
|
|
{"type": "other", "data": "ignore me"}
|
|
])
|
|
|
|
result = convert_to_json_compatible(msg)
|
|
assert result["content"] == "Hello world!"
|
|
assert result["type"] == "ai"
|
|
|
|
def test_convert_to_json_compatible_message_with_text_prop():
|
|
"""Test that .text property is prioritized if available."""
|
|
# Using a MagicMock to simulate the property safely
|
|
from unittest.mock import MagicMock
|
|
msg = MagicMock(spec=AIMessage)
|
|
msg.content = "Raw content"
|
|
msg.text = "Just the text"
|
|
msg.type = "ai"
|
|
msg.additional_kwargs = {}
|
|
|
|
result = convert_to_json_compatible(msg)
|
|
assert result["content"] == "Just the text"
|