Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion experimenter/experimenter/nimbus_ui/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -1668,7 +1668,7 @@ def create_tag(self):
)


class TagAssignForm(forms.ModelForm):
class TagAssignForm(NimbusChangeLogFormMixin, forms.ModelForm):
class Meta:
model = NimbusExperiment
fields = ["tags"]
Expand All @@ -1678,6 +1678,9 @@ def __init__(self, *args, **kwargs):
self.fields["tags"].queryset = Tag.objects.all().order_by("name")
self.fields["tags"].widget = forms.CheckboxSelectMultiple()

def get_changelog_message(self):
return f"{self.request.user} updated tags"


class CollaboratorsForm(NimbusChangeLogFormMixin, forms.ModelForm):
collaborators = forms.ModelMultipleChoiceField(
Expand Down
19 changes: 16 additions & 3 deletions experimenter/experimenter/nimbus_ui/tests/test_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4170,37 +4170,50 @@ def test_valid_form_assigns_tags(self):
tag1 = TagFactory.create(name="Tag 1")
tag2 = TagFactory.create(name="Tag 2")

form = TagAssignForm(instance=experiment, data={"tags": [tag1.id, tag2.id]})
form = TagAssignForm(
instance=experiment, data={"tags": [tag1.id, tag2.id]}, request=self.request
)

self.assertTrue(form.is_valid())
experiment = form.save()

self.assertEqual(set(experiment.tags.all()), {tag1, tag2})
changelog = experiment.changes.latest("changed_on")
self.assertEqual(changelog.changed_by, self.user)
self.assertIn("updated tags", changelog.message)

def test_form_removes_tags(self):
tag1 = TagFactory.create(name="Tag 1")
tag2 = TagFactory.create(name="Tag 2")
experiment = NimbusExperimentFactory.create()
experiment.tags.set([tag1, tag2])

form = TagAssignForm(instance=experiment, data={"tags": [tag1.id]})
form = TagAssignForm(
instance=experiment, data={"tags": [tag1.id]}, request=self.request
)

self.assertTrue(form.is_valid())
experiment = form.save()

self.assertEqual(list(experiment.tags.all()), [tag1])
changelog = experiment.changes.latest("changed_on")
self.assertEqual(changelog.changed_by, self.user)
self.assertIn("updated tags", changelog.message)

def test_form_with_no_tags(self):
tag1 = TagFactory.create(name="Tag 1")
experiment = NimbusExperimentFactory.create()
experiment.tags.set([tag1])

form = TagAssignForm(instance=experiment, data={"tags": []})
form = TagAssignForm(instance=experiment, data={"tags": []}, request=self.request)

self.assertTrue(form.is_valid())
experiment = form.save()

self.assertEqual(experiment.tags.count(), 0)
changelog = experiment.changes.latest("changed_on")
self.assertEqual(changelog.changed_by, self.user)
self.assertIn("updated tags", changelog.message)

def test_form_queryset_ordered_by_name(self):
TagFactory.create(name="Z Tag")
Expand Down
4 changes: 3 additions & 1 deletion experimenter/experimenter/nimbus_ui/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1033,6 +1033,8 @@ def post(self, request, *args, **kwargs):
return render(request, self.template_name, {"formset": formset})


class TagAssignView(NimbusExperimentViewMixin, RenderResponseMixin, UpdateView):
class TagAssignView(
NimbusExperimentViewMixin, RequestFormMixin, RenderResponseMixin, UpdateView
):
form_class = TagAssignForm
template_name = "nimbus_experiments/assign_tags_response.html"