mirror of
https://github.com/basicmachines-co/basic-memory
synced 2026-06-21 13:47:35 +00:00
103 lines
2.6 KiB
Python
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 |