Spaces:
Running
Running
| import pytest | |
| from langflow.schema.content_block import ContentBlock | |
| from langflow.schema.content_types import CodeContent, ErrorContent, JSONContent, MediaContent, TextContent, ToolContent | |
| class TestContentBlock: | |
| def test_initialize_with_valid_title_and_contents(self): | |
| """Test initializing ContentBlock with valid title and contents.""" | |
| valid_title = "Sample Title" | |
| valid_contents = [TextContent(type="text", text="Sample text")] | |
| content_block = ContentBlock(title=valid_title, contents=valid_contents) | |
| assert content_block.title == valid_title | |
| assert len(content_block.contents) == 1 | |
| assert isinstance(content_block.contents[0], TextContent) | |
| assert content_block.contents[0].text == "Sample text" | |
| assert content_block.allow_markdown is True | |
| assert content_block.media_url is None | |
| def test_initialize_with_empty_contents(self): | |
| """Test initializing ContentBlock with empty contents list.""" | |
| valid_title = "Sample Title" | |
| empty_contents = [] | |
| content_block = ContentBlock(title=valid_title, contents=empty_contents) | |
| assert content_block.title == valid_title | |
| assert content_block.contents == empty_contents | |
| assert content_block.allow_markdown is True | |
| assert content_block.media_url is None | |
| def test_validate_different_content_types(self): | |
| """Test ContentBlock with different content types.""" | |
| contents = [ | |
| TextContent(type="text", text="Sample text"), | |
| CodeContent(type="code", code="print('hello')", language="python"), | |
| ErrorContent(type="error", error="Sample error"), | |
| JSONContent(type="json", data={"key": "value"}), | |
| MediaContent(type="media", urls=["http://example.com/image.jpg"]), | |
| ToolContent(type="tool_use", output="Sample thought", name="test_tool", tool_input={"input": "test"}), | |
| ] | |
| content_block = ContentBlock(title="Test", contents=contents) | |
| assert len(content_block.contents) == 6 | |
| assert isinstance(content_block.contents[0], TextContent) | |
| assert isinstance(content_block.contents[1], CodeContent) | |
| assert isinstance(content_block.contents[2], ErrorContent) | |
| assert isinstance(content_block.contents[3], JSONContent) | |
| assert isinstance(content_block.contents[4], MediaContent) | |
| assert isinstance(content_block.contents[5], ToolContent) | |
| def test_invalid_contents_type(self): | |
| """Test that providing contents as dict raises TypeError.""" | |
| with pytest.raises(TypeError, match="Contents must be a list of ContentTypes"): | |
| ContentBlock(title="Test", contents={"invalid": "content"}) | |
| def test_single_content_conversion(self): | |
| """Test that single content item is converted to list.""" | |
| single_content = TextContent(type="text", text="Single item") | |
| content_block = ContentBlock(title="Test", contents=single_content) | |
| assert isinstance(content_block.contents, list) | |
| assert len(content_block.contents) == 1 | |
| def test_serialize_contents(self): | |
| """Test serialization of contents to dict format.""" | |
| contents = [ | |
| TextContent(type="text", text="Sample text"), | |
| CodeContent(type="code", code="print('hello')", language="python"), | |
| ] | |
| block = ContentBlock(title="Test Block", contents=contents) | |
| serialized = block.serialize_contents(block.contents) | |
| assert isinstance(serialized, list) | |
| assert len(serialized) == 2 | |
| assert serialized[0]["type"] == "text" | |
| assert serialized[1]["type"] == "code" | |
| assert serialized[1]["language"] == "python" | |
| def test_media_url_handling(self): | |
| """Test handling of media_url field.""" | |
| media_urls = ["http://example.com/1.jpg", "http://example.com/2.jpg"] | |
| block = ContentBlock(title="Test", contents=[TextContent(type="text", text="Sample")], media_url=media_urls) | |
| assert block.media_url == media_urls | |
| def test_allow_markdown_override(self): | |
| """Test overriding allow_markdown default value.""" | |
| block = ContentBlock(title="Test", contents=[], allow_markdown=False) | |
| assert block.allow_markdown is False | |