diff --git a/v2/src/blog/urls.py b/v2/src/blog/urls.py index e69de29..e9a58e0 100644 --- a/v2/src/blog/urls.py +++ b/v2/src/blog/urls.py @@ -0,0 +1,5 @@ +from django.urls import path + +from . import views + +urlpatterns = [path("posts/", views.PostDetailUpdateDelete.as_view(), name="post_detail_update_delete")] diff --git a/v2/src/blog/views.py b/v2/src/blog/views.py index e69de29..bab11cb 100644 --- a/v2/src/blog/views.py +++ b/v2/src/blog/views.py @@ -0,0 +1,16 @@ +from rest_framework import status +from rest_framework.response import Response +from rest_framework.views import APIView + +from .models import Post +from .serializers import PostSerializer + + +class PostDetailUpdateDelete(APIView): + def get(self, request, post_id): + try: + post = Post.objects.get(pk=post_id) + except Post.DoesNotExist: + return Response({"message": "Post를 찾을 수 없습니다"}, status=status.HTTP_404_NOT_FOUND) + + return Response({"post": PostSerializer(post).data}) diff --git a/v2/src/tests/post/test_post.py b/v2/src/tests/post/test_post.py index 0336f47..59d6717 100644 --- a/v2/src/tests/post/test_post.py +++ b/v2/src/tests/post/test_post.py @@ -1,10 +1,10 @@ -# import json +import json from blog.models import Post from django.contrib.auth.models import User from django.test import TestCase - -# from django.urls import reverse +from django.urls import reverse +from rest_framework import status class TestPostMixin: @@ -20,6 +20,35 @@ def _create_author(username, password): return User.objects.create_superuser(username=username, password=password) -class Test(TestPostMixin, TestCase): - def test_temp(self): - self.assertEqual(1, 1) +class TestPostDetail(TestPostMixin, TestCase): + def setUp(self): + super().setUp() + + def test_post_detail(self): + # Given: post가 생성되었을 때 + post = self._create_post(author=self.author, title="test title", text="test text") + post.publish() + + # When: 생성된 post의 id를 인자로 담아 api를 실행 + response = self.client.get(reverse("post_detail_update_delete", kwargs={"post_id": 1})) + + # Then: 상태코드 200 + self.assertEqual(response.status_code, status.HTTP_200_OK) + + # And: 생성된 post의 정보와 일치. + response_data = json.loads(response.content)["post"] + self.assertEqual(response_data["author"], self.author.id) + self.assertEqual(response_data["title"], "test title") + self.assertEqual(response_data["text"], "test text") + + def test_post_detail_on_error_with_404_not_found(self): + # Given: post가 없을 때 (잘못된 post id) + # When: 생성된 post의 id를 인자로 담아 api를 실행 + response = self.client.get(reverse("post_detail_update_delete", kwargs={"post_id": 1})) + + # Then: 상태코드 404 + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + # And: "Post를 찾을 수 없습니다" 메세지 리턴. + response_data = json.loads(response.content)["message"] + self.assertEqual(response_data, "Post를 찾을 수 없습니다")