feat: login view

This commit is contained in:
2024-11-21 11:43:38 +01:00
parent 96eb517962
commit 2c7e51d602
15 changed files with 369 additions and 151 deletions
+38 -56
View File
@@ -1,6 +1,7 @@
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()
@@ -18,83 +19,64 @@ class TestLogin(APITestCase):
def test_login(self):
response = self.client.post(
"/api/v1/auth/login/",
reverse("users: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
assert response.status_code == status.HTTP_302_FOUND
assert response.url == reverse("shop:index")
def test_login_then_verify(self):
def test_login_get(self):
response = self.client.get(reverse("users:login"))
assert response.status_code == status.HTTP_200_OK
def test_login_already_logged_in(self):
response = self.client.post(
"/api/v1/auth/login/",
reverse("users: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(
"/api/v1/auth/verify/",
{
"token": jwt_token,
},
)
assert response.status_code == status.HTTP_302_FOUND
assert response.url == reverse("shop:index")
assert response.status_code == status.HTTP_200_OK
def test_login_then_refresh(self):
response = self.client.post(
"/api/v1/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(
"/api/v1/auth/refresh/",
{
"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(
"/api/v1/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("/api/v1/auth/me/")
assert response.status_code == status.HTTP_200_OK
assert response.data.get("email") == self.user.email
response = self.client.get(reverse("users:login"))
assert response.status_code == status.HTTP_302_FOUND
assert response.url == reverse("shop:index")
def test_login_failed(self):
response = self.client.post(
"/api/v1/auth/login/",
reverse("users:login"),
{
"username": self.user.username,
"password": "wrongpassword",
},
)
assert response.status_code == status.HTTP_401_UNAUTHORIZED
assert response.status_code == status.HTTP_400_BAD_REQUEST
def test_login_then_logout(self):
response = self.client.post(
reverse("users:login"),
{
"username": self.user.username,
"password": self.password,
},
)
assert response.status_code == status.HTTP_302_FOUND
assert response.url == reverse("shop:index")
response = self.client.post(reverse("users:logout"))
assert response.status_code == status.HTTP_302_FOUND
assert response.url == reverse("shop:index")
def test_logout_already_logged_out(self):
response = self.client.post(reverse("users:logout"))
assert response.status_code == status.HTTP_302_FOUND
assert response.url == reverse("shop:index")