Files
maskanx_cm_backend/tests/test_persona_manager.py
T
AFFAANhandClaude Opus 5 19e1e84fb7 Initial commit: MaskanX backend
Independent FastAPI backend for the MaskanX agentic growth platform.

Includes the agent runtime, MCP client integrations (Meta Ads, LinkedIn,
HubSpot, Tavily, Exa, xAI, Citedy, image generation), PostgreSQL storage
for chats and cron jobs, provider and secret management, and the CLI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 10:28:22 +05:30

91 lines
3.8 KiB
Python

import os
import pytest
import tempfile
from adclaw.agents.persona_manager import PersonaManager
from adclaw.config.config import PersonaConfig
class TestPersonaManager:
def setup_method(self):
self.tmpdir = tempfile.mkdtemp()
self.personas = [
PersonaConfig(id="researcher", name="Researcher", soul_md="## Research\nFind facts."),
PersonaConfig(id="content", name="Content Writer", soul_md="## Writer\nCreate content."),
PersonaConfig(id="coordinator", name="Coordinator", is_coordinator=True),
]
self.manager = PersonaManager(working_dir=self.tmpdir, personas=self.personas)
def test_init_creates_dirs(self):
self.manager.ensure_dirs()
assert os.path.isdir(os.path.join(self.tmpdir, "agents", "researcher"))
assert os.path.isdir(os.path.join(self.tmpdir, "agents", "content"))
assert os.path.isdir(os.path.join(self.tmpdir, "agents", "researcher", "memory"))
assert os.path.isdir(os.path.join(self.tmpdir, "shared", "researcher"))
def test_get_persona_by_id(self):
p = self.manager.get_persona("researcher")
assert p.name == "Researcher"
def test_get_persona_not_found(self):
assert self.manager.get_persona("nonexistent") is None
def test_get_coordinator(self):
c = self.manager.get_coordinator()
assert c.id == "coordinator"
def test_get_coordinator_none(self):
mgr = PersonaManager(working_dir=self.tmpdir, personas=[PersonaConfig(id="a", name="A")])
assert mgr.get_coordinator() is None
def test_get_working_dir_for_persona(self):
d = self.manager.get_working_dir("researcher")
assert d.endswith(os.path.join("agents", "researcher"))
def test_get_shared_dir_for_persona(self):
d = self.manager.get_shared_dir("researcher")
assert d.endswith(os.path.join("shared", "researcher"))
def test_resolve_tag_from_message(self):
assert self.manager.resolve_tag("@researcher найди тренды AI") == "researcher"
def test_resolve_tag_from_display_name_with_space(self):
assert self.manager.resolve_tag("@content writer draft post") == "content"
assert self.manager.strip_tag("@content writer draft post") == "draft post"
assert self.manager.resolve_tag("@content writer: draft post") == "content"
assert self.manager.strip_tag("@content writer: draft post") == "draft post"
def test_resolve_reference_accepts_name_and_slug(self):
assert self.manager.resolve_reference("Content Writer") == "content"
assert self.manager.resolve_reference("content-writer") == "content"
def test_resolve_tag_no_tag(self):
assert self.manager.resolve_tag("просто сообщение") is None
def test_resolve_tag_unknown(self):
assert self.manager.resolve_tag("@unknown что-то") is None
def test_strip_tag_from_message(self):
assert self.manager.strip_tag("@researcher найди тренды AI") == "найди тренды AI"
def test_list_all_personas_summary(self):
summary = self.manager.get_team_summary()
assert "researcher" in summary
assert "Content Writer" in summary
def test_list_shared_files(self):
self.manager.ensure_dirs()
shared = self.manager.get_shared_dir("researcher")
with open(os.path.join(shared, "report.md"), "w") as f:
f.write("# Report")
files = self.manager.list_shared_files("researcher")
assert "report.md" in files
def test_all_personas_property(self):
assert len(self.manager.all_personas) == 3
def test_empty_personas(self):
mgr = PersonaManager(working_dir=self.tmpdir, personas=[])
assert mgr.get_coordinator() is None
assert mgr.resolve_tag("@test hi") is None
assert mgr.all_personas == []