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

import sys
import unittest
from pathlib import Path

# 부모 디렉토리를 경로에 추가
sys.path.insert(0, str(Path(__file__).parent.parent))

from security_patterns import RISK_LEVELS, VULNERABILITY_PATTERNS


class TestVulnerabilityPatterns(unittest.TestCase):
    """취약점 패턴 테스트"""

    def test_vulnerability_patterns_loaded(self):
        """취약점 패턴이 로드되었는지 확인"""
        self.assertEqual(len(VULNERABILITY_PATTERNS), 7)
        self.assertIn("SQL Injection", VULNERABILITY_PATTERNS)
        self.assertIn("XSS (Cross-Site Scripting)", VULNERABILITY_PATTERNS)
        self.assertIn("Hardcoded Secret", VULNERABILITY_PATTERNS)

    def test_vulnerability_patterns_structure(self):
        """각 패턴이 리스트 형태인지 확인"""
        for vuln_type, patterns in VULNERABILITY_PATTERNS.items():
            self.assertIsInstance(patterns, list, f"{vuln_type} should be a list")

    def test_vulnerability_pattern_types(self):
        """모든 취약점 타입이 존재하는지 확인"""
        expected_types = [
            "SQL Injection",
            "XSS (Cross-Site Scripting)",
            "Hardcoded Secret",
            "Code Injection",
            "Path Traversal",
            "Command Injection",
            "Insecure Dependencies",
        ]
        for vuln_type in expected_types:
            self.assertIn(vuln_type, VULNERABILITY_PATTERNS)


class TestRiskLevels(unittest.TestCase):
    """리스크 레벨 테스트"""

    def test_risk_levels_loaded(self):
        """리스크 레벨이 로드되었는지 확인"""
        self.assertEqual(len(RISK_LEVELS), 4)
        self.assertIn("low", RISK_LEVELS)
        self.assertIn("medium", RISK_LEVELS)
        self.assertIn("high", RISK_LEVELS)
        self.assertIn("critical", RISK_LEVELS)

    def test_risk_levels_order(self):
        """리스크 레벨 순서가 올바른지 확인"""
        self.assertEqual(RISK_LEVELS["low"], 0)
        self.assertEqual(RISK_LEVELS["medium"], 1)
        self.assertEqual(RISK_LEVELS["high"], 2)
        self.assertEqual(RISK_LEVELS["critical"], 3)

    def test_risk_levels_values(self):
        """리스크 레벨 값이 정수인지 확인"""
        for level, value in RISK_LEVELS.items():
            self.assertIsInstance(value, int)


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