feat: Funcion de sistema tenants

This commit is contained in:
2026-02-23 13:01:24 -07:00
parent ceea67eb2b
commit 1ccc39732b
58 changed files with 1889 additions and 315 deletions

View File

@@ -0,0 +1,80 @@
"""Unit Tests - FileHandler - ServiceManagerWeb
Tests para app.core.file_handler.FileHandler.
"""
import io
import uuid
import tempfile
import pytest
from fastapi import UploadFile
from fastapi import HTTPException
@pytest.mark.asyncio
async def test_save_upload_pdf_valid_streaming():
from app.core.file_handler import FileHandler, settings
with tempfile.TemporaryDirectory() as tmp:
settings.UPLOAD_PATH = tmp
handler = FileHandler()
tenant_id = uuid.uuid4()
ticket_id = uuid.uuid4()
content = b"%PDF-1.7\n%\xe2\xe3\xcf\xd3\n1 0 obj\n<<>>\nendobj\n"
up = UploadFile(filename="test.pdf", file=io.BytesIO(content))
meta = await handler.save_upload(up, tenant_id=tenant_id, ticket_id=ticket_id)
assert meta["file_size"] == len(content)
assert meta["original_filename"] == "test.pdf"
assert meta["filename"].endswith(".pdf")
assert meta["md5_hash"]
assert meta["sha256_hash"]
@pytest.mark.asyncio
async def test_save_upload_pdf_invalid_magic_bytes_rejected():
from app.core.file_handler import FileHandler, settings
with tempfile.TemporaryDirectory() as tmp:
settings.UPLOAD_PATH = tmp
handler = FileHandler()
up = UploadFile(filename="bad.pdf", file=io.BytesIO(b"NOTPDF"))
with pytest.raises(HTTPException) as exc:
await handler.save_upload(up, tenant_id=uuid.uuid4(), ticket_id=uuid.uuid4())
assert exc.value.status_code == 400
@pytest.mark.asyncio
async def test_save_upload_oversize_rejected_and_file_removed():
from app.core.file_handler import FileHandler, settings
with tempfile.TemporaryDirectory() as tmp:
settings.UPLOAD_PATH = tmp
settings.MAX_UPLOAD_SIZE_MB = 0 # 0MB => max 0 bytes
handler = FileHandler()
up = UploadFile(filename="a.txt", file=io.BytesIO(b"x"))
with pytest.raises(HTTPException) as exc:
await handler.save_upload(up, tenant_id=uuid.uuid4(), ticket_id=uuid.uuid4())
assert exc.value.status_code == 413
def test_get_file_path_prevents_path_traversal():
from app.core.file_handler import FileHandler, settings
with tempfile.TemporaryDirectory() as tmp:
settings.UPLOAD_PATH = tmp
handler = FileHandler()
with pytest.raises(HTTPException) as exc:
handler.get_file_path("../../etc/passwd")
assert exc.value.status_code == 403