카테고리 없음

2023-05-25 테스트코드 게시글(로그인)

jung1911 2023. 5. 25. 21:00

테스트 코드 로그인

 

 

먼저 게시글을 사용하기 위해 유저의 id 즉 로그인이 필요하다.

 

장고에서 테스트를 위해 사용하는 모듈이 있다.

 

from rest_framework.test import APITestCase, APIClient
from django.urls import reverse
from rest_framework import status
from .models import Article,Comment(게시글 관련)
from PIL import Image(게시글 이미지)
from user.models import User(필수)
from django.test.client import MULTIPART_CONTENT, encode_multipart, BOUNDARY
import tempfile(임시이미지파일)



article/models.py(테스트 코드 함수)
 def get_absolute_url(self):
        return reverse("articles:article_detail_view", kwargs={"article_id": self.pk})

 

유저생성하기

 

 

  • class 사용할 시 cls를 사용해서 유저를 생성
  • 유저에 필수값에 해당하는 부분을 확인하고 작성
  • user_data 경우 필수값으로 설정되었기 때문에 필수값을 작성
  • article_data 제목과 내용을 쓰기 때문에(models.py필수값 확인) 제목과 내용만 사용
  • access 이제 이부분 같은경우에 토큰을 받아오기 유저 생성 하는부분을 길게 설정해서 받아왔다. 좀 더 좋은 방법이 있을 있을 수 도 있어 나중에 수정할려고 한다.

 

class CustomTokenObtainPairViewTest(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.client = APIClient()
        cls.email = 'test123@naver.com'
        cls.account = 'admin'
        cls.nickname = 'admin'
        cls.password = 'G1843514dadg23!4'
        cls.user_data = {'account':'admin','email':'test123@naver.com','password':'G1843514dadg23!4'}
        cls.user = User.objects.create_user(account=cls.account, email=cls.email, nickname=cls.nickname, password=cls.password)
        cls.article_data = {"title": "test title", "content": "test content"}
        cls.article = Article.objects.create(**cls.article_data, user=cls.user)
        cls.user.is_active = True  # 인증 상태를 True로 설정
        cls.user.save()
    
    def setUp(self):
        self.access_token = self.client.post(reverse('user:login_view'), self.user_data).data['access']

 

 

로그인 테스트 코드

 

  • 게시글을 작성할려면 유저의 id가 필요하다.
  • 테스트 코드를 사용해서 로그인 된 상태로 권한이있는 기능들을 테스트 할 수 있다.

아직 겉으로 왜쓰는지 알지만 속내용은 왜 사용하는지에 대해 잘 모른다.  시간이 나면 좀 더 공부 할 예정

 

def test_login(self):
        url = reverse("user:login_view")
        data = {
            'account': self.account,
            'password': self.password
        }
        
        response = self.client.post(url, data)
        # print(response.data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)  # 로그인 요청이 성공적으로 처리되었는지 확인

 

 

 

로그인 안 한 상태

 

로그인 안되어 있는 상태이면 401 상태코드가 뜨도록 했다.

 

 def test_fail_if_not_logged_in(self):
        url = reverse("articles:article_view")
        response = self.client.post(url, self.article_data)
        print(response.data)
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)