-
-
-
-
- Back to manage your domains -
- - {# messages block is under the back breadcrumb link #} + {# messages block #} {% if messages %} {% for message in messages %}
@@ -30,6 +21,21 @@ Edit your User Profile |
{% endfor %}
{% endif %}
{% include "includes/form_errors.html" with form=form %}
+
+
+
+ {% if not return_to_request %}
+
+ Back to manage your domains +
+ {% else %} ++ Go back to your domain request +
+ {% endif %} +Your profile
We require that you maintain accurate contact information. The details you provide will only be used to support the administration of .gov and won’t be made public.
diff --git a/src/registrar/tests/test_views.py b/src/registrar/tests/test_views.py index cd10d7d1e..5ee94814d 100644 --- a/src/registrar/tests/test_views.py +++ b/src/registrar/tests/test_views.py @@ -560,6 +560,16 @@ class UserProfileTests(TestWithUser, WebTest): response = self.client.get("/user-profile") self.assertEqual(response.status_code, 404) + @less_console_noise_decorator + def test_user_profile_back_button_when_coming_from_domain_request(self): + """tests user profile when profile_feature is on, + and when they are redirected from the domain request page""" + with override_flag("profile_feature", active=True): + response = self.client.get("/user-profile?return_to_request=True") + self.assertContains(response, "Your profile") + self.assertContains(response, "Go back to your domain request") + self.assertNotContains(response, "Back to manage your domains") + @less_console_noise_decorator def test_domain_detail_profile_feature_on(self): """test that domain detail view when profile_feature is on""" diff --git a/src/registrar/views/user_profile.py b/src/registrar/views/user_profile.py index b386e6a62..af73fad44 100644 --- a/src/registrar/views/user_profile.py +++ b/src/registrar/views/user_profile.py @@ -3,6 +3,7 @@ """ import logging +from urllib.parse import parse_qs, unquote from django.contrib import messages from django.views.generic.edit import FormMixin @@ -11,6 +12,7 @@ from django.urls import reverse from registrar.models import ( Contact, ) +from registrar.models.utility.generic_helper import replace_url_queryparams from registrar.views.utility.permission_views import UserProfilePermissionView from waffle.decorators import flag_is_active, waffle_flag @@ -30,13 +32,26 @@ class UserProfileView(UserProfilePermissionView, FormMixin): def get(self, request, *args, **kwargs): """Handle get requests by getting user's contact object and setting object and form to context before rendering.""" - self.object = self.get_object() + self._refresh_session_and_object(request) form = self.form_class(instance=self.object) context = self.get_context_data(object=self.object, form=form) + + return_to_request = request.GET.get("return_to_request") + if return_to_request: + context["return_to_request"] = True + return self.render_to_response(context) + def _refresh_session_and_object(self, request): + """Sets the current session to self.session and the current object to self.object""" + self.session = request.session + self.object = self.get_object() + @waffle_flag("profile_feature") # type: ignore def dispatch(self, request, *args, **kwargs): # type: ignore + # Store the original queryparams to persist them + query_params = request.META["QUERY_STRING"] + request.session["query_params"] = query_params return super().dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): @@ -48,11 +63,20 @@ class UserProfileView(UserProfilePermissionView, FormMixin): def get_success_url(self): """Redirect to the user's profile page.""" - return reverse("user-profile") + + query_params = {} + if "query_params" in self.session: + params = unquote(self.session["query_params"]) + query_params = parse_qs(params) + + # Preserve queryparams and add them back to the url + base_url = reverse("user-profile") + new_redirect = replace_url_queryparams(base_url, query_params, convert_list_to_csv=True) + return new_redirect def post(self, request, *args, **kwargs): """Handle post requests (form submissions)""" - self.object = self.get_object() + self._refresh_session_and_object(request) form = self.form_class(request.POST, instance=self.object) if form.is_valid():