Skip to content

Commit ff81ed5

Browse files
committed
- src/tests/test_user_router.py
- add test_api_register_user_profile_image() - add test_api_register_user_profile_image_when_file_has_unavailable_extension()
1 parent 60f8f62 commit ff81ed5

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

src/tests/test_user_router.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1+
import os
2+
13
import httpx
24
from fastapi import status
35
from tortoise.contrib.test import TestCase
46

57
from main import app
8+
from src.configs import config
69
from src.models.users import GenderEnum, User
710
from src.services.auth import AuthService
811
from src.services.jwt import JWTService
12+
from src.tests.utils.fake_file import fake_image, fake_txt_file
13+
from src.utils.file import IMAGE_EXTENSIONS
914

1015

1116
class TestUserRouter(TestCase):
@@ -270,3 +275,70 @@ async def test_api_search_user_when_user_not_found(self) -> None:
270275

271276
# then
272277
assert response.status_code == status.HTTP_404_NOT_FOUND
278+
279+
async def test_api_register_user_profile_image(self) -> None:
280+
# given
281+
async with httpx.AsyncClient(transport=httpx.ASGITransport(app=app), base_url="http://test") as client:
282+
create_response = await client.post(
283+
url="/users",
284+
json={
285+
"username": "testuser",
286+
"password": (password := "password123"),
287+
"age": 20,
288+
"gender": GenderEnum.MALE,
289+
},
290+
)
291+
user_id = create_response.json()
292+
user = await User.get(id=user_id)
293+
294+
await client.post(url="/users/login", json={"username": user.username, "password": password})
295+
296+
# when
297+
response = await client.post(
298+
"/users/me/profile_image", files={"image": ((image := "test_image.png"), fake_image(), "image/png")}
299+
)
300+
301+
# then
302+
assert response.status_code == status.HTTP_200_OK
303+
response_json = response.json()
304+
305+
assert f"users/profile_images/{image.rsplit(".")[0]}" in response_json["profile_image_url"]
306+
assert image.rsplit(".")[1] in response_json["profile_image_url"]
307+
308+
await user.refresh_from_db()
309+
assert response_json["profile_image_url"] == user.profile_image_url
310+
311+
saved_file_path = os.path.join(config.MEDIA_DIR, user.profile_image_url)
312+
# 파일이 저장되었는지 확인
313+
assert os.path.exists(saved_file_path)
314+
315+
# 리소스 정리
316+
os.remove(saved_file_path)
317+
318+
async def test_api_register_user_profile_image_when_file_has_unavailable_extension(self) -> None:
319+
# given
320+
async with httpx.AsyncClient(transport=httpx.ASGITransport(app=app), base_url="http://test") as client:
321+
create_response = await client.post(
322+
url="/users",
323+
json={
324+
"username": "testuser",
325+
"password": (password := "password123"),
326+
"age": 20,
327+
"gender": GenderEnum.MALE,
328+
},
329+
)
330+
user_id = create_response.json()
331+
user = await User.get(id=user_id)
332+
333+
await client.post(url="/users/login", json={"username": user.username, "password": password})
334+
335+
# when
336+
response = await client.post(
337+
"/users/me/profile_image", files={"image": ("test_file.txt", fake_txt_file(), "text/plain")}
338+
)
339+
340+
# then
341+
assert response.status_code == status.HTTP_400_BAD_REQUEST
342+
response_json = response.json()
343+
344+
assert response_json["detail"] == f"not allowed extension. available extensions: {IMAGE_EXTENSIONS}"

0 commit comments

Comments
 (0)