Files
basicmachines-co-basic-memory/tests/markdown/test_content_parser.py
T
2024-12-21 16:26:55 -06:00

103 lines
2.6 KiB
Python

"""Tests for content parsing."""
from textwrap import dedent
import pytest
from basic_memory.markdown.exceptions import ParseError
from basic_memory.markdown.content_parser import ContentParser
def test_parse_content_basic():
"""Test parsing basic content."""
text = dedent("""
# Test Entity
Basic description.
## Observations
- [test] First observation #tag (context)
- [test] Second observation #tag1 #tag2 (more context)
## Relations
- implements [[Other Entity]] (implementation)
- uses [[Another Entity]] (usage details)
""")
parser = ContentParser()
result = parser.parse(text)
assert result.title == "Test Entity"
assert result.description == "Basic description."
assert len(result.observations) == 2
assert len(result.relations) == 2
assert result.observations[0].category == "test"
assert result.relations[0].type == "implements"
def test_parse_content_minimal():
"""Test parsing minimal content with just title."""
text = dedent("""
# Test Entity
""")
parser = ContentParser()
result = parser.parse(text)
assert result.title == "Test Entity"
assert not result.description
assert not result.observations
assert not result.relations
def test_parse_content_malformed():
"""Test handling malformed content items."""
text = dedent("""
# Test Entity
## Observations
- not a valid observation
- [test] valid observation #tag
## Relations
- not a valid relation
- implements [[Valid Entity]]
""")
parser = ContentParser()
result = parser.parse(text)
assert len(result.observations) == 1 # Only valid observation
assert len(result.relations) == 1 # Only valid relation
def test_parse_content_no_title():
"""Test error when content has no title."""
text = dedent("""
Some content without a title.
## Observations
- [test] observation
""")
parser = ContentParser()
result = parser.parse(text)
assert not result.title
assert len(result.observations) == 1
def test_parse_content_multiline_description():
"""Test parsing multiline description."""
text = dedent("""
# Test Entity
First line of description.
Second line of description.
Third line with more details.
## Observations
- [test] observation
""")
parser = ContentParser()
result = parser.parse(text)
assert "First line" in result.description
assert "Second line" in result.description
assert "Third line" in result.description