Skip to content

Commit 41af895

Browse files
committed
- src/tests/test_movie_router.py
- add test_api_register_movie_poster_image() - add test_api_register_movie_poster_image_when_movie_has_profile_image_url()
1 parent ff81ed5 commit 41af895

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

src/tests/test_movie_router.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
import os.path
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.movies import Movie
10+
from src.tests.utils.fake_file import fake_image
711

812

913
class TestMovieRouter(TestCase):
@@ -212,3 +216,101 @@ async def test_api_delete_movie_when_movie_id_is_invalid(self) -> None:
212216

213217
# then
214218
assert response.status_code == status.HTTP_404_NOT_FOUND
219+
220+
async def test_api_register_movie_poster_image(self) -> None:
221+
# given
222+
async with httpx.AsyncClient(transport=httpx.ASGITransport(app=app), base_url="http://test") as client:
223+
create_response = await client.post(
224+
"/movies",
225+
json={
226+
"title": "test",
227+
"plot": "test 중 입니다.",
228+
"cast": [
229+
{"name": "lee2", "age": 23, "agency": "A actors", "gender": "male"},
230+
{"name": "lee3", "age": 24, "agency": "B actors", "gender": "male"},
231+
],
232+
"playtime": 240,
233+
"genre": "SF",
234+
},
235+
)
236+
movie_id = create_response.json()["id"]
237+
238+
# when
239+
response = await client.post(
240+
f"/movies/{movie_id}/poster_image",
241+
files={"image": ((image := "test_image.png"), fake_image(), "image/png")},
242+
)
243+
244+
# then
245+
assert response.status_code == status.HTTP_200_OK
246+
response_json = response.json()
247+
248+
assert f"movies/poster_images/{image.rsplit(".")[0]}" in response_json["poster_image_url"]
249+
assert image.rsplit(".")[1] in response_json["poster_image_url"]
250+
251+
movie = await Movie.get(id=movie_id)
252+
assert response_json["poster_image_url"] == movie.poster_image_url
253+
254+
saved_file_path = os.path.join(config.MEDIA_DIR, movie.poster_image_url)
255+
# 파일이 저장되었는지 확인
256+
assert os.path.exists(saved_file_path)
257+
258+
# 리소스 정리
259+
os.remove(saved_file_path)
260+
261+
async def test_api_register_movie_poster_image_when_movie_has_profile_image_url(self) -> None:
262+
# given
263+
async with httpx.AsyncClient(transport=httpx.ASGITransport(app=app), base_url="http://test") as client:
264+
create_response = await client.post(
265+
"/movies",
266+
json={
267+
"title": "test",
268+
"plot": "test 중 입니다.",
269+
"cast": [
270+
{"name": "lee2", "age": 23, "agency": "A actors", "gender": "male"},
271+
{"name": "lee3", "age": 24, "agency": "B actors", "gender": "male"},
272+
],
273+
"playtime": 240,
274+
"genre": "SF",
275+
},
276+
)
277+
movie_id = create_response.json()["id"]
278+
279+
await client.post(
280+
f"/movies/{movie_id}/poster_image",
281+
files={"image": ("test_image.png", fake_image(), "image/png")},
282+
)
283+
284+
movie = await Movie.get(id=movie_id)
285+
prev_image_url = movie.poster_image_url
286+
287+
# 첫번째 파일이 저장되었는지 확인
288+
first_file_path = os.path.join(config.MEDIA_DIR, prev_image_url)
289+
assert os.path.exists(first_file_path)
290+
291+
# when
292+
response = await client.post(
293+
f"/movies/{movie_id}/poster_image",
294+
files={"image": ((second_image := "test_image2.png"), fake_image(), "image/png")},
295+
)
296+
# then
297+
assert response.status_code == status.HTTP_200_OK
298+
response_json = response.json()
299+
300+
# 파일경로와 확장자가 응답으로 반환된 poster_image_url에 포함되어 있는지 확인
301+
assert f"movies/poster_images/{second_image.rsplit(".")[0]}" in response_json["poster_image_url"]
302+
assert second_image.rsplit(".")[1] in response_json["poster_image_url"]
303+
304+
await movie.refresh_from_db()
305+
# 응답과 Movie객체에 저장된 profile_image_url이 같은지 확인
306+
assert response_json["poster_image_url"] == movie.poster_image_url
307+
308+
# 두번째로 등록한 파일이 저장되었는지 확인
309+
second_file_path = os.path.join(config.MEDIA_DIR, movie.poster_image_url)
310+
assert os.path.exists(second_file_path)
311+
312+
# 첫번째로 등록한 파일이 삭제가 되었는지 확인
313+
assert not os.path.exists(first_file_path)
314+
315+
# 리소스 정리
316+
os.remove(second_file_path)

0 commit comments

Comments
 (0)