diff --git a/experimenter/experimenter/nimbus_ui/constants.py b/experimenter/experimenter/nimbus_ui/constants.py index aed6e556af..af2ae45d67 100644 --- a/experimenter/experimenter/nimbus_ui/constants.py +++ b/experimenter/experimenter/nimbus_ui/constants.py @@ -147,6 +147,11 @@ class NimbusUIConstants: experiences, etc. associated with your selected feature.""", } + FEATURE_PAGE_TOOLTIPS = { + "feature_changes_tooltip": """This shows any changes made to the Nimbus feature + manifest such as code changes for the feature you have chosen.""" + } + class ReviewRequestMessages(Enum): END_EXPERIMENT = "end this experiment" END_ENROLLMENT = "end enrollment for this experiment" diff --git a/experimenter/experimenter/nimbus_ui/templates/nimbus_experiments/features.html b/experimenter/experimenter/nimbus_ui/templates/nimbus_experiments/features.html index 82ef6edfb7..8768278966 100644 --- a/experimenter/experimenter/nimbus_ui/templates/nimbus_experiments/features.html +++ b/experimenter/experimenter/nimbus_ui/templates/nimbus_experiments/features.html @@ -331,7 +331,58 @@
+
+
+ Fox opening a box + Feature Changes + + | + Number of changes: {{ feature_changes.count|default:"0" }} +
+
+
+ + + + + + + + + + + {% for change in feature_changes %} + + + + + + + {% empty %} + + + + + {% endfor %} + +
+ Feature Version + + Date / Time + + Change Size + + Change Diff +
{{ change.change_version|format_not_set }}{{ change.change_date|date:"m/d/Y @ H:i"|format_not_set }}{{ change.change_size|format_not_set }}{{ change.softvision_complexity|format_not_set }}
No Tracked Feature Changes
+
+ {% endblock %} diff --git a/experimenter/experimenter/nimbus_ui/tests/test_views.py b/experimenter/experimenter/nimbus_ui/tests/test_views.py index c54b38d305..c2458cc64a 100644 --- a/experimenter/experimenter/nimbus_ui/tests/test_views.py +++ b/experimenter/experimenter/nimbus_ui/tests/test_views.py @@ -3576,14 +3576,18 @@ def test_features_view_renders_table_with_correct_elements( ) feature_id = self.feature_configs[feature_config].id - url = reverse("nimbus-ui-features") response = self.client.get( - f"{url}?application={application.value}&feature_configs={feature_id}" + reverse("nimbus-ui-features"), + { + "application": application.value, + "feature_configs": feature_id, + }, ) self.assertEqual(response.status_code, 200) self.assertContains(response, "deliveries-table") self.assertContains(response, "qa-info-table") + self.assertContains(response, "feature-changes-table") self.assertContains(response, experiment) def test_features_view_deliveries_table_can_sort_by_recipe_name(self): diff --git a/experimenter/experimenter/nimbus_ui/views.py b/experimenter/experimenter/nimbus_ui/views.py index bd66e7b33c..05c4ef077e 100644 --- a/experimenter/experimenter/nimbus_ui/views.py +++ b/experimenter/experimenter/nimbus_ui/views.py @@ -764,6 +764,7 @@ def get_context_data(self, **kwargs): context = { "form": form, "links": NimbusUIConstants.FEATURE_PAGE_LINKS, + "tooltips": NimbusUIConstants.FEATURE_PAGE_TOOLTIPS, "application": self.request.GET.get("application"), "feature_configs": self.request.GET.get("feature_configs"), "paginator": deliveries_paginator, diff --git a/experimenter/experimenter/static/assets/feature-changes.svg b/experimenter/experimenter/static/assets/feature-changes.svg new file mode 100644 index 0000000000..799d406724 --- /dev/null +++ b/experimenter/experimenter/static/assets/feature-changes.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +