Align the project baseline with the latest admin interface styling and layout structure while documenting setup and usage updates in README.
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"
|