From a84aa8967b7daaed5593af58e1c97e774d2f2494 Mon Sep 17 00:00:00 2001 From: Antoine LAURENT Date: Fri, 4 Oct 2024 10:30:27 +0200 Subject: [PATCH] apply: Improve redirect after internal transfer By re-using the back_url from the session, we keep the filters from the list if there were any --- itou/www/apply/views/process_views.py | 10 ++++++++-- tests/www/apply/test_process_external_transfer.py | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/itou/www/apply/views/process_views.py b/itou/www/apply/views/process_views.py index caafbf6d40..47377a1262 100644 --- a/itou/www/apply/views/process_views.py +++ b/itou/www/apply/views/process_views.py @@ -49,6 +49,9 @@ logger = logging.getLogger(__name__) +JOB_APP_DETAILS_FOR_COMPANY_BACK_URL_KEY = "JOB_APP_DETAILS_FOR_COMPANY-BACK_URL-%d" + + def check_waiting_period(job_application): """ This should be an edge case. @@ -190,7 +193,7 @@ def details_for_company(request, job_application_id, template_name="apply/proces ) # get back_url from GET params or session or fallback value - session_key = f"JOB_APP_DETAILS_FOR_COMPANY-BACK_URL-{job_application.pk}" + session_key = JOB_APP_DETAILS_FOR_COMPANY_BACK_URL_KEY % job_application.pk fallback_url = request.session.get(session_key, reverse_lazy("apply:list_for_siae")) back_url = get_safe_url(request, "back_url", fallback_url=fallback_url) request.session[session_key] = back_url @@ -569,7 +572,10 @@ def transfer(request, job_application_id): queryset = JobApplication.objects.is_active_company_member(request.user) job_application = get_object_or_404(queryset, pk=job_application_id) target_company = get_object_or_404(Company.objects, pk=request.POST.get("target_company_id")) - back_url = get_safe_url(request, "back_url", reverse("apply:list_for_siae")) + + session_key = JOB_APP_DETAILS_FOR_COMPANY_BACK_URL_KEY % job_application.pk + fallback_url = request.session.get(session_key, reverse_lazy("apply:list_for_siae")) + back_url = get_safe_url(request, "back_url", fallback_url=fallback_url) try: job_application.transfer(user=request.user, target_company=target_company) diff --git a/tests/www/apply/test_process_external_transfer.py b/tests/www/apply/test_process_external_transfer.py index ee83ecd958..b18afd69b6 100644 --- a/tests/www/apply/test_process_external_transfer.py +++ b/tests/www/apply/test_process_external_transfer.py @@ -207,6 +207,13 @@ def test_step_2_internal_transfer(client): other_company = CompanyMembershipFactory(user=employer).company client.force_login(employer) + # This will set the session back url + list_url_with_params = reverse("apply:list_for_siae") + "?pass_iae_active=on" + client.get( + reverse("apply:details_for_company", kwargs={"job_application_id": job_application.pk}) + + f"?back_url={quote(list_url_with_params)}" + ) + transfer_step_1_url = reverse( "apply:job_application_external_transfer_step_1", kwargs={"job_application_id": job_application.pk} ) @@ -228,6 +235,7 @@ def test_step_2_internal_transfer(client): assertContains(response, f'
') response = client.post(internal_transfer_post_url, data={"target_company_id": other_company.pk}) + assertRedirects(response, list_url_with_params) job_application.refresh_from_db() assert job_application.state == JobApplicationState.NEW assert job_application.to_company == other_company