authentik.policies.password.tests.test_policy
Password Policy tests
1"""Password Policy tests""" 2 3from django.test import TestCase 4from guardian.shortcuts import get_anonymous_user 5 6from authentik.lib.generators import generate_key 7from authentik.policies.password.models import PasswordPolicy 8from authentik.policies.types import PolicyRequest, PolicyResult 9 10 11class TestPasswordPolicy(TestCase): 12 """Test Password Policy""" 13 14 def setUp(self) -> None: 15 self.policy = PasswordPolicy.objects.create( 16 name="test_false", 17 amount_digits=1, 18 amount_uppercase=1, 19 amount_lowercase=2, 20 amount_symbols=3, 21 length_min=24, 22 error_message="test message", 23 ) 24 25 def test_invalid(self): 26 """Test without password""" 27 request = PolicyRequest(get_anonymous_user()) 28 result: PolicyResult = self.policy.passes(request) 29 self.assertFalse(result.passing) 30 self.assertEqual(result.messages[0], "Password not set in context") 31 32 def test_failed_length(self): 33 """Password too short""" 34 request = PolicyRequest(get_anonymous_user()) 35 request.context["password"] = "test" # nosec 36 result: PolicyResult = self.policy.passes(request) 37 self.assertFalse(result.passing) 38 self.assertEqual(result.messages, ("test message",)) 39 40 def test_failed_lowercase(self): 41 """not enough lowercase""" 42 request = PolicyRequest(get_anonymous_user()) 43 request.context["password"] = "1TTTTTTTTTTTTTTTTTTTTTTe" # nosec 44 result: PolicyResult = self.policy.passes(request) 45 self.assertFalse(result.passing) 46 self.assertEqual(result.messages, ("test message",)) 47 48 def test_failed_uppercase(self): 49 """not enough uppercase""" 50 request = PolicyRequest(get_anonymous_user()) 51 request.context["password"] = "1tttttttttttttttttttttE" # nosec 52 result: PolicyResult = self.policy.passes(request) 53 self.assertFalse(result.passing) 54 self.assertEqual(result.messages, ("test message",)) 55 56 def test_failed_symbols(self): 57 """not enough symbols""" 58 request = PolicyRequest(get_anonymous_user()) 59 request.context["password"] = "1ETETETETETETETETETETETETe!!!" # nosec 60 result: PolicyResult = self.policy.passes(request) 61 self.assertFalse(result.passing) 62 self.assertEqual(result.messages, ("test message",)) 63 64 def test_failed_digits(self): 65 """not enough digits""" 66 request = PolicyRequest(get_anonymous_user()) 67 request.context["password"] = "TETETETETETETETETETETE1e!!!" # nosec 68 result: PolicyResult = self.policy.passes(request) 69 self.assertFalse(result.passing) 70 self.assertEqual(result.messages, ("test message",)) 71 72 def test_true(self): 73 """Positive password case""" 74 request = PolicyRequest(get_anonymous_user()) 75 request.context["password"] = generate_key() + "1ee!!!" # nosec 76 result: PolicyResult = self.policy.passes(request) 77 self.assertTrue(result.passing) 78 self.assertEqual(result.messages, tuple())
class
TestPasswordPolicy(django.test.testcases.TestCase):
12class TestPasswordPolicy(TestCase): 13 """Test Password Policy""" 14 15 def setUp(self) -> None: 16 self.policy = PasswordPolicy.objects.create( 17 name="test_false", 18 amount_digits=1, 19 amount_uppercase=1, 20 amount_lowercase=2, 21 amount_symbols=3, 22 length_min=24, 23 error_message="test message", 24 ) 25 26 def test_invalid(self): 27 """Test without password""" 28 request = PolicyRequest(get_anonymous_user()) 29 result: PolicyResult = self.policy.passes(request) 30 self.assertFalse(result.passing) 31 self.assertEqual(result.messages[0], "Password not set in context") 32 33 def test_failed_length(self): 34 """Password too short""" 35 request = PolicyRequest(get_anonymous_user()) 36 request.context["password"] = "test" # nosec 37 result: PolicyResult = self.policy.passes(request) 38 self.assertFalse(result.passing) 39 self.assertEqual(result.messages, ("test message",)) 40 41 def test_failed_lowercase(self): 42 """not enough lowercase""" 43 request = PolicyRequest(get_anonymous_user()) 44 request.context["password"] = "1TTTTTTTTTTTTTTTTTTTTTTe" # nosec 45 result: PolicyResult = self.policy.passes(request) 46 self.assertFalse(result.passing) 47 self.assertEqual(result.messages, ("test message",)) 48 49 def test_failed_uppercase(self): 50 """not enough uppercase""" 51 request = PolicyRequest(get_anonymous_user()) 52 request.context["password"] = "1tttttttttttttttttttttE" # nosec 53 result: PolicyResult = self.policy.passes(request) 54 self.assertFalse(result.passing) 55 self.assertEqual(result.messages, ("test message",)) 56 57 def test_failed_symbols(self): 58 """not enough symbols""" 59 request = PolicyRequest(get_anonymous_user()) 60 request.context["password"] = "1ETETETETETETETETETETETETe!!!" # nosec 61 result: PolicyResult = self.policy.passes(request) 62 self.assertFalse(result.passing) 63 self.assertEqual(result.messages, ("test message",)) 64 65 def test_failed_digits(self): 66 """not enough digits""" 67 request = PolicyRequest(get_anonymous_user()) 68 request.context["password"] = "TETETETETETETETETETETE1e!!!" # nosec 69 result: PolicyResult = self.policy.passes(request) 70 self.assertFalse(result.passing) 71 self.assertEqual(result.messages, ("test message",)) 72 73 def test_true(self): 74 """Positive password case""" 75 request = PolicyRequest(get_anonymous_user()) 76 request.context["password"] = generate_key() + "1ee!!!" # nosec 77 result: PolicyResult = self.policy.passes(request) 78 self.assertTrue(result.passing) 79 self.assertEqual(result.messages, tuple())
Test Password Policy
def
setUp(self) -> None:
15 def setUp(self) -> None: 16 self.policy = PasswordPolicy.objects.create( 17 name="test_false", 18 amount_digits=1, 19 amount_uppercase=1, 20 amount_lowercase=2, 21 amount_symbols=3, 22 length_min=24, 23 error_message="test message", 24 )
Hook method for setting up the test fixture before exercising it.
def
test_invalid(self):
26 def test_invalid(self): 27 """Test without password""" 28 request = PolicyRequest(get_anonymous_user()) 29 result: PolicyResult = self.policy.passes(request) 30 self.assertFalse(result.passing) 31 self.assertEqual(result.messages[0], "Password not set in context")
Test without password
def
test_failed_length(self):
33 def test_failed_length(self): 34 """Password too short""" 35 request = PolicyRequest(get_anonymous_user()) 36 request.context["password"] = "test" # nosec 37 result: PolicyResult = self.policy.passes(request) 38 self.assertFalse(result.passing) 39 self.assertEqual(result.messages, ("test message",))
Password too short
def
test_failed_lowercase(self):
41 def test_failed_lowercase(self): 42 """not enough lowercase""" 43 request = PolicyRequest(get_anonymous_user()) 44 request.context["password"] = "1TTTTTTTTTTTTTTTTTTTTTTe" # nosec 45 result: PolicyResult = self.policy.passes(request) 46 self.assertFalse(result.passing) 47 self.assertEqual(result.messages, ("test message",))
not enough lowercase
def
test_failed_uppercase(self):
49 def test_failed_uppercase(self): 50 """not enough uppercase""" 51 request = PolicyRequest(get_anonymous_user()) 52 request.context["password"] = "1tttttttttttttttttttttE" # nosec 53 result: PolicyResult = self.policy.passes(request) 54 self.assertFalse(result.passing) 55 self.assertEqual(result.messages, ("test message",))
not enough uppercase
def
test_failed_symbols(self):
57 def test_failed_symbols(self): 58 """not enough symbols""" 59 request = PolicyRequest(get_anonymous_user()) 60 request.context["password"] = "1ETETETETETETETETETETETETe!!!" # nosec 61 result: PolicyResult = self.policy.passes(request) 62 self.assertFalse(result.passing) 63 self.assertEqual(result.messages, ("test message",))
not enough symbols
def
test_failed_digits(self):
65 def test_failed_digits(self): 66 """not enough digits""" 67 request = PolicyRequest(get_anonymous_user()) 68 request.context["password"] = "TETETETETETETETETETETE1e!!!" # nosec 69 result: PolicyResult = self.policy.passes(request) 70 self.assertFalse(result.passing) 71 self.assertEqual(result.messages, ("test message",))
not enough digits
def
test_true(self):
73 def test_true(self): 74 """Positive password case""" 75 request = PolicyRequest(get_anonymous_user()) 76 request.context["password"] = generate_key() + "1ee!!!" # nosec 77 result: PolicyResult = self.policy.passes(request) 78 self.assertTrue(result.passing) 79 self.assertEqual(result.messages, tuple())
Positive password case