Files
odysseus/tests/test_chat_upload_limit_config.py
T

65 lines
2.1 KiB
Python

import io
import pytest
from fastapi import HTTPException, UploadFile
from src.chat_helpers import validate_file_upload
from src.upload_handler import UploadHandler
from src.upload_limits import (
DEFAULT_CHAT_UPLOAD_MAX_BYTES,
get_chat_upload_max_bytes,
read_byte_limit_env,
)
def _upload(name: str, data: bytes) -> UploadFile:
return UploadFile(filename=name, file=io.BytesIO(data))
def test_chat_upload_limit_defaults_to_10mb(monkeypatch):
monkeypatch.delenv("ODYSSEUS_CHAT_UPLOAD_MAX_BYTES", raising=False)
assert get_chat_upload_max_bytes() == DEFAULT_CHAT_UPLOAD_MAX_BYTES
def test_chat_upload_limit_uses_env_bytes(monkeypatch):
monkeypatch.setenv("ODYSSEUS_CHAT_UPLOAD_MAX_BYTES", "12345")
assert get_chat_upload_max_bytes() == 12345
def test_chat_upload_limit_rejects_invalid_env(monkeypatch):
monkeypatch.setenv("ODYSSEUS_CHAT_UPLOAD_MAX_BYTES", "not-bytes")
with pytest.raises(ValueError, match="ODYSSEUS_CHAT_UPLOAD_MAX_BYTES"):
get_chat_upload_max_bytes()
def test_read_byte_limit_env_rejects_non_positive(monkeypatch):
monkeypatch.setenv("ODYSSEUS_CHAT_UPLOAD_MAX_BYTES", "0")
with pytest.raises(ValueError, match="greater than 0"):
read_byte_limit_env("ODYSSEUS_CHAT_UPLOAD_MAX_BYTES", 10)
def test_validate_file_upload_uses_configured_chat_limit(monkeypatch):
monkeypatch.setenv("ODYSSEUS_CHAT_UPLOAD_MAX_BYTES", "4")
with pytest.raises(HTTPException) as exc:
validate_file_upload(_upload("too-large.txt", b"abcde"))
assert exc.value.status_code == 400
assert exc.value.detail["error"] == "FILE_TOO_LARGE"
assert exc.value.detail["message"] == "File size exceeds 4 bytes limit"
def test_upload_handler_uses_configured_chat_limit(monkeypatch, tmp_path):
monkeypatch.setenv("ODYSSEUS_CHAT_UPLOAD_MAX_BYTES", "4")
handler = UploadHandler(base_dir=str(tmp_path), upload_dir=str(tmp_path / "uploads"))
with pytest.raises(HTTPException) as exc:
handler.save_upload(_upload("too-large.txt", b"abcde"), client_ip="127.0.0.1")
assert exc.value.status_code == 400
assert exc.value.detail == "File size exceeds 4 bytes limit"