99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
from django.contrib.auth import get_user_model
|
|
from django.shortcuts import reverse
|
|
from rest_framework import status
|
|
from rest_framework.test import APITestCase
|
|
|
|
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("users:login"),
|
|
{
|
|
"username": self.user.username,
|
|
"password": self.password,
|
|
},
|
|
)
|
|
|
|
assert response.status_code == status.HTTP_302_FOUND
|
|
assert response.url == reverse("web:index")
|
|
|
|
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(
|
|
reverse("users:login"),
|
|
{
|
|
"username": self.user.username,
|
|
"password": self.password,
|
|
},
|
|
)
|
|
|
|
assert response.status_code == status.HTTP_302_FOUND
|
|
assert response.url == reverse("web:index")
|
|
|
|
response = self.client.get(reverse("users:login"))
|
|
assert response.status_code == status.HTTP_302_FOUND
|
|
assert response.url == reverse("web:index")
|
|
|
|
def test_login_failed(self):
|
|
response = self.client.post(
|
|
reverse("users:login"),
|
|
{
|
|
"username": self.user.username,
|
|
"password": "wrongpassword",
|
|
},
|
|
)
|
|
|
|
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("web:index")
|
|
|
|
response = self.client.post(reverse("users:logout"))
|
|
assert response.status_code == status.HTTP_302_FOUND
|
|
assert response.url == reverse("web: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("web:index")
|
|
|
|
def test_login_then_get_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("web:index")
|
|
|
|
response = self.client.get(reverse("users:logout"))
|
|
assert response.status_code == status.HTTP_302_FOUND
|
|
assert response.url == reverse("web:index")
|