Тест-кейс для Loginview с использованием ModelViewSet или GenericViewset
Я пытаюсь написать тесткейс для логина в django rest framework. Я пробовал искать в сети, где я пробовал с APIClient, django-Client, Factory, но не получил результата. Я получаю следующий ответ:
{'non_field_errors': [ErrorDetail(string='Unable to log in with provided credentials.', code='authorization')]}
даже после предоставления правильных учетных данных
Вот файл моего тестового примера:
"""
Test cases for Login
"""
import json
from django.urls import reverse
from django.test import TestCase
from rest_framework.test import APIClient
class LoginTest(TestCase):
"""
Login test cases
"""
def setUp(self):
"""
Setup data for the login test cases
"""
self.valid_payload = json.dumps(
{"username": "admin@ksbsgroup.com", "password": "dell@123"}
)
self.url = reverse("users:login-list")
def test_valid_login(self):
"""
Test login with a valid login
"""
client = APIClient()
response = client.post(
self.url, data=self.valid_payload, content_type="application/json"
)
print(response.data)
self.assertEqual(response.status_code, 200)
Мой взгляд на вход выглядит следующим образом:
"""
Login view
"""
import logging
from rest_framework import viewsets, status
from rest_framework.response import Response
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from common import messages
log = logging.getLogger(__name__)
class LoginViewSet(ObtainAuthToken, viewsets.GenericViewSet):
"""
Login view set for login
"""
def create(self, request):
"""
Login the user with the specified email and password.
parameters:
--------------------
email(str): Email address to login
password(str): Password of the user
returns:
--------------------
dict: json dictionary
"""
serializer = self.serializer_class(
data=request.data, context={"request": request}
)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data.get("user")
token, _ = Token.objects.get_or_create(user=user)
log.info(messages.LOG_USER_LOGIN.format(user))
return Response(
{
"message": messages.INFO_SUCCESS,
"token": token.key,
"user": user.id,
"email": user.email,
"status": status.HTTP_200_OK,
}
)
файл url моего приложения: """ Url пути для приложения Users """
from rest_framework.routers import DefaultRouter
from .views.login import LoginViewSet
router = DefaultRouter()
router.register("login", LoginViewSet, basename="login")
urlpatterns = [] + router.urls
и файл urls моего проекта:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("users/", include(("users.urls", "users"), namespace="users")),
]