DRF 5-15 이미지 없는 글 작성 테스트

Grace Goh·2022년 11월 16일
0

Django Rest Framework

목록 보기
31/36
# articles/test.py

from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
from users.models import User


class ArticleCreateTest(APITestCase):

    # setUp을 classmethod 사용해서 바꿔보기
    @classmethod
    def setUpTestData(cls): 
        cls.user_data = {'email':'hp@gmail.com', 'password':'hp'}
        cls.article_data = {'title':'hp', 'content':'hp is hp'}
        cls.user = User.objects.create_user('hp@gmail.com', 'hp')

    def setUp(self):
        self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']
        # 각 메서드를 실행할 때 토큰 받아오는 식으로 하게 된다.


    # def setUp(self):
    #     # 회원가입
    #     self.user_data = {'emaail':'hp@gmail.com', 'password':'hp'}
    #     self.article_data = {'title':'hp', 'content':'hp is hp'}
    #     self.user = User.objects.create_user('hp@gmail.com', 'hp')
    #     self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']


    # django manage.py test 실행하려면 파일명, 함수명 앞에 test 있어야 한다. 
    def test_fail_if_not_logged_in(self):
        url = reverse("article_view") # url 받아오기 (name으로)
        response = self.client.post(url, self.article_data) # url로 article_data 보내기
        # 클래스에 만든 것이 instance에 만들어지며 가져와졌기 때문에 이렇게 보낼 수 있다.
        self.assertEqual(response.status_code, 401)
        # status_code가 401인지 확인

    def test_create_article(self):
        response = self.client.post(
            # 순서대로 넣을 수도 있지만 keyword arguments로 넣을 수도 있다.
            path=reverse("article_view"), 
            data=self.article_data, # 동일
            HTTP_AUTHORIZATION=f"Bearer {self.access_token}" # setUp에서 받아온 access token 넣는다.
        )
        self.assertEqual(response.status_code, 200)
        # self.assertEqual(response.data["message"], "작성 완료")

# articles/views.py

from rest_framework.generics import get_object_or_404
from rest_framework.views import APIView
from rest_framework import status, permissions
from rest_framework.response import Response
from django.db.models.query_utils import Q
from articles.models import Article, Comment
from articles.serializers import ArticleSerializer, ArticleListSerializer, ArticleCreateSerializer, CommentSerializer, CommentCreateSerializer


class ArticleView(APIView):
    def get(self, request):
        articles = Article.objects.all() # 모든 걸 가져온다
        serializer = ArticleListSerializer(articles, many=True) # 복수
        return Response(serializer.data, status=status.HTTP_200_OK)

    def post(self, request):
        if not request.user.is_authenticated:
            return Response({'message':'로그인이 필요합니다'}, 401)
        # 먼저 serializer를 불러온다. () 안에 데이터를 저장한다.
        serializer = ArticleCreateSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(user=request.user)
            return Response(serializer.data)
            # return Response({'message':'작성 완료'})
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
profile
Español, Inglés, Coreano y Python

0개의 댓글