Files
shoppy/users/tests/test_api_login.py
T
2024-11-21 11:43:38 +01:00

102 lines
3.0 KiB
Python

from rest_framework import status
from rest_framework.test import APITestCase
from django.contrib.auth import get_user_model
from django.shortcuts import reverse
User = get_user_model()
class TestLogin(APITestCase):
def setUp(self) -> None:
self.password = "theonering"
self.user = User.objects.create(
username="sauron",
email="sauron@mordor.middleearth",
)
self.user.set_password(self.password)
self.user.save()
def test_login(self):
response = self.client.post(
reverse("auth:login"),
{
"username": self.user.username,
"password": self.password,
},
)
assert response.status_code == status.HTTP_200_OK
assert response.data.get("access") is not None
assert response.data.get("refresh") is not None
def test_login_then_verify(self):
response = self.client.post(
reverse("auth:login"),
{
"username": self.user.username,
"password": self.password,
},
)
assert response.status_code == status.HTTP_200_OK
jwt_token = response.data.get("access")
response = self.client.post(
reverse("auth:verify_jwt"),
{
"token": jwt_token,
},
)
assert response.status_code == status.HTTP_200_OK
def test_login_then_refresh(self):
response = self.client.post(
reverse("auth:login"),
{
"username": self.user.username,
"password": self.password,
},
)
assert response.status_code == status.HTTP_200_OK
jwt_token = response.data.get("refresh")
response = self.client.post(
reverse("auth:refresh_jwt"),
{
"refresh": jwt_token,
},
)
assert response.status_code == status.HTTP_200_OK
assert response.data.get("access") is not None
assert response.data.get("access") != jwt_token
def test_login_then_get_user_info(self):
response = self.client.post(
reverse("auth:login"),
{
"username": self.user.username,
"password": self.password,
},
)
assert response.status_code == status.HTTP_200_OK
jwt_token = response.data.get("access")
self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {jwt_token}")
response = self.client.get(reverse("auth:user_info"))
assert response.status_code == status.HTTP_200_OK
assert response.data.get("email") == self.user.email
def test_login_failed(self):
response = self.client.post(
reverse("auth:login"),
{
"username": self.user.username,
"password": "wrongpassword",
},
)
assert response.status_code == status.HTTP_401_UNAUTHORIZED