diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index c64ba5b3c..0d4684c92 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -2419,6 +2419,7 @@ class rfc8713EligibilityTests(TestCase): self.eligible_people = list() self.ineligible_people = list() + # Section 4.14 qualification criteria for combo_len in range(0,6): for combo in combinations(meetings,combo_len): p = PersonFactory() @@ -2429,6 +2430,18 @@ class rfc8713EligibilityTests(TestCase): else: self.eligible_people.append(p) + # Section 4.15 disqualification criteria + def ineligible_person_with_role(**kwargs): + p = RoleFactory(**kwargs).person + for m in meetings: + MeetingRegistrationFactory(person=p, meeting=m, attended=True) + self.ineligible_people.append(p) + for group in ['isocbot', 'ietf-trust', 'llc-board', 'iab']: + for role in ['member', 'chair']: + ineligible_person_with_role(group__acronym=group, name_id=role) + ineligible_person_with_role(group__type_id='area', group__state_id='active',name_id='ad') + ineligible_person_with_role(group=self.nomcom.group, name_id='chair') + # No-one is eligible for the other_nomcom self.other_nomcom = NomComFactory(group__acronym='nomcom2018',first_call_for_volunteers=datetime.date(2018,5,1)) diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index e009999e6..6a7e3f40d 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -1,4 +1,4 @@ -# Copyright The IETF Trust 2012-2022, All Rights Reserved +# Copyright The IETF Trust 2012-2023, All Rights Reserved # -*- coding: utf-8 -*- @@ -66,8 +66,11 @@ DEFAULT_NOMCOM_TEMPLATES = [HOME_TEMPLATE, ] # See RFC8713 section 4.15 +# This potentially over-disqualifies past nomcom chairs if some +# nomcom 2+ nomcoms ago is still in the active state DISQUALIFYING_ROLE_QUERY_EXPRESSION = ( Q(group__acronym__in=['isocbot', 'ietf-trust', 'llc-board', 'iab'], name_id__in=['member', 'chair']) | Q(group__type_id='area', group__state='active',name_id='ad') + | Q(group__type_id='nomcom', group__state='active', name_id='chair') )