При тестировании вьюшки через pytest всегда не проходит тест test_login (ошибка 400) (Django, pytest)

При тестировании вьюшки через pytest всегда не проходит тест test_login (ошибка 400), однако при тестировании через postman или TestCase таких ошибок нет. В чем может быть проблема? Вот вьюшка:

from rest_framework import status, permissions
from rest_framework.exceptions import PermissionDenied
from rest_framework.response import Response
from rest_framework.decorators import action
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
from django.contrib.auth import authenticate, login, logout

from .models import User
from .serializers import (
    UserSerializer,
    UserRegisterSerializer,
    UserLoginSerializer,
    UserLogoutSerializer,
    UserChangeNameSerializer,
    UserChangePasswordSerializer
)

import json
class UserViewSet(GenericViewSet, ListModelMixin):
    queryset = User.objects.all()
    permission_classes = [permissions.IsAdminUser]
    serializer_class = UserSerializer
    
    @action(
        detail=False,
        methods=["post"],
        permission_classes=[permissions.AllowAny],
        serializer_class=UserRegisterSerializer,
        url_name="register"
    )
    def register(self, request):
        username = request.data.get("username")
        password = request.data.get("password")
        email = request.data.get("email")
        if not (username and password and email):
            return Response(
                {"message": "Missing required fields"},
                status=status.HTTP_400_BAD_REQUEST,
            )
        if User.objects.filter(username=username).exists():
            return Response(
                {"message": "This username already exists"},
                status=status.HTTP_400_BAD_REQUEST,
            )
        user = User.objects.create_user(
            username=username, email=email, password=password
        )
        return Response(
            {"message": "Successfully registered"}, status=status.HTTP_201_CREATED
        )

    # Авторизация пользователя
    @action(
        detail=False,
        methods=["post"],
        permission_classes=[permissions.AllowAny],
        serializer_class=UserLoginSerializer,
    )
    def login(
        self,
        request
    ):
        username = request.data.get("username")
        password = request.data.get("password")
        if not (username and password):
            return Response(
                {"message": "Missing required fields"},
                status=status.HTTP_400_BAD_REQUEST,
            )
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return Response({"message": "Successfully logged in"})
        else:
            return Response(
                {"message": "Incorrect username or password"},
                status=status.HTTP_400_BAD_REQUEST,
            )

    @action(
        detail=False,
        methods=["post"],
        permission_classes=[permissions.IsAuthenticated],
        serializer_class=UserLogoutSerializer,
    )
    def logout(self, request):
        logout(request)
        return Response({"message": "Exited successfully"})

    @action(
        detail=False,
        methods=["post"],
        permission_classes=[permissions.IsAuthenticated],
        serializer_class=UserChangePasswordSerializer,
    )
    def change_password(
        self,
        request
    ):
        user = request.user
        if not user.check_password(request.data["password"]):
            raise PermissionDenied("Incorrect password")
        user.set_password(request.data["new_password"])
        user.save()
        return Response({"message": "Password successfully changed"})

    @action(
        detail=False,
        methods=["post"],
        permission_classes=[permissions.IsAuthenticated],
        serializer_class=UserChangeNameSerializer,
    )
    def change_username(self, request):
        user = request.user
        if not user.check_password(request.data["password"]):
            raise PermissionDenied("Incorrect password")
        user.username = request.data["new_username"]
        user.save()
        return Response({"message": "Username successfully changed"})

Вот тесты:

import pytest
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
from mixer.backend.django import mixer

from auth_app.models import User
from auth_app.views import UserViewSet


@pytest.fixture
def api_client():
    return APIClient()

@pytest.fixture
def test_user():
    return mixer.blend(User, username='testuser', password='testpassword')

@pytest.fixture
def test_admin():
    return mixer.blend(User, username='testadmin', password='testpassword', is_staff=True)

@pytest.mark.django_db
def test_register(api_client):
    url = reverse('auth-register')
    data = {
        'username': 'testuser',
        'email': '[email protected]',
        'password': 'testpassword'
    }
    response = api_client.post(url, data)
    assert response.status_code == status.HTTP_201_CREATED


@pytest.mark.django_db
def test_register_existing_username(api_client, test_user):
    url = reverse('auth-register')
    data = {
        'username': test_user.username,
        'email': '[email protected]',
        'password': 'testpassword'
    }
    response = api_client.post(url, data)
    assert response.status_code == status.HTTP_400_BAD_REQUEST


@pytest.mark.django_db
def test_login(api_client, test_user):
    url = reverse('auth-login')
    data = {
        'username': test_user.username,
        'password': test_user.password
    }
    response = api_client.post(url, data)
    assert response.status == status.HTTP_200_OK


@pytest.mark.django_db
def test_login_incorrect_credentials(api_client, test_user):
    url = reverse('auth-login')
    data = {
        'username': test_user.username,
        'password': 'wrongpassword'
    }
    response = api_client.post(url, data)
    assert response.status_code == status.HTTP_400_BAD_REQUEST


@pytest.mark.django_db
def test_logout(api_client, test_user):
    url = reverse('auth-logout')
    api_client.force_authenticate(user=test_user)
    response = api_client.post(url)
    assert response.status_code == status.HTTP_200_OK


@pytest.mark.django_db
def test_change_password(api_client, test_user):
    url = reverse('auth-change-password')
    api_client.force_authenticate(user=test_user)
    data = {
        'password': 'testpassword',
        'new_password': 'newtestpassword'
    }
    response = api_client.post(url, data)
    assert response.status_code == status.HTTP_200_OK


@pytest.mark.django_db
def test_change_password_incorrect_credentials(api_client, test_user):
    url = reverse('auth-change-password')
    api_client.force_authenticate(user=test_user)
    data = {
        'password': 'wrongpassword',
        'new_password': 'newtestpassword'
    }
    response = api_client.post(url, data)
    assert response.status_code == status.HTTP_403_FORBIDDEN


@pytest.mark.django_db
def test_change_username(api_client, test_user):
    url = reverse('auth-change-username')
    api_client.force_authenticate(user=test_user)
    data = {
        'password': 'testpassword',
        'new_username': 'newtestuser'
    }
    response = api_client.post(url, data)
    assert response.status_code == status.HTTP_200_OK


@pytest.mark.django_db
def test_change_username_incorrect_credentials(api_client, test_user):
    url = reverse('auth-change-username')
    api_client.force_authenticate(user=test_user)

Уже 2 дня ничего не могу найти ни в инете, ни у себя в коде, голова уже плавится, а нервы на пределе


Ответы (0 шт):