43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from tests.fixtures import make_test_png
|
|
from tests.helpers import register_verify_login
|
|
|
|
|
|
def test_upload_avatar_success(client):
|
|
headers = register_verify_login(client, "avatar@example.com")
|
|
response = client.post(
|
|
"/api/v1/users/me/avatar",
|
|
headers=headers,
|
|
files={"file": ("avatar.png", make_test_png(), "image/png")},
|
|
)
|
|
assert response.status_code == 200
|
|
avatar_url = response.json()["profile"]["avatar_url"]
|
|
assert avatar_url.startswith("/api/v1/media/files/avatars/")
|
|
|
|
media = client.get(avatar_url)
|
|
assert media.status_code == 200
|
|
assert media.headers["content-type"].startswith("image/")
|
|
|
|
|
|
def test_upload_avatar_rejects_svg(client):
|
|
headers = register_verify_login(client, "svg@example.com")
|
|
svg = b"<svg xmlns='http://www.w3.org/2000/svg'><rect width='10' height='10'/></svg>"
|
|
response = client.post(
|
|
"/api/v1/users/me/avatar",
|
|
headers=headers,
|
|
files={"file": ("avatar.svg", svg, "image/svg+xml")},
|
|
)
|
|
assert response.status_code == 400
|
|
assert response.json()["detail"] in {"INVALID_MIME", "INVALID_IMAGE"}
|
|
|
|
|
|
def test_upload_avatar_rejects_oversize(client):
|
|
headers = register_verify_login(client, "big@example.com")
|
|
oversized = make_test_png() + b"0" * (2 * 1024 * 1024)
|
|
response = client.post(
|
|
"/api/v1/users/me/avatar",
|
|
headers=headers,
|
|
files={"file": ("big.png", oversized, "image/png")},
|
|
)
|
|
assert response.status_code == 400
|
|
assert response.json()["detail"] == "FILE_TOO_LARGE"
|