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("web: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("web:login")) assert response.status_code == status.HTTP_200_OK def test_login_already_logged_in(self): response = self.client.post( reverse("web: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("web: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("web: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("web: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("web: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("web: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("web: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("web:logout")) assert response.status_code == status.HTTP_302_FOUND assert response.url == reverse("web:index") def test_login_then_get_my_account(self): response = self.client.post( reverse("web: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("web:my_account")) assert response.status_code == status.HTTP_200_OK