authentik.policies.password.tests.test_flows
Password flow tests
1"""Password flow tests""" 2 3from django.urls.base import reverse 4 5from authentik.core.tests.utils import create_test_admin_user, create_test_flow 6from authentik.flows.models import FlowDesignation, FlowStageBinding 7from authentik.flows.tests import FlowTestCase 8from authentik.lib.generators import generate_id 9from authentik.policies.password.models import PasswordPolicy 10from authentik.stages.prompt.models import FieldTypes, Prompt, PromptStage 11 12 13class TestPasswordPolicyFlow(FlowTestCase): 14 """Test Password Policy""" 15 16 def setUp(self) -> None: 17 self.user = create_test_admin_user() 18 self.flow = create_test_flow(FlowDesignation.AUTHENTICATION) 19 20 password_prompt = Prompt.objects.create( 21 name=generate_id(), 22 field_key="password", 23 label="PASSWORD_LABEL", 24 type=FieldTypes.PASSWORD, 25 required=True, 26 placeholder="PASSWORD_PLACEHOLDER", 27 ) 28 29 self.policy = PasswordPolicy.objects.create( 30 name="test_true", 31 amount_uppercase=1, 32 amount_lowercase=2, 33 amount_symbols=3, 34 length_min=3, 35 error_message="test message", 36 ) 37 stage = PromptStage.objects.create(name="prompt-stage") 38 stage.validation_policies.set([self.policy]) 39 stage.fields.set( 40 [ 41 password_prompt, 42 ] 43 ) 44 FlowStageBinding.objects.create(target=self.flow, stage=stage, order=2) 45 46 def test_prompt_data(self): 47 """Test policy attached to a prompt stage""" 48 response = self.client.post( 49 reverse("authentik_api:flow-executor", kwargs={"flow_slug": self.flow.slug}), 50 {"password": "akadmin"}, 51 ) 52 self.assertStageResponse( 53 response, 54 self.flow, 55 component="ak-stage-prompt", 56 fields=[ 57 { 58 "choices": None, 59 "field_key": "password", 60 "label": "PASSWORD_LABEL", 61 "order": 0, 62 "placeholder": "PASSWORD_PLACEHOLDER", 63 "initial_value": "", 64 "required": True, 65 "type": "password", 66 "sub_text": "", 67 } 68 ], 69 response_errors={ 70 "non_field_errors": [{"code": "invalid", "string": self.policy.error_message}] 71 }, 72 )
14class TestPasswordPolicyFlow(FlowTestCase): 15 """Test Password Policy""" 16 17 def setUp(self) -> None: 18 self.user = create_test_admin_user() 19 self.flow = create_test_flow(FlowDesignation.AUTHENTICATION) 20 21 password_prompt = Prompt.objects.create( 22 name=generate_id(), 23 field_key="password", 24 label="PASSWORD_LABEL", 25 type=FieldTypes.PASSWORD, 26 required=True, 27 placeholder="PASSWORD_PLACEHOLDER", 28 ) 29 30 self.policy = PasswordPolicy.objects.create( 31 name="test_true", 32 amount_uppercase=1, 33 amount_lowercase=2, 34 amount_symbols=3, 35 length_min=3, 36 error_message="test message", 37 ) 38 stage = PromptStage.objects.create(name="prompt-stage") 39 stage.validation_policies.set([self.policy]) 40 stage.fields.set( 41 [ 42 password_prompt, 43 ] 44 ) 45 FlowStageBinding.objects.create(target=self.flow, stage=stage, order=2) 46 47 def test_prompt_data(self): 48 """Test policy attached to a prompt stage""" 49 response = self.client.post( 50 reverse("authentik_api:flow-executor", kwargs={"flow_slug": self.flow.slug}), 51 {"password": "akadmin"}, 52 ) 53 self.assertStageResponse( 54 response, 55 self.flow, 56 component="ak-stage-prompt", 57 fields=[ 58 { 59 "choices": None, 60 "field_key": "password", 61 "label": "PASSWORD_LABEL", 62 "order": 0, 63 "placeholder": "PASSWORD_PLACEHOLDER", 64 "initial_value": "", 65 "required": True, 66 "type": "password", 67 "sub_text": "", 68 } 69 ], 70 response_errors={ 71 "non_field_errors": [{"code": "invalid", "string": self.policy.error_message}] 72 }, 73 )
Test Password Policy
def
setUp(self) -> None:
17 def setUp(self) -> None: 18 self.user = create_test_admin_user() 19 self.flow = create_test_flow(FlowDesignation.AUTHENTICATION) 20 21 password_prompt = Prompt.objects.create( 22 name=generate_id(), 23 field_key="password", 24 label="PASSWORD_LABEL", 25 type=FieldTypes.PASSWORD, 26 required=True, 27 placeholder="PASSWORD_PLACEHOLDER", 28 ) 29 30 self.policy = PasswordPolicy.objects.create( 31 name="test_true", 32 amount_uppercase=1, 33 amount_lowercase=2, 34 amount_symbols=3, 35 length_min=3, 36 error_message="test message", 37 ) 38 stage = PromptStage.objects.create(name="prompt-stage") 39 stage.validation_policies.set([self.policy]) 40 stage.fields.set( 41 [ 42 password_prompt, 43 ] 44 ) 45 FlowStageBinding.objects.create(target=self.flow, stage=stage, order=2)
Hook method for setting up the test fixture before exercising it.
def
test_prompt_data(self):
47 def test_prompt_data(self): 48 """Test policy attached to a prompt stage""" 49 response = self.client.post( 50 reverse("authentik_api:flow-executor", kwargs={"flow_slug": self.flow.slug}), 51 {"password": "akadmin"}, 52 ) 53 self.assertStageResponse( 54 response, 55 self.flow, 56 component="ak-stage-prompt", 57 fields=[ 58 { 59 "choices": None, 60 "field_key": "password", 61 "label": "PASSWORD_LABEL", 62 "order": 0, 63 "placeholder": "PASSWORD_PLACEHOLDER", 64 "initial_value": "", 65 "required": True, 66 "type": "password", 67 "sub_text": "", 68 } 69 ], 70 response_errors={ 71 "non_field_errors": [{"code": "invalid", "string": self.policy.error_message}] 72 }, 73 )
Test policy attached to a prompt stage