from django.conf import settings as s from django.test import TestCase from django.urls import reverse from epdb.logic import PackageManager from epdb.models import User Package = s.GET_PACKAGE_MODEL() class UserViewTest(TestCase): fixtures = ["test_fixtures.jsonl.gz"] @classmethod def setUpClass(cls): super(UserViewTest, cls).setUpClass() cls.user = User.objects.get(username="anonymous") cls.package = PackageManager.create_package(cls.user, "Anon Test Package", "No Desc") cls.BBD_SUBSET = Package.objects.get(name="Fixtures") def test_login_with_valid_credentials(self): response = self.client.post( reverse("login"), { "username": "user0", "password": "SuperSafe", }, ) self.assertRedirects(response, reverse("index")) self.assertTrue(response.wsgi_request.user.is_authenticated) def test_login_with_invalid_credentials(self): response = self.client.post( reverse("login"), { "username": "user0", "password": "wrongpassword", }, ) self.assertEqual(response.status_code, 200) self.assertFalse(response.wsgi_request.user.is_authenticated) def test_register(self): response = self.client.post( reverse("register"), { "username": "user1", "email": "user1@envipath.com", "password": "SuperSafe", "rpassword": "SuperSafe", }, ) self.assertEqual(response.status_code, 200) # TODO currently fails as the fixture does not provide a global setting... self.assertContains(response, "Registration failed!") def test_register_password_mismatch(self): response = self.client.post( reverse("register"), { "username": "user1", "email": "user1@envipath.com", "password": "SuperSafe", "rpassword": "SuperSaf3", }, ) self.assertEqual(response.status_code, 200) self.assertContains(response, "Registration failed, provided passwords differ") def test_logout(self): response = self.client.post( reverse("login"), {"username": "user0", "password": "SuperSafe", "login": "true"} ) self.assertTrue(response.wsgi_request.user.is_authenticated) response = self.client.post( reverse("logout"), { "logout": "true", }, ) self.assertFalse(response.wsgi_request.user.is_authenticated) def test_next_param_properly_handled(self): response = self.client.get(reverse("packages")) self.assertRedirects(response, f"{reverse('login')}/?next=/package") response = self.client.post( reverse("login"), {"username": "user0", "password": "SuperSafe", "login": "true", "next": "/package"}, ) self.assertRedirects(response, reverse("packages"))