WitNote / tests /test_manager.py
harvesthealth's picture
Upload folder using huggingface_hub
f7044f4 verified
"""Tests for clawteam.team.manager — TeamManager lifecycle operations."""
import pytest
from clawteam.team.manager import TeamManager
from clawteam.team.models import get_data_dir
class TestCreateTeam:
def test_create_basic(self, team_name):
cfg = TeamManager.create_team(
name=team_name,
leader_name="lead",
leader_id="abc123",
description="Test team",
)
assert cfg.name == team_name
assert cfg.lead_agent_id == "abc123"
assert len(cfg.members) == 1
assert cfg.members[0].name == "lead"
assert cfg.members[0].agent_type == "leader"
def test_create_sets_up_directories(self, team_name):
TeamManager.create_team(name=team_name, leader_name="l", leader_id="x")
data = get_data_dir()
# leader inbox
assert (data / "teams" / team_name / "inboxes" / "l").is_dir()
# tasks dir
assert (data / "tasks" / team_name).is_dir()
def test_create_with_user_prefix(self, team_name):
TeamManager.create_team(
name=team_name, leader_name="lead", leader_id="x", user="bob"
)
data = get_data_dir()
# inbox should be user_name format
assert (data / "teams" / team_name / "inboxes" / "bob_lead").is_dir()
def test_create_duplicate_raises(self, team_name):
TeamManager.create_team(name=team_name, leader_name="a", leader_id="1")
with pytest.raises(ValueError, match="already exists"):
TeamManager.create_team(name=team_name, leader_name="b", leader_id="2")
class TestGetTeam:
def test_get_existing(self, team_name):
TeamManager.create_team(name=team_name, leader_name="l", leader_id="x")
cfg = TeamManager.get_team(team_name)
assert cfg is not None
assert cfg.name == team_name
def test_get_nonexistent(self):
assert TeamManager.get_team("ghost-team") is None
class TestAddMember:
def test_add_member(self, team_name):
TeamManager.create_team(name=team_name, leader_name="lead", leader_id="1")
member = TeamManager.add_member(team_name, "worker", agent_id="2")
assert member.name == "worker"
assert member.agent_type == "general-purpose"
cfg = TeamManager.get_team(team_name)
assert len(cfg.members) == 2
def test_add_member_creates_inbox(self, team_name):
TeamManager.create_team(name=team_name, leader_name="lead", leader_id="1")
TeamManager.add_member(team_name, "worker", agent_id="2")
data = get_data_dir()
assert (data / "teams" / team_name / "inboxes" / "worker").is_dir()
def test_add_member_with_user(self, team_name):
TeamManager.create_team(name=team_name, leader_name="lead", leader_id="1")
TeamManager.add_member(team_name, "worker", agent_id="2", user="alice")
data = get_data_dir()
assert (data / "teams" / team_name / "inboxes" / "alice_worker").is_dir()
def test_add_duplicate_raises(self, team_name):
TeamManager.create_team(name=team_name, leader_name="lead", leader_id="1")
TeamManager.add_member(team_name, "worker", agent_id="2")
with pytest.raises(ValueError, match="already in team"):
TeamManager.add_member(team_name, "worker", agent_id="3")
def test_add_to_nonexistent_team(self):
with pytest.raises(ValueError, match="not found"):
TeamManager.add_member("nope", "worker", agent_id="x")
class TestRemoveMember:
def test_remove_existing(self, team_name):
TeamManager.create_team(name=team_name, leader_name="lead", leader_id="1")
TeamManager.add_member(team_name, "worker", agent_id="2")
assert TeamManager.remove_member(team_name, "worker") is True
cfg = TeamManager.get_team(team_name)
assert len(cfg.members) == 1
def test_remove_nonexistent_member(self, team_name):
TeamManager.create_team(name=team_name, leader_name="lead", leader_id="1")
assert TeamManager.remove_member(team_name, "ghost") is False
def test_remove_from_nonexistent_team(self):
assert TeamManager.remove_member("nope", "anyone") is False
class TestListMembers:
def test_list(self, team_name):
TeamManager.create_team(name=team_name, leader_name="lead", leader_id="1")
TeamManager.add_member(team_name, "w1", agent_id="2")
TeamManager.add_member(team_name, "w2", agent_id="3")
members = TeamManager.list_members(team_name)
names = {m.name for m in members}
assert names == {"lead", "w1", "w2"}
def test_list_nonexistent_team(self):
assert TeamManager.list_members("nope") == []
class TestDiscoverTeams:
def test_discover_multiple(self):
TeamManager.create_team(name="alpha", leader_name="a", leader_id="1")
TeamManager.create_team(name="beta", leader_name="b", leader_id="2")
teams = TeamManager.discover_teams()
names = {t["name"] for t in teams}
assert "alpha" in names
assert "beta" in names
def test_discover_empty(self):
# no teams created
teams = TeamManager.discover_teams()
assert teams == []
class TestGetLeader:
def test_get_leader_name(self, team_name):
TeamManager.create_team(name=team_name, leader_name="boss", leader_id="lead-id")
assert TeamManager.get_leader_name(team_name) == "boss"
def test_get_leader_inbox(self, team_name):
TeamManager.create_team(
name=team_name, leader_name="boss", leader_id="lead-id", user="joe"
)
assert TeamManager.get_leader_inbox(team_name) == "joe_boss"
def test_leader_of_nonexistent_team(self):
assert TeamManager.get_leader_name("nope") is None
assert TeamManager.get_leader_inbox("nope") is None
class TestInboxNameFor:
def test_without_user(self):
from clawteam.team.models import TeamMember
m = TeamMember(name="worker", agent_id="x")
assert TeamManager.inbox_name_for(m) == "worker"
def test_with_user(self):
from clawteam.team.models import TeamMember
m = TeamMember(name="worker", user="alice", agent_id="x")
assert TeamManager.inbox_name_for(m) == "alice_worker"
class TestCleanup:
def test_cleanup_removes_dirs(self, team_name):
TeamManager.create_team(name=team_name, leader_name="l", leader_id="x")
data = get_data_dir()
assert (data / "teams" / team_name).is_dir()
assert (data / "tasks" / team_name).is_dir()
result = TeamManager.cleanup(team_name)
assert result is True
assert not (data / "teams" / team_name).exists()
assert not (data / "tasks" / team_name).exists()
def test_cleanup_nonexistent_team(self):
assert TeamManager.cleanup("never-existed") is False