[drf | token] Build a Backend REST API - 25

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

인증을 위한 토큰 생성 API🥺

이번 시간은 로그인 이후 토큰 생성을 위한 API를 만들어 볼텐데요.
테스트는 4개 만들어 볼게요.

  • test_create_token_for_user
  • test_create_token_invailid_credentials(self):
  • test_create_token_no_user
  • test_create_token_missing_field

setup url

test_user_api.py 파일에 상수를 만들게요.

TOKEN_URL = reverse('user':'token')

HTTP POST요청시 생성할 토큰 URL이에요

test - 1😏

정상적으로 가입했을때 200 OK SIGN이 뜨게 만들게요.

payload 변수를 만들고 헬퍼 펑션을 이용해서 페이로드를 인자로 넣어 테스트디비에 후딱 데이터를 저장합니다.
그리고 클라이언트객테에서 포스트를 날리는데요. 이때 TOKEN_URL, payload를 인자로 넣고 res를 다시 객체변수로 받아요.

마무리로 assertIn 메서드를 통해서 HTTP request이후 response body에 (res.data)에 token키가 있는지 없는지 확인하겠습니다.
또한 status_code역시 assertEqual를 통해서 200이 떳는지 안떳는지 assertEqual을 통해서 비교합니당~

    def test_create_token_for_user(self):
        """Test that a token is created for the user"""
        payload = {'email': 'test@testtest.com', 'password': 'testpass'}
        create_user(**payload)
        res = self.client.post(TOKEN_URL, payload)

        self.assertIn('token', res.data)
        self.assertEqual(res.status_code, status.HTTP_200_OK)

test 2~4

오류 테스트가 상대적으로 비교하자면 더~중요하겠조?
아래와 같이 다시 작성해요.

    def test_create_token_invailid_credentials(self):
        """Test that token is not created if invalid credentials are given"""
        create_user(email='test@testtest.com', password='testpass')
        payload = {'email': 'test@testtest.com', 'password': 'wrong'}
        res = self.client.post(TOKEN_URL, payload)

        self.assertNotIn('token', res.data)
        self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)

    def test_create_token_no_user(self):
        """Test that token is not created if user doesn't exist"""
        payload = {'email': 'test@testtest.com', 'password': 'testpass'}
        res = self.client.post(TOKEN_URL, payload)
        self.assertNotIn('token', res.data)
        self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)

    def test_create_token_missing_field(self):
        """Test that email and password are required"""
        payload = {'email': 'one', 'password': ''}
        res = self.client.post(TOKEN_URL, payload)
        self.assertNotIn('token', res.data)
        self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)

이외에도 다른 테스트가 생각나거나 필요하다면 추가해서 validation 테스트를 할 수 있어요.

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

0개의 댓글