카카오 소셜 로그인 unittest

from unittest.mock import MagicMock, patch
from django.test   import Client, TestCase

from .models       import User

class Test(TestCase):
    def setUp(self):
        User.objects.create(                       #(1)
            name          ='hyunwoo',
            kakao_id      = '123456',
            email         = '[email protected]',
            profile_image = "333222"
        )

    def tearDown(self):
        User.objects.all().delete()                #(2)

    @patch('users.views.requests')                 #(3)
    def test_kakao_social_login_success(self, mocked_request): #(4)
        client = Client()  #(5)

        class Kakao:       #(6)
            def json(self):#(7)
                return{
                    "id":"123456",
                    "properties": {"profile_image": "333222"},
                    "kakao_account":{
                        "profile": {"nickname" : "hyunwoo"},
                                    "email" : "[email protected]"}
                      }
        
        mocked_request.get = MagicMock(return_value=Kakao()) #(8)
        header             = {'HTTP_Authorization' : 'token'}  #(9)
        response           = client.get('/users/login', **header) #(10)

        self.assertEqual(response.status_code, 201)
        
    @patch("users.views.requests")
    def test_kakao_social_login_fail(self, mocked_request):
        client = Client()

        class kakao:
            def json(self):
                return{
                    "code":-101,
                    "msg":"NotRegisteredUserException"

                }
        
        mocked_request.get = MagicMock(return_value=kakao())
        header             = {'HTTP_Authorization' : 'token2'}
        response           = client.get('/users/login', **header)

        self.assertEquals(response.status_code, 401)
  1. 테스트할 가상의 테이블 내용들을 생성해준다.
  2. 테스트 이후 테이블의 내용을 지운다.
  3. users.views안에 있는 requests 호출을 진짜로 하지 않고 가짜로 하겠다는 뜻이다.
  4. test_로 시작하는 함수 안에 있는 것들만 테스트한다.
  5. 가짜로 데이터를 보내줄 클라이언트를 생성한다.
  6. 클래스 이름을 정해주고
  7. 그 값을 json 형태로 받겠다고 해준다.
  8. kakao class에 가짜 데이터들을 보내준다.
  9. 헤더에 토큰값과 이름을 넣어준다.
  10. /users/login의 엔드포인트를 가진 링크에 header값을 보내준다. 이때 **header로 하지 않으면 에러가 난다.
  11. 테스트를 돌려 201이 호출되면 Ok 성공!

좋은 웹페이지 즐겨찾기