""" اختبارات فاحص البيانات الحساسة """ import pytest import sys from pathlib import Path PROJECT_ROOT = Path(__file__).parent.parent.resolve() if str(PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(PROJECT_ROOT)) class TestSensitiveDataScanner: """اختبارات فاحص البيانات الحساسة.""" def test_import(self): """اختبار استيراد الفاحص.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner assert SensitiveDataScanner is not None def test_initialization(self): """اختبار التهيئة.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner() assert scanner is not None def test_scan_clean_text(self): """اختبار فحص نص نظيف.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text("Hello World, this is a clean text.") assert result["sensitive_data_found"] is False assert result["total_entities"] == 0 assert result["risk_level"] == "none" def test_scan_email(self): """اختبار كشف البريد الإلكتروني.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text("Contact me at test@example.com please.") assert result["sensitive_data_found"] is True assert result["total_entities"] >= 1 entity_types = [e["type"] for e in result["entities"]] assert "EMAIL_ADDRESS" in entity_types def test_scan_credit_card(self): """اختبار كشف بطاقة الائتمانية.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text("Card: 4111-1111-1111-1111") assert result["sensitive_data_found"] is True def test_scan_phone(self): """اختبار كشف رقم الهاتف.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text("Call me at +1-234-567-8900") assert result["sensitive_data_found"] is True def test_scan_ip_address(self): """اختبار كشف عنوان IP.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text("Server at 192.168.1.1") assert result["sensitive_data_found"] is True def test_scan_api_key(self): """اختبار كشف مفتاح API.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text('api_key = "sk-1234567890abcdefghij"') assert result["sensitive_data_found"] is True def test_scan_multiple_entities(self, sensitive_text): """اختبار كشف كيانات متعددة.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text(sensitive_text) assert result["sensitive_data_found"] is True assert result["total_entities"] >= 3 def test_risk_level_critical(self): """اختبار مستوى خطورة حرج.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text("-----BEGIN RSA PRIVATE KEY-----") assert result["risk_level"] in ("critical", "high") def test_anonymize_text(self): """اختبار إخفاء البيانات الحساسة.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) text = "Email: test@example.com" anonymized = scanner.anonymize_text(text, mask_char="[HIDDEN]") assert "test@example.com" not in anonymized assert "[HIDDEN]" in anonymized def test_anonymize_empty(self): """اختبار إخفاء نص فارغ.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) assert scanner.anonymize_text("") == "" def test_add_custom_pattern(self): """اختبار إضافة نمط مخصص.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) scanner.add_custom_pattern( name="SYRIAN_PHONE", label="هاتف سوري", regex=r"09\d{8}", risk="medium", ) result = scanner.scan_text("Call 0912345678") assert result["sensitive_data_found"] is True def test_is_available(self): """اختبار فحص التوفر.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner() available = scanner.is_available() assert isinstance(available, dict) assert "presidio" in available assert "regex" in available def test_scan_empty_text(self): """اختبار فحص نص فارغ.""" from modules.security.sensitive_data_scanner import SensitiveDataScanner scanner = SensitiveDataScanner(use_presidio=False) result = scanner.scan_text("") assert result["sensitive_data_found"] is False