WAHBi-AI-V2 / tests /test_document_processor.py
EGYADMIN's picture
Create tests/test_document_processor.py
66fa3e6 verified
raw
history blame
4.82 kB
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):
"""
اختبار استخراج معلومات المحتوى المحلي
"""