agent-flow / src /backend /tests /unit /schema /test_content_block.py
Tai Truong
fix readme
d202ada
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