Browse Source

feat(most-helpful-event): Add option in user settings to change default issue event (#54048)

Closes https://github.com/getsentry/sentry/issues/53913

Add the ability to save a user option for the default event shown on the
issue details page.

The options are:
- recommended (_default_)
- latest
- oldest
Julia Hoge 1 year ago
parent
commit
f793a739d8

+ 10 - 0
src/sentry/api/endpoints/user_details.py

@@ -62,6 +62,14 @@ class UserOptionsSerializer(serializers.Serializer):
         ),
         required=False,
     )
+    defaultIssueEvent = serializers.ChoiceField(
+        choices=(
+            ("recommended", _("Recommended")),
+            ("latest", _("Latest")),
+            ("oldest", _("Oldest")),
+        ),
+        required=False,
+    )
 
 
 class BaseUserSerializer(CamelSnakeModelSerializer):
@@ -147,6 +155,7 @@ class UserDetailsEndpoint(UserEndpoint):
         :param string timezone: timezone option
         :param clock_24_hours boolean: use 24 hour clock
         :param string theme: UI theme, either "light", "dark", or "system"
+        :param string default_issue_event: Event displayed by default, "recommended", "latest" or "oldest"
         :auth: required
         """
         if not request.access.has_permission("users.admin"):
@@ -183,6 +192,7 @@ class UserDetailsEndpoint(UserEndpoint):
             "language": "language",
             "timezone": "timezone",
             "stacktraceOrder": "stacktrace_order",
+            "defaultIssueEvent": "default_issue_event",
             "clock24Hours": "clock_24_hours",
         }
 

+ 2 - 0
src/sentry/api/serializers/models/user.py

@@ -85,6 +85,7 @@ class _UserOptions(TypedDict):
     theme: str  # TODO: enum/literal for theme options
     language: str
     stacktraceOrder: int  # TODO enum/literal
+    defaultIssueEvent: str
     timezone: str
     clock24Hours: bool
 
@@ -201,6 +202,7 @@ class UserSerializer(Serializer):
                 "theme": options.get("theme") or "light",
                 "language": options.get("language") or settings.SENTRY_DEFAULT_LANGUAGE,
                 "stacktraceOrder": stacktrace_order,
+                "defaultIssueEvent": options.get("default_issue_event") or "recommended",
                 "timezone": options.get("timezone") or settings.SENTRY_DEFAULT_TIME_ZONE,
                 "clock24Hours": options.get("clock_24_hours") or False,
             }

+ 3 - 0
tests/sentry/api/endpoints/test_user_details.py

@@ -34,6 +34,7 @@ class UserDetailsGetTest(UserDetailsTest):
 
         assert resp.data["id"] == str(self.user.id)
         assert resp.data["options"]["theme"] == "light"
+        assert resp.data["options"]["defaultIssueEvent"] == "recommended"
         assert resp.data["options"]["timezone"] == "UTC"
         assert resp.data["options"]["language"] == "en"
         assert resp.data["options"]["stacktraceOrder"] == -1
@@ -77,6 +78,7 @@ class UserDetailsUpdateTest(UserDetailsTest):
             name="hello world",
             options={
                 "theme": "system",
+                "defaultIssueEvent": "latest",
                 "timezone": "UTC",
                 "stacktraceOrder": "2",
                 "language": "fr",
@@ -93,6 +95,7 @@ class UserDetailsUpdateTest(UserDetailsTest):
         assert user.email == "a@example.com"
         assert user.username == "a@example.com"
         assert UserOption.objects.get_value(user=self.user, key="theme") == "system"
+        assert UserOption.objects.get_value(user=self.user, key="default_issue_event") == "latest"
         assert UserOption.objects.get_value(user=self.user, key="timezone") == "UTC"
         assert UserOption.objects.get_value(user=self.user, key="stacktrace_order") == "2"
         assert UserOption.objects.get_value(user=self.user, key="language") == "fr"