ميزة: إضافة خدمة تحليلات لتكامل Google Analytics اختبار: تحديث اختبارات خدمة واجهة برمجة التطبيقات (API) لتعكس تغييرات نقاط النهاية إصلاح: تعديل خدمة واجهة برمجة التطبيقات (API) لدعم تحميل ملفات متعددة ومصادقة المستخدم ميزة: تطبيق مخزن مصادقة باستخدام Zustand لإدارة المستخدمين إصلاح: تحسين إعدادات Nginx لتعزيز الأمان ودعم التحليلات
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
"""Tests for PDF compression Celery tasks."""
|
|
import io
|
|
from unittest.mock import MagicMock
|
|
|
|
|
|
class TestCompressTaskRoute:
|
|
def test_compress_pdf_no_file(self, client):
|
|
"""POST /api/compress/pdf without file should return 400."""
|
|
response = client.post('/api/compress/pdf')
|
|
assert response.status_code == 400
|
|
assert response.get_json()['error'] == 'No file provided.'
|
|
|
|
def test_compress_pdf_with_quality(self, client, monkeypatch):
|
|
"""Should accept quality parameter (low/medium/high)."""
|
|
mock_task = MagicMock()
|
|
mock_task.id = 'compress-task-id'
|
|
|
|
monkeypatch.setattr(
|
|
'app.routes.compress.validate_actor_file',
|
|
lambda f, allowed_types, actor: ('test.pdf', 'pdf'),
|
|
)
|
|
monkeypatch.setattr(
|
|
'app.routes.compress.generate_safe_path',
|
|
lambda ext, folder_type: ('compress-task-id', '/tmp/test.pdf'),
|
|
)
|
|
monkeypatch.setattr(
|
|
'app.routes.compress.compress_pdf_task.delay',
|
|
MagicMock(return_value=mock_task),
|
|
)
|
|
|
|
data = {
|
|
'file': (io.BytesIO(b'%PDF-1.4'), 'test.pdf'),
|
|
'quality': 'high',
|
|
}
|
|
response = client.post(
|
|
'/api/compress/pdf',
|
|
data=data,
|
|
content_type='multipart/form-data',
|
|
)
|
|
assert response.status_code == 202
|
|
assert response.get_json()['task_id'] == 'compress-task-id'
|
|
|
|
def test_compress_pdf_invalid_quality_defaults(self, client, monkeypatch):
|
|
"""Invalid quality should default to medium."""
|
|
mock_task = MagicMock()
|
|
mock_task.id = 'compress-default-id'
|
|
mock_delay = MagicMock(return_value=mock_task)
|
|
|
|
monkeypatch.setattr(
|
|
'app.routes.compress.validate_actor_file',
|
|
lambda f, allowed_types, actor: ('test.pdf', 'pdf'),
|
|
)
|
|
monkeypatch.setattr(
|
|
'app.routes.compress.generate_safe_path',
|
|
lambda ext, folder_type: ('id', '/tmp/test.pdf'),
|
|
)
|
|
monkeypatch.setattr(
|
|
'app.routes.compress.compress_pdf_task.delay',
|
|
mock_delay,
|
|
)
|
|
|
|
data = {
|
|
'file': (io.BytesIO(b'%PDF-1.4'), 'test.pdf'),
|
|
'quality': 'ultra', # invalid
|
|
}
|
|
response = client.post(
|
|
'/api/compress/pdf',
|
|
data=data,
|
|
content_type='multipart/form-data',
|
|
)
|
|
assert response.status_code == 202
|
|
# The route defaults invalid quality to "medium"
|
|
call_args = mock_delay.call_args[0]
|
|
assert call_args[3] == 'medium' |