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        )
class TestPasswordPolicyFlow(authentik.flows.tests.FlowTestCase):
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