59 lines
2.5 KiB
Python
59 lines
2.5 KiB
Python
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
from nexus.mempalace.config import CORE_ROOMS
|
|
from nexus.mempalace.conversation_artifacts import (
|
|
ConversationArtifact,
|
|
build_request_response_artifact,
|
|
extract_alexander_request_pairs,
|
|
normalize_speaker,
|
|
)
|
|
|
|
|
|
def test_sovereign_room_is_core_room() -> None:
|
|
assert "sovereign" in CORE_ROOMS
|
|
rooms_yaml = yaml.safe_load(Path("mempalace/rooms.yaml").read_text())
|
|
assert any(room["key"] == "sovereign" for room in rooms_yaml["core_rooms"])
|
|
|
|
|
|
def test_normalize_speaker_maps_alexander_variants() -> None:
|
|
assert normalize_speaker("Alexander Whitestone") == "alexander"
|
|
assert normalize_speaker("Rockachopa") == "alexander"
|
|
assert normalize_speaker(" ALEXANDER ") == "alexander"
|
|
assert normalize_speaker("Bezalel") == "bezalel"
|
|
|
|
|
|
def test_build_request_response_artifact_creates_sovereign_metadata() -> None:
|
|
artifact = build_request_response_artifact(
|
|
requester="Alexander Whitestone",
|
|
responder="Allegro",
|
|
request_text="Please organize my conversation artifacts.",
|
|
response_text="I will catalog them under a sovereign room.",
|
|
source="telegram:timmy-time",
|
|
timestamp="2026-04-16T01:30:00Z",
|
|
)
|
|
|
|
assert isinstance(artifact, ConversationArtifact)
|
|
assert artifact.room == "sovereign"
|
|
assert artifact.metadata["speaker_tags"] == ["speaker:alexander", "speaker:allegro"]
|
|
assert artifact.metadata["artifact_type"] == "alexander_request_response"
|
|
assert artifact.metadata["responder"] == "allegro"
|
|
assert "## Alexander Request" in artifact.text
|
|
assert "## Wizard Response" in artifact.text
|
|
|
|
|
|
def test_extract_alexander_request_pairs_finds_following_wizard_response() -> None:
|
|
turns = [
|
|
{"speaker": "Alexander Whitestone", "text": "Catalog my requests as artifacts.", "timestamp": "2026-04-16T01:00:00Z"},
|
|
{"speaker": "Allegro", "text": "I'll build a sovereign room contract.", "timestamp": "2026-04-16T01:01:00Z"},
|
|
{"speaker": "Alexander", "text": "Make sure my words are easy to recall.", "timestamp": "2026-04-16T01:02:00Z"},
|
|
{"speaker": "Allegro", "text": "I will tag them with speaker metadata.", "timestamp": "2026-04-16T01:03:00Z"},
|
|
]
|
|
|
|
artifacts = extract_alexander_request_pairs(turns, responder="Allegro", source="telegram")
|
|
|
|
assert len(artifacts) == 2
|
|
assert artifacts[0].metadata["request_timestamp"] == "2026-04-16T01:00:00Z"
|
|
assert artifacts[1].metadata["response_timestamp"] == "2026-04-16T01:03:00Z"
|