Menna Magdy
Menna Magdy

Reputation: 415

Pytest login view with knox authentication

I am using knox token in authentication so Here's my Signup and Signin view, How to test the signing view with APIRequestFactory

class SignUpAPI(generics.GenericAPIView):
    serializer_class = RegisterSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        token = AuthToken.objects.create(user)
        return Response({"user": UserSerializer(user, context=self.get_serializer_context()).data})


class SignInAPI(generics.GenericAPIView):
    serializer_class = LoginSerializer

    def post(self, request):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data
        return Response(
            {
                "user": UserSerializer(user, context=self.get_serializer_context()).data,
                "token": AuthToken.objects.create(user)[1],
            }
        )

the endpoints

path("auth/register", SignUpAPI.as_view(), name="RegisterView"),
path("auth/login", SignInAPI.as_view(), name="LoginView"),```

Upvotes: 1

Views: 381

Answers (1)

Chen Peleg
Chen Peleg

Reputation: 2124

Assuming you work with DRF, you could try something like this:

from rest_framework.test import APIClient
from knox.serializers import User

class SignInAPITests(TestCase):
    def test_sign_in(self):
        self.user = User.objects.create_user(
            username='test_user', 
            password='12345')
        self.client = APIClient()
        response = self.client.post(auth_url,
            data=dict(username="test_user", 
            password="12345"))
        access_token = res.data["token"]
        self.assertIsNotNone(access_token)

Upvotes: 0

Related Questions