From fc9864114bb2cb674c63aabe8135e3e7f68ff297 Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Wed, 22 Sep 2021 18:42:00 +0000 Subject: [PATCH] Allow pre-ADs to be assigned as responsible for document. Fixes #3229. Commit ready for merge. - Legacy-Id: 19383 --- ietf/doc/tests_draft.py | 24 ++++++++++++++++++++++++ ietf/doc/views_draft.py | 12 ++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 34b8b4841..4d8cb7000 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -1063,6 +1063,30 @@ class IndividualInfoFormsTests(TestCase): doc = Document.objects.get(name=self.docname) self.assertEqual(doc.ad, None) + def test_doc_change_ad_allows_pre_ad(self): + """Pre-ADs can be responsible for documents""" + # create a pre-AD + doc = Document.objects.get(name=self.docname) + pre_ad = RoleFactory(name_id='pre-ad', group=doc.group.parent).person + + url = urlreverse('ietf.doc.views_draft.edit_ad', kwargs=dict(name=self.docname)) + self.client.login(username='secretary', password='secretary+password') + + # test get + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + q = PyQuery(r.content) + self.assertEqual( + len(q(f'form select[name=ad] option[value="{pre_ad.pk}"]')), 1, + 'Pre-AD should be an option for assignment', + ) + + # test post + r = self.client.post(url, dict(ad=str(pre_ad.pk))) + self.assertEqual(r.status_code, 302) + doc = Document.objects.get(pk=doc.pk) # refresh + self.assertEqual(doc.ad, pre_ad, 'Pre-AD was not actually assigned') + def test_doc_change_shepherd(self): doc = Document.objects.get(name=self.docname) doc.shepherd = None diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py index f7ae4592c..3d8567e89 100644 --- a/ietf/doc/views_draft.py +++ b/ietf/doc/views_draft.py @@ -1111,8 +1111,16 @@ def change_shepherd_email(request, name): }) class AdForm(forms.Form): - ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active", role__group__type="area").order_by('name'), - label="Shepherding AD", empty_label="(None)", required=False) + ad = forms.ModelChoiceField( + Person.objects.filter( + role__name__in=("ad", "pre-ad"), + role__group__state="active", + role__group__type="area", + ).order_by('name'), + label="Shepherding AD", + empty_label="(None)", + required=False, + ) def __init__(self, doc, *args, **kwargs): super(self.__class__, self).__init__(*args, **kwargs)