from django.contrib.auth import get_user_model from django.shortcuts import reverse from django.test import TestCase User = get_user_model() class TestLogin(TestCase): 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 == 302 assert response.url == reverse('web:index') def test_login_get(self): response = self.client.get(reverse('users:login')) assert response.status_code == 200 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 == 302 assert response.url == reverse('web:index') response = self.client.get(reverse('users:login')) assert response.status_code == 302 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 == 400 def test_login_then_logout(self): response = self.client.post(reverse('users:login'), { 'username': self.user.username, 'password': self.password }) assert response.status_code == 302 assert response.url == reverse('web:index') response = self.client.post(reverse('users:logout')) assert response.status_code == 302 assert response.url == reverse('web:index') def test_logout_already_logged_out(self): response = self.client.post(reverse('users:logout')) assert response.status_code == 302 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 == 302 assert response.url == reverse('web:index') response = self.client.get(reverse('users:logout')) assert response.status_code == 302 assert response.url == reverse('web:index') def test_login_then_get_my_account(self): response = self.client.post(reverse('users:login'), { 'username': self.user.username, 'password': self.password }) assert response.status_code == 302 assert response.url == reverse('web:index') response = self.client.get(reverse('users:my_account')) assert response.status_code == 200 def test_login_redirection_to_my_account(self): url = f'{reverse("users:login")}?next={reverse("users:my_account")}' response = self.client.post(url, { 'username': self.user.username, 'password': self.password }) assert response.status_code == 302 assert response.url == f'{reverse("web:index")}?next={reverse("users:my_account")}' response = self.client.get(response.url) assert response.status_code == 302 assert response.url == reverse('users:my_account') def test_login_redirection_to_my_orders(self): url = f'{reverse("users:login")}?next={reverse("web:orders")}' response = self.client.post(url, { 'username': self.user.username, 'password': self.password }) assert response.status_code == 302 assert response.url == f'{reverse("web:index")}?next={reverse("web:orders")}' response = self.client.get(response.url) assert response.status_code == 302 assert response.url == reverse('web:orders')