Spaces:
Running
Running
| import pytest | |
| from aiofile import async_open | |
| from langflow.components.inputs import ChatInput, TextInputComponent | |
| from langflow.schema.message import Message | |
| from langflow.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_NAME_USER, MESSAGE_SENDER_USER | |
| from tests.base import ComponentTestBaseWithClient, ComponentTestBaseWithoutClient | |
| class TestChatInput(ComponentTestBaseWithClient): | |
| def component_class(self): | |
| return ChatInput | |
| def default_kwargs(self): | |
| return { | |
| "input_value": "Hello, how are you?", | |
| "should_store_message": True, | |
| "sender": MESSAGE_SENDER_USER, | |
| "sender_name": MESSAGE_SENDER_NAME_USER, | |
| "session_id": "test_session_123", | |
| "files": [], | |
| "background_color": "#f0f0f0", | |
| "chat_icon": "👤", | |
| "text_color": "#000000", | |
| } | |
| def file_names_mapping(self): | |
| return [ | |
| {"version": "1.0.15", "module": "inputs", "file_name": "ChatInput"}, | |
| {"version": "1.0.16", "module": "inputs", "file_name": "ChatInput"}, | |
| {"version": "1.0.17", "module": "inputs", "file_name": "ChatInput"}, | |
| {"version": "1.0.18", "module": "inputs", "file_name": "ChatInput"}, | |
| {"version": "1.0.19", "module": "inputs", "file_name": "ChatInput"}, | |
| ] | |
| async def test_message_response(self, component_class, default_kwargs): | |
| """Test that the message_response method returns a valid Message object.""" | |
| component = component_class(**default_kwargs) | |
| message = await component.message_response() | |
| assert isinstance(message, Message) | |
| assert message.text == default_kwargs["input_value"] | |
| assert message.sender == default_kwargs["sender"] | |
| assert message.sender_name == default_kwargs["sender_name"] | |
| assert message.session_id == default_kwargs["session_id"] | |
| assert message.files == default_kwargs["files"] | |
| assert message.properties.model_dump() == { | |
| "background_color": default_kwargs["background_color"], | |
| "text_color": default_kwargs["text_color"], | |
| "icon": default_kwargs["chat_icon"], | |
| "edited": False, | |
| "source": {"id": None, "display_name": None, "source": None}, | |
| "allow_markdown": False, | |
| "state": "complete", | |
| "targets": [], | |
| } | |
| async def test_message_response_ai_sender(self, component_class): | |
| """Test message response with AI sender type.""" | |
| kwargs = { | |
| "input_value": "I am an AI assistant", | |
| "sender": MESSAGE_SENDER_AI, | |
| "sender_name": "AI Assistant", | |
| "session_id": "test_session_123", | |
| } | |
| component = component_class(**kwargs) | |
| message = await component.message_response() | |
| assert isinstance(message, Message) | |
| assert message.sender == MESSAGE_SENDER_AI | |
| assert message.sender_name == "AI Assistant" | |
| async def test_message_response_without_session(self, component_class): | |
| """Test message response without session ID.""" | |
| kwargs = { | |
| "input_value": "Test message", | |
| "sender": MESSAGE_SENDER_USER, | |
| "sender_name": MESSAGE_SENDER_NAME_USER, | |
| "session_id": "", # Empty session ID | |
| } | |
| component = component_class(**kwargs) | |
| message = await component.message_response() | |
| assert isinstance(message, Message) | |
| assert message.session_id == "" | |
| async def test_message_response_with_files(self, component_class, tmp_path): | |
| """Test message response with file attachments.""" | |
| # Create a temporary test file | |
| test_file = tmp_path / "test.txt" | |
| async with async_open(test_file, "w") as f: | |
| await f.write("Test content") | |
| kwargs = { | |
| "input_value": "Message with file", | |
| "sender": MESSAGE_SENDER_USER, | |
| "sender_name": MESSAGE_SENDER_NAME_USER, | |
| "session_id": "test_session_123", | |
| "files": [str(test_file)], | |
| } | |
| component = component_class(**kwargs) | |
| message = await component.message_response() | |
| assert isinstance(message, Message) | |
| assert len(message.files) == 1 | |
| assert message.files[0] == str(test_file) | |
| async def test_message_storage_disabled(self, component_class): | |
| """Test message response when storage is disabled.""" | |
| kwargs = { | |
| "input_value": "Test message", | |
| "should_store_message": False, | |
| "sender": MESSAGE_SENDER_USER, | |
| "sender_name": MESSAGE_SENDER_NAME_USER, | |
| "session_id": "test_session_123", | |
| } | |
| component = component_class(**kwargs) | |
| message = await component.message_response() | |
| assert isinstance(message, Message) | |
| # The message should still be created but not stored | |
| assert message.text == "Test message" | |
| class TestTextInputComponent(ComponentTestBaseWithoutClient): | |
| def component_class(self): | |
| return TextInputComponent | |
| def default_kwargs(self): | |
| return { | |
| "input_value": "Hello, world!", | |
| "data_template": "{text}", | |
| } | |
| def file_names_mapping(self): | |
| return [ | |
| {"version": "1.0.15", "module": "inputs", "file_name": "TextInput"}, | |
| {"version": "1.0.16", "module": "inputs", "file_name": "TextInput"}, | |
| {"version": "1.0.17", "module": "inputs", "file_name": "TextInput"}, | |
| {"version": "1.0.18", "module": "inputs", "file_name": "TextInput"}, | |
| {"version": "1.0.19", "module": "inputs", "file_name": "TextInput"}, | |
| ] | |