Files
basicmachines-co-basic-memory/test-int/test_schema/test_parser_integration.py
Paul Hernandez c97733d785 feat: Schema system for Basic Memory (#549)
Signed-off-by: phernandez <paul@basicmachines.co>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 15:04:42 -06:00

84 lines
3.4 KiB
Python

"""Integration tests for the Picoschema parser using real fixture files."""
import pytest
from basic_memory.schema.parser import parse_schema_note
class TestPersonSchemaParsing:
"""Parse the Person.md schema fixture and verify all fields."""
def test_person_schema_entity(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
assert schema.entity == "Person"
def test_person_schema_version(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
assert schema.version == 1
def test_person_schema_validation_mode(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
assert schema.validation_mode == "warn"
def test_person_schema_field_count(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
assert len(schema.fields) == 5
def test_person_name_field_is_required(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
name_field = next(f for f in schema.fields if f.name == "name")
assert name_field.required is True
assert name_field.type == "string"
assert name_field.description == "full name"
def test_person_role_field_is_optional(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
role_field = next(f for f in schema.fields if f.name == "role")
assert role_field.required is False
def test_person_works_at_is_entity_ref(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
works_at = next(f for f in schema.fields if f.name == "works_at")
assert works_at.is_entity_ref is True
assert works_at.type == "Organization"
def test_person_expertise_is_array(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
expertise = next(f for f in schema.fields if f.name == "expertise")
assert expertise.is_array is True
def test_person_email_is_optional(self, person_schema_frontmatter):
schema = parse_schema_note(person_schema_frontmatter)
email = next(f for f in schema.fields if f.name == "email")
assert email.required is False
class TestBookSchemaParsing:
"""Parse the Book.md schema fixture."""
def test_book_genre_is_enum(self, book_schema_frontmatter):
schema = parse_schema_note(book_schema_frontmatter)
genre = next(f for f in schema.fields if f.name == "genre")
assert genre.is_enum is True
assert set(genre.enum_values) == {"fiction", "nonfiction", "technical"}
class TestStrictSchemaParsing:
"""Verify strict validation mode is parsed."""
def test_strict_validation_mode(self, strict_schema_frontmatter):
schema = parse_schema_note(strict_schema_frontmatter)
assert schema.validation_mode == "strict"
class TestSchemaParsingErrors:
"""Verify parser raises on invalid frontmatter."""
def test_missing_entity_raises(self):
with pytest.raises(ValueError, match="entity"):
parse_schema_note({"type": "schema", "schema": {"name": "string"}})
def test_missing_schema_dict_raises(self):
with pytest.raises(ValueError, match="schema"):
parse_schema_note({"type": "schema", "entity": "Person"})