[drf | recipe] Build a Backend REST API - 30

Hyeseong·2021년 3월 6일
0
post-custom-banner

Add create tags feature🧝

test🧜‍♀

test_create_tag_successful 매서드를 마지막에 생성할게요.
tag 생성 요청을 클라이언트에 보낼거에요. 그리고 이후 response로 객체가 존재하는지 존재하지 않는지 테스트디비에서 filter를 통해 받아오고 이를 assertTrue를 통해서 확인하게되요.

self.user가 어디서 굴러 온 녀석인지 궁금 할 수 있는데요.
아래와 같이 우리가 이미 디비가 돌아가가전 setUp메서드에서 변수 선언을 일찌감치 해뒀어요.

class PrivateTagsApiTests(TestCase):
    """Test the authorized user tags API"""

    def setUp(self):
        self.user = get_user_model().objects.create_user(
            'test@testtest.com',
            'password123',
        )
    def test_create_tag_successful(self):
        """Test creating a new tag"""
        payload = {'name': 'Test tag'}
        self.client.post(TAGS_URL, payload)
        
        exists = Tag.objects.filter(
            user=self.user, name=payload['name']
        ).exists()
        self.assertTrue(exists)
        
    def test_create_tag_invalid(self):
        """Test creating a new tag with invalid payload"""
        payload = {'name':''}
        res = self.client.post(TAGS_URL, payload)
        self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)

하단의 test_create_tag_invalid 메서드는 test_create_tag_successful과는 반대로 400 error를 발생시키는건데요 name이라는 키에 값을 빈 상태로 둔채로 request요청을 post로 보낼 경우를 테스트하는거에요.

test 돌리기🧛‍♀

2 failure 발생합니다.

  • AssertionError: 405 != 400
  • AssertionError: False is not true

views🤶

mixins.CreateModelMixin 클래스를 TagViewSet클래스에 추가 상속해줄게요.

perform_create 메서드를 오버라이딩 해서 사용하기 위해서에요.
perfome_create에 대한 정보는 클릭해서 디테일한 정보를 확인할 수 있어요.

...

class TagViewSet(viewsets.GenericViewSet,
                 mixins.ListModelMixin,
                 mixins.CreateModelMixin):

    # override this method for CreateModelMixin
    # create operation is done here (unlike in UserModelSerializer)
    # because serializer does not have user
    # we pass user to serializer and save it
    def perform_create(self, serializer):
        """CREATE A NEW TAG"""
        serializer.save(user=self.request.user)

느낀점💁‍♀

Mixin클래스에 대한 구체적이고 세밀한 이해가 있어야 할 것 같아요. 추후 drf공식 문서를 몇번 쭉 훑어봐야할 필요성이 꼭꼭 느껴지네요.

profile
어제보다 오늘 그리고 오늘 보다 내일...
post-custom-banner

0개의 댓글