flows: fix inconsistent behaviour when flow is empty
This commit is contained in:
parent
f265c1f10b
commit
e1394207e7
|
@ -62,7 +62,7 @@ class TestFlowExecutor(TestCase):
|
||||||
"authentik_flows:flow-executor", kwargs={"flow_slug": flow.slug}
|
"authentik_flows:flow-executor", kwargs={"flow_slug": flow.slug}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertEqual(cancel_mock.call_count, 2)
|
self.assertEqual(cancel_mock.call_count, 2)
|
||||||
|
|
||||||
@patch(
|
@patch(
|
||||||
|
@ -105,9 +105,8 @@ class TestFlowExecutor(TestCase):
|
||||||
response = self.client.get(
|
response = self.client.get(
|
||||||
reverse("authentik_flows:flow-executor", kwargs={"flow_slug": flow.slug}),
|
reverse("authentik_flows:flow-executor", kwargs={"flow_slug": flow.slug}),
|
||||||
)
|
)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertIsInstance(response, AccessDeniedResponse)
|
self.assertEqual(response.url, reverse("authentik_core:shell"))
|
||||||
self.assertInHTML(EmptyFlowException.__doc__, response.rendered_content)
|
|
||||||
|
|
||||||
def test_invalid_flow_redirect(self):
|
def test_invalid_flow_redirect(self):
|
||||||
"""Tests that an invalid flow still redirects"""
|
"""Tests that an invalid flow still redirects"""
|
||||||
|
@ -121,11 +120,8 @@ class TestFlowExecutor(TestCase):
|
||||||
dest = "/unique-string"
|
dest = "/unique-string"
|
||||||
url = reverse("authentik_flows:flow-executor", kwargs={"flow_slug": flow.slug})
|
url = reverse("authentik_flows:flow-executor", kwargs={"flow_slug": flow.slug})
|
||||||
response = self.client.get(url + f"?{NEXT_ARG_NAME}={dest}")
|
response = self.client.get(url + f"?{NEXT_ARG_NAME}={dest}")
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertJSONEqual(
|
self.assertEqual(response.url, reverse("authentik_core:shell"))
|
||||||
force_str(response.content),
|
|
||||||
{"type": "redirect", "to": dest},
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_multi_stage_flow(self):
|
def test_multi_stage_flow(self):
|
||||||
"""Test a full flow with multiple stages"""
|
"""Test a full flow with multiple stages"""
|
||||||
|
|
|
@ -83,7 +83,9 @@ class FlowExecutorView(View):
|
||||||
return to_stage_response(self.request, self.handle_invalid_flow(exc))
|
return to_stage_response(self.request, self.handle_invalid_flow(exc))
|
||||||
except EmptyFlowException as exc:
|
except EmptyFlowException as exc:
|
||||||
LOGGER.warning("f(exec): Flow is empty", exc=exc)
|
LOGGER.warning("f(exec): Flow is empty", exc=exc)
|
||||||
return to_stage_response(self.request, self.handle_invalid_flow(exc))
|
# To match behaviour with loading an empty flow plan from cache,
|
||||||
|
# we don't show an error message here, but rather call _flow_done()
|
||||||
|
return self._flow_done()
|
||||||
# We don't save the Plan after getting the next stage
|
# We don't save the Plan after getting the next stage
|
||||||
# as it hasn't been successfully passed yet
|
# as it hasn't been successfully passed yet
|
||||||
next_stage = self.plan.next(self.request)
|
next_stage = self.plan.next(self.request)
|
||||||
|
|
Reference in New Issue