- تنفيذ مكون ProcedureSelection لتمكين المستخدمين من اختيار الإجراءات من قائمة، وإدارة الاختيارات، ومعالجة الإجراءات المرفوضة. - إنشاء مكون StepProgress لعرض تقدم معالج متعدد الخطوات بشكل مرئي. - تعريف أنواع مشتركة للإجراءات، وخطوات التدفق، ورسائل الدردشة في ملف types.ts. - إضافة اختبارات وحدة لخطافات useFileUpload و useTaskPolling لضمان الأداء السليم ومعالجة الأخطاء. - تنفيذ اختبارات واجهة برمجة التطبيقات (API) للتحقق من تنسيقات نقاط النهاية وضمان اتساق ربط الواجهة الأمامية بالخلفية.
66 lines
2.5 KiB
Python
66 lines
2.5 KiB
Python
"""Tests for task status polling route."""
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
|
|
class TestTaskStatus:
|
|
def test_pending_task(self, client, monkeypatch):
|
|
"""Should return PENDING state for a queued task."""
|
|
mock_result = MagicMock()
|
|
mock_result.state = 'PENDING'
|
|
mock_result.info = None
|
|
|
|
with patch('app.routes.tasks.AsyncResult', return_value=mock_result):
|
|
response = client.get('/api/tasks/test-task-id/status')
|
|
|
|
assert response.status_code == 200
|
|
data = response.get_json()
|
|
assert data['task_id'] == 'test-task-id'
|
|
assert data['state'] == 'PENDING'
|
|
assert 'progress' in data
|
|
|
|
def test_processing_task(self, client, monkeypatch):
|
|
"""Should return PROCESSING state with step info."""
|
|
mock_result = MagicMock()
|
|
mock_result.state = 'PROCESSING'
|
|
mock_result.info = {'step': 'Converting page 3 of 10...'}
|
|
|
|
with patch('app.routes.tasks.AsyncResult', return_value=mock_result):
|
|
response = client.get('/api/tasks/processing-id/status')
|
|
|
|
assert response.status_code == 200
|
|
data = response.get_json()
|
|
assert data['state'] == 'PROCESSING'
|
|
assert data['progress'] == 'Converting page 3 of 10...'
|
|
|
|
def test_success_task(self, client, monkeypatch):
|
|
"""Should return SUCCESS state with result data."""
|
|
mock_result = MagicMock()
|
|
mock_result.state = 'SUCCESS'
|
|
mock_result.result = {
|
|
'status': 'completed',
|
|
'download_url': '/api/download/task-id/output.pdf',
|
|
'filename': 'output.pdf',
|
|
}
|
|
|
|
with patch('app.routes.tasks.AsyncResult', return_value=mock_result):
|
|
response = client.get('/api/tasks/success-id/status')
|
|
|
|
assert response.status_code == 200
|
|
data = response.get_json()
|
|
assert data['state'] == 'SUCCESS'
|
|
assert data['result']['status'] == 'completed'
|
|
assert 'download_url' in data['result']
|
|
|
|
def test_failure_task(self, client, monkeypatch):
|
|
"""Should return FAILURE state with error message."""
|
|
mock_result = MagicMock()
|
|
mock_result.state = 'FAILURE'
|
|
mock_result.info = Exception('Conversion failed due to corrupt PDF.')
|
|
|
|
with patch('app.routes.tasks.AsyncResult', return_value=mock_result):
|
|
response = client.get('/api/tasks/failed-id/status')
|
|
|
|
assert response.status_code == 200
|
|
data = response.get_json()
|
|
assert data['state'] == 'FAILURE'
|
|
assert 'error' in data |