#!/usr/bin/env python3
"""base_reviewer.py 단위 테스트"""

import sys
import unittest
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent.parent))

from base_reviewer import ReviewerInterface


class MockReviewer(ReviewerInterface):
    """테스트용 목 리뷰어"""

    def review(self, doc):
        """간단한 구현"""
        issues = [{"severity": "low", "description": "test issue"}]
        return {
            "risk_level": self._assess_risk(issues),
            "issues": issues,
            "recommendation": self._get_recommendation(self._assess_risk(issues)),
        }


class TestBaseReviewer(unittest.TestCase):
    """Base Reviewer 테스트"""

    def setUp(self):
        """테스트 설정"""
        self.reviewer = MockReviewer()

    def test_assess_risk_low(self):
        """낮은 리스크 평가"""
        issues = []
        result = self.reviewer._assess_risk(issues)
        self.assertEqual(result, "low")

    def test_assess_risk_medium(self):
        """중간 리스크 평가"""
        issues = [{"severity": "medium", "description": "test"}]
        result = self.reviewer._assess_risk(issues)
        self.assertEqual(result, "medium")

    def test_assess_risk_high(self):
        """높은 리스크 평가"""
        issues = [{"severity": "high", "description": "test"}]
        result = self.reviewer._assess_risk(issues)
        self.assertEqual(result, "high")

    def test_assess_risk_critical(self):
        """심각한 리스크 평가"""
        issues = [{"severity": "critical", "description": "test"}]
        result = self.reviewer._assess_risk(issues)
        self.assertEqual(result, "critical")

    def test_get_recommendation(self):
        """리스크 레벨별 권장사항"""
        self.assertIn("낮은 위험", self.reviewer._get_recommendation("low"))
        self.assertIn("중간 위험", self.reviewer._get_recommendation("medium"))
        self.assertIn("높은 위험", self.reviewer._get_recommendation("high"))
        self.assertIn("심각한 위험", self.reviewer._get_recommendation("critical"))

    def test_review_returns_correct_structure(self):
        """리뷰 결과 구조 확인"""
        result = self.reviewer.review("test doc")
        self.assertIn("risk_level", result)
        self.assertIn("issues", result)
        self.assertIn("recommendation", result)


if __name__ == "__main__":
    unittest.main()
