test_upload_validate.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import pytest
  2. from app.core.response import AppHTTPError
  3. from app.core.upload_validate import validate_upload, validate_image_upload
  4. PNG = b"\x89PNG\r\n\x1a\n" + b"\x00" * 16
  5. JPEG = b"\xff\xd8\xff" + b"\x00" * 16
  6. PDF = b"%PDF-1.4" + b"\x00" * 16
  7. EXE_MZ = b"MZ" + b"\x00" * 64
  8. def test_rejects_exe_extension():
  9. with pytest.raises(AppHTTPError) as ei:
  10. validate_upload("malware.exe", EXE_MZ)
  11. assert ei.value.status_code == 400
  12. def test_rejects_png_extension_with_exe_magic():
  13. with pytest.raises(AppHTTPError) as ei:
  14. validate_upload("fake.png", EXE_MZ)
  15. assert ei.value.status_code == 400
  16. assert "类型" in ei.value.message or "格式" in ei.value.message or "内容" in ei.value.message
  17. def test_accepts_real_png():
  18. validate_upload("a.png", PNG)
  19. def test_accepts_jpeg_and_pdf():
  20. validate_upload("a.jpg", JPEG)
  21. validate_upload("a.pdf", PDF)
  22. def test_image_upload_rejects_pdf():
  23. with pytest.raises(AppHTTPError):
  24. validate_image_upload("x.pdf", PDF)
  25. def test_image_upload_accepts_png():
  26. validate_image_upload("x.png", PNG)