Spaces:
Paused
Paused
File size: 4,818 Bytes
66fa3e6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
import os
import sys
import unittest
from datetime import datetime
import tempfile
# إضافة المسار الرئيسي للمشروع إلى PATH
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# استيراد الوحدات المراد اختبارها
from modules.document_processor import DocumentProcessor
class TestDocumentProcessor(unittest.TestCase):
"""
اختبارات وحدة لمعالج المستندات
"""
def setUp(self):
"""
إعداد بيئة الاختبار
"""
self.document_processor = DocumentProcessor()
# إنشاء ملفات اختبار مؤقتة
self.temp_files = {}
# إنشاء ملف نصي للاختبار
with tempfile.NamedTemporaryFile(suffix=".txt", delete=False) as tmp:
tmp.write("""
مناقصة لإنشاء مبنى إداري
المتطلبات:
1. يجب أن تكون الشركة مصنفة في مجال المباني الدرجة الثانية على الأقل
2. خبرة لا تقل عن 10 سنوات في مجال إنشاء المباني الإدارية
3. تنفيذ 3 مشاريع مماثلة خلال الخمس سنوات الماضية
المحتوى المحلي:
يجب ألا تقل نسبة المحتوى المحلي عن 40% من إجمالي قيمة المشروع
التكلفة التقديرية: 15,000,000 ريال سعودي
المدة: 24 شهر
تاريخ البدء: 01/01/2024
""".encode('utf-8'))
self.temp_files["txt"] = tmp.name
def tearDown(self):
"""
تنظيف بيئة الاختبار
"""
# حذف الملفات المؤقتة
for file_path in self.temp_files.values():
if os.path.exists(file_path):
os.remove(file_path)
def test_process_txt_document(self):
"""
اختبار معالجة ملف نصي
"""
# قراءة محتوى الملف
with open(self.temp_files["txt"], 'rb') as f:
file_content = f.read()
# معالجة الملف
result = self.document_processor.process_document(
file_content,
"txt",
"test_document.txt"
)
# التحقق من النتائج
self.assertIn("text", result)
self.assertIn("file_name", result)
self.assertEqual(result["file_name"], "test_document.txt")
self.assertEqual(result["file_type"], "txt")
# التحقق من استخراج النص
self.assertIn("مناقصة لإنشاء مبنى إداري", result["text"])
# التحقق من استخراج المتطلبات
self.assertIn("requirements", result)
requirements = result.get("requirements", [])
self.assertGreaterEqual(len(requirements), 1)
# التحقق من استخراج المحتوى المحلي
self.assertIn("local_content", result)
local_content = result.get("local_content", {})
self.assertIn("percentages", local_content)
# التحقق من استخراج البيانات المالية
self.assertIn("financial_data", result)
financial_data = result.get("financial_data", {})
self.assertIn("total_cost", financial_data)
# التحقق من استخراج التواريخ
self.assertIn("dates", result)
dates = result.get("dates", [])
self.assertGreaterEqual(len(dates), 1)
def test_extract_requirements(self):
"""
اختبار استخراج المتطلبات
"""
test_text = """
المتطلبات الفنية:
1. يجب أن يكون المقاول مصنفاً في مجال المباني الدرجة الأولى
2. خبرة لا تقل عن 15 سنة
المتطلبات المالية:
1. ملاءة مالية لا تقل عن 10 مليون ريال
"""
requirements = self.document_processor._extract_requirements(test_text)
# التحقق من النتائج
self.assertGreaterEqual(len(requirements), 2)
# التحقق من تصنيف المتطلبات
categories = set(req["category"] for req in requirements)
self.assertIn("فنية", categories)
def test_extract_local_content_info(self):
"""
اختبار استخراج معلومات المحتوى المحلي
"""
|