|
|
|
@@ -1,6 +1,7 @@
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
from django.apps import apps
|
|
|
|
|
from django.contrib.auth import get_user_model
|
|
|
|
|
from django.contrib.messages import get_messages
|
|
|
|
|
from django.core import mail as django_mail
|
|
|
|
|
from django.shortcuts import resolve_url
|
|
|
|
|
from django.test import TestCase
|
|
|
|
@@ -35,7 +36,8 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
cls.login_message = gettext('Benutzer angemeldet: %(username)s')
|
|
|
|
|
cls.logout_message = gettext('Benutzer abgemeldet.')
|
|
|
|
|
cls.set_password_message = gettext('Passwort gespeichert.')
|
|
|
|
|
cls.weak_password_warning_message = 'Dein Passwort entspricht nicht mehr den aktuellen Passwortrichtlinien.'
|
|
|
|
|
cls.weak_password_warning_message = gettext('Dein Passwort entspricht nicht mehr den aktuellen Passwortrichtlinien.')
|
|
|
|
|
cls.new_password_sent_message = gettext('Neues Passwort versendet.')
|
|
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
|
super().setUp()
|
|
|
|
@@ -60,6 +62,12 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
field = response.context['form'].fields['password']
|
|
|
|
|
self.assertTrue(field.required)
|
|
|
|
|
|
|
|
|
|
def test_integrated_login_invalid_user(self):
|
|
|
|
|
response = self.client.post(self.login_url, {'username': 'toor', 'password': self.test_password})
|
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
self.assertFormError(response.context['form'], None, self.wrong_credentials_message)
|
|
|
|
|
self.assertFalse(response.context['user'].is_authenticated, 'User is logged in')
|
|
|
|
|
|
|
|
|
|
def test_integrated_login_inactive_user(self):
|
|
|
|
|
user = self.user
|
|
|
|
|
user.is_active = False
|
|
|
|
@@ -80,15 +88,17 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
|
|
|
|
|
def test_integrated_login_succeed(self):
|
|
|
|
|
username = self.user.username
|
|
|
|
|
message = self.login_message % {'username': username}
|
|
|
|
|
expected_message = self.login_message % {'username': username}
|
|
|
|
|
|
|
|
|
|
response = self.client.post(self.login_url, {'username': username, 'password': self.test_password})
|
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
|
self.assertEqual(response.url, self.login_redirect_url)
|
|
|
|
|
|
|
|
|
|
response = self.client.get(response.url)
|
|
|
|
|
self.assertContains(response, message)
|
|
|
|
|
self.assertNotContains(response, self.weak_password_warning_message)
|
|
|
|
|
messages = list(get_messages(response.wsgi_request))
|
|
|
|
|
self.assertEqual(len(messages), 1)
|
|
|
|
|
self.assertEqual(messages[0].message, expected_message)
|
|
|
|
|
self.assertContains(response, expected_message)
|
|
|
|
|
|
|
|
|
|
self.assertTrue(response.context['user'].is_authenticated, 'Login failed')
|
|
|
|
|
|
|
|
|
@@ -96,7 +106,7 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
username = self.user.username
|
|
|
|
|
password = TEST_WEAK_PASSWORD
|
|
|
|
|
|
|
|
|
|
message = self.login_message % {'username': username}
|
|
|
|
|
expected_message = self.login_message % {'username': username}
|
|
|
|
|
|
|
|
|
|
user_model = get_user_model()
|
|
|
|
|
user = user_model.objects.get(username=username)
|
|
|
|
@@ -110,7 +120,11 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
self.assertEqual(response.url, self.login_redirect_url)
|
|
|
|
|
|
|
|
|
|
response = self.client.get(response.url)
|
|
|
|
|
self.assertContains(response, message)
|
|
|
|
|
messages = list(get_messages(response.wsgi_request))
|
|
|
|
|
self.assertEqual(len(messages), 2)
|
|
|
|
|
self.assertEqual(messages[0].message, expected_message)
|
|
|
|
|
self.assertContains(response, expected_message)
|
|
|
|
|
self.assertIn(self.weak_password_warning_message, messages[1].message)
|
|
|
|
|
self.assertContains(response, self.weak_password_warning_message)
|
|
|
|
|
|
|
|
|
|
self.assertTrue(response.context['user'].is_authenticated, 'Login failed')
|
|
|
|
@@ -123,6 +137,8 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
self.assertEqual(response.url, self.logout_redirect_url)
|
|
|
|
|
|
|
|
|
|
response = self.client.get(response.url)
|
|
|
|
|
messages = list(get_messages(response.wsgi_request))
|
|
|
|
|
self.assertEqual(messages[0].message, self.logout_message)
|
|
|
|
|
self.assertContains(response, self.logout_message)
|
|
|
|
|
|
|
|
|
|
self.assertFalse(response.context['user'].is_authenticated, 'Logout failed')
|
|
|
|
@@ -172,6 +188,8 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
self.assertEqual(len(django_mail.outbox), 0)
|
|
|
|
|
|
|
|
|
|
response = self.client.get(response.url)
|
|
|
|
|
messages = list(get_messages(response.wsgi_request))
|
|
|
|
|
self.assertEqual(messages[0].message, self.set_password_message)
|
|
|
|
|
self.assertContains(response, self.set_password_message)
|
|
|
|
|
|
|
|
|
|
self.client.logout()
|
|
|
|
@@ -203,6 +221,8 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
self.assertIn(new_password, mail.body)
|
|
|
|
|
|
|
|
|
|
response = self.client.get(response.url)
|
|
|
|
|
messages = list(get_messages(response.wsgi_request))
|
|
|
|
|
self.assertEqual(messages[0].message, self.set_password_message)
|
|
|
|
|
self.assertContains(response, self.set_password_message)
|
|
|
|
|
|
|
|
|
|
self.client.logout()
|
|
|
|
@@ -228,6 +248,9 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
location = self.recreate_password_url
|
|
|
|
|
|
|
|
|
|
response = self.client.post(location, {'username': self.user.username})
|
|
|
|
|
messages = list(get_messages(response.wsgi_request))
|
|
|
|
|
self.assertEqual(len(messages), 1)
|
|
|
|
|
self.assertEqual(messages[0].message, self.new_password_sent_message)
|
|
|
|
|
self.assertRedirects(response, self.login_url)
|
|
|
|
|
|
|
|
|
|
self.assertEqual(len(django_mail.outbox), 1)
|
|
|
|
@@ -242,3 +265,14 @@ class ViewsTestCase(TestCase):
|
|
|
|
|
|
|
|
|
|
self.assertFalse(self.client.login(username=self.test_username, password=self.test_password),
|
|
|
|
|
'Old password still valid')
|
|
|
|
|
|
|
|
|
|
def test_recreate_password_invalid_user(self):
|
|
|
|
|
location = self.recreate_password_url
|
|
|
|
|
|
|
|
|
|
response = self.client.post(location, {'username': 'toor'})
|
|
|
|
|
messages = list(get_messages(response.wsgi_request))
|
|
|
|
|
self.assertEqual(len(messages), 1)
|
|
|
|
|
self.assertEqual(messages[0].message, self.new_password_sent_message)
|
|
|
|
|
self.assertRedirects(response, self.login_url)
|
|
|
|
|
|
|
|
|
|
self.assertEqual(len(django_mail.outbox), 0)
|
|
|
|
|