Add tests

This commit is contained in:
Yurii Motov 2025-12-03 22:28:15 +01:00
parent 72454fd83b
commit 6b670a9d77
1 changed files with 89 additions and 0 deletions

View File

@ -0,0 +1,89 @@
from typing import List
from fastapi import FastAPI, File, UploadFile
from fastapi.testclient import TestClient
app = FastAPI()
@app.post("/", form_max_files=2, form_max_part_size=1024, form_max_fields=2)
async def upload_files(files: List[UploadFile] = File(...)):
return {"filenames": [file.filename for file in files]}
def test_form_max_files_send_one():
client = TestClient(app)
response = client.post(
"/",
files=[
("files", ("file1.txt", b"file1 content", "text/plain")),
],
)
assert response.status_code == 200, response.text
assert response.json() == {"filenames": ["file1.txt"]}
def test_form_max_files_send_too_many():
client = TestClient(app)
response = client.post(
"/",
files=[
("files", ("file1.txt", b"file1 content", "text/plain")),
("files", ("file2.txt", b"file2 content", "text/plain")),
("files", ("file3.txt", b"file3 content", "text/plain")),
],
)
assert response.status_code == 400, response.text
assert response.json() == {
"detail": "Too many files. Maximum number of files is 2."
}
def test_max_part_size_exceeds_custom_limit():
client = TestClient(app)
boundary = "------------------------4K1ON9fZkj9uCUmqLHRbbR"
multipart_data = (
f"--{boundary}\r\n"
f'Content-Disposition: form-data; name="small"\r\n\r\n'
"small content\r\n"
f"--{boundary}\r\n"
f'Content-Disposition: form-data; name="large"\r\n\r\n'
+ ("x" * 1024 * 10 + "x") # 1MB + 1 byte of data
+ "\r\n"
f"--{boundary}--\r\n"
).encode("utf-8")
headers = {
"Content-Type": f"multipart/form-data; boundary={boundary}",
"Transfer-Encoding": "chunked",
}
response = client.post("/", content=multipart_data, headers=headers)
assert response.status_code == 400
assert response.text == '{"detail":"Part exceeded maximum size of 1KB."}'
def test_form_max_fields_exceeds_limit():
client = TestClient(app)
response = client.post(
"/",
files=[("files", ("file1.txt", b"file1 content", "text/plain"))],
data={
"field1": "value1",
"field2": "value2",
"field3": "value3",
"field4": "value4",
},
)
assert response.status_code == 400, response.text
assert response.json() == {
"detail": "Too many fields. Maximum number of fields is 2."
}