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): """ اختبار استخراج معلومات المحتوى المحلي """