Allow pre-ADs to be assigned as responsible for document. Fixes #3229. Commit ready for merge.

- Legacy-Id: 19383
This commit is contained in:
Jennifer Richards 2021-09-22 18:42:00 +00:00
parent 58fa3218eb
commit fc9864114b
2 changed files with 34 additions and 2 deletions

View file

@ -1063,6 +1063,30 @@ class IndividualInfoFormsTests(TestCase):
doc = Document.objects.get(name=self.docname) doc = Document.objects.get(name=self.docname)
self.assertEqual(doc.ad, None) 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): def test_doc_change_shepherd(self):
doc = Document.objects.get(name=self.docname) doc = Document.objects.get(name=self.docname)
doc.shepherd = None doc.shepherd = None

View file

@ -1111,8 +1111,16 @@ def change_shepherd_email(request, name):
}) })
class AdForm(forms.Form): class AdForm(forms.Form):
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active", role__group__type="area").order_by('name'), ad = forms.ModelChoiceField(
label="Shepherding AD", empty_label="(None)", required=False) 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): def __init__(self, doc, *args, **kwargs):
super(self.__class__, self).__init__(*args, **kwargs) super(self.__class__, self).__init__(*args, **kwargs)