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