"""
test_validate_composite.py

_validate_composite_teams() 단위 테스트 (아르고스 작성)
"""

import os
import sys
from pathlib import Path

import pytest

_WORKSPACE = Path(os.environ.get("WORKSPACE_ROOT", "/home/jay/workspace"))
if str(_WORKSPACE) not in sys.path:
    sys.path.insert(0, str(_WORKSPACE))

from dispatch import _validate_composite_teams


class TestValidateCompositeTeams:
    """_validate_composite_teams() 유효성 검증 테스트"""

    def test_valid_two_teams(self):
        result = _validate_composite_teams("marketing,design")
        assert result == ["marketing", "design"]

    def test_valid_three_teams(self):
        result = _validate_composite_teams("marketing,design,consulting")
        assert result == ["marketing", "design", "consulting"]

    def test_valid_with_spaces(self):
        result = _validate_composite_teams("marketing , design")
        assert result == ["marketing", "design"]

    def test_single_team_raises(self):
        with pytest.raises(ValueError, match="2개 이상"):
            _validate_composite_teams("marketing")

    def test_empty_string_raises(self):
        with pytest.raises(ValueError, match="2개 이상"):
            _validate_composite_teams("")

    def test_consecutive_commas(self):
        """연속 쉼표는 빈 토큰 필터링 후 팀 수 검증"""
        with pytest.raises(ValueError, match="2개 이상"):
            _validate_composite_teams(",,,marketing,,,")

    def test_four_teams_exceeds_max(self):
        with pytest.raises(ValueError, match="최대"):
            _validate_composite_teams("marketing,design,consulting,publishing")

    def test_unknown_team_raises(self):
        with pytest.raises(ValueError, match="알 수 없는 팀 ID"):
            _validate_composite_teams("marketing,unknown_team")

    def test_dev_team_not_allowed(self):
        with pytest.raises(ValueError, match="알 수 없는 팀 ID"):
            _validate_composite_teams("marketing,dev1-team")

    def test_duplicate_teams_raises(self):
        with pytest.raises(ValueError, match="중복"):
            _validate_composite_teams("marketing,marketing")

    def test_returns_list(self):
        result = _validate_composite_teams("consulting,publishing")
        assert isinstance(result, list)
        assert len(result) == 2
