Skip to content

Commit adf28c9

Browse files
committed
Fix issue where interim meeting request form didn't list research groups when user was a working group chair and a research group chair. Commit ready for merge.
- Legacy-Id: 12082
1 parent c1cc1d6 commit adf28c9

2 files changed

Lines changed: 31 additions & 8 deletions

File tree

ietf/meeting/forms.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from django import forms
77
from django.core.validators import ValidationError
8+
from django.db.models import Q
89
from django.forms.fields import Field
910
from django.utils.encoding import force_text
1011
from django.utils import six
@@ -190,14 +191,17 @@ def set_group_options(self):
190191
'''Set group options based on user accessing the form'''
191192
if has_role(self.user, "Secretariat"):
192193
return # don't reduce group options
194+
q_objects = Q()
193195
if has_role(self.user, "Area Director"):
194-
queryset = Group.objects.filter(type="wg", state__in=("active", "proposed", "bof")).order_by('acronym')
195-
elif has_role(self.user, "IRTF Chair"):
196-
queryset = Group.objects.filter(type="rg", state__in=("active", "proposed")).order_by('acronym')
197-
elif has_role(self.user, "WG Chair"):
198-
queryset = Group.objects.filter(type="wg", state__in=("active", "proposed", "bof"), role__person=self.person, role__name="chair").distinct().order_by('acronym')
199-
elif has_role(self.user, "RG Chair"):
200-
queryset = Group.objects.filter(type="rg", state__in=("active", "proposed"), role__person=self.person, role__name="chair").distinct().order_by('acronym')
196+
q_objects.add(Q(type="wg", state__in=("active", "proposed", "bof")), Q.OR)
197+
if has_role(self.user, "IRTF Chair"):
198+
q_objects.add(Q(type="rg", state__in=("active", "proposed")), Q.OR)
199+
if has_role(self.user, "WG Chair"):
200+
q_objects.add(Q(type="wg", state__in=("active", "proposed", "bof"), role__person=self.person, role__name="chair"), Q.OR)
201+
if has_role(self.user, "RG Chair"):
202+
q_objects.add(Q(type="rg", state__in=("active", "proposed"), role__person=self.person, role__name="chair"), Q.OR)
203+
204+
queryset = Group.objects.filter(q_objects).distinct().order_by('acronym')
201205
self.fields['group'].queryset = queryset
202206

203207
# if there's only one possibility make it the default

ietf/meeting/tests_views.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from StringIO import StringIO
1616

1717
from ietf.doc.models import Document
18-
from ietf.group.models import Group
18+
from ietf.group.models import Group, Role
1919
from ietf.meeting.helpers import can_approve_interim_request, can_view_interim_request
2020
from ietf.meeting.helpers import send_interim_approval_request
2121
from ietf.meeting.helpers import send_interim_cancellation_notice
@@ -709,7 +709,26 @@ def test_interim_request_options(self):
709709
q = PyQuery(r.content)
710710
self.assertEqual(Group.objects.filter(type__in=('wg', 'rg'), state__in=('active', 'proposed')).count(),
711711
len(q("#id_group option")) - 1) # -1 for options placeholder
712+
self.client.logout()
712713

714+
# wg chair
715+
self.client.login(username="marschairman", password="marschairman+password")
716+
r = self.client.get("/meeting/interim/request/")
717+
self.assertEqual(r.status_code, 200)
718+
q = PyQuery(r.content)
719+
user = User.objects.get(username='marschairman')
720+
person = user.person
721+
count = person.role_set.filter(name='chair',group__type__in=('wg', 'rg'), group__state__in=('active', 'proposed')).count()
722+
self.assertEqual(count, len(q("#id_group option")) - 1) # -1 for options placeholder
723+
724+
# wg AND rg chair
725+
group = Group.objects.get(acronym='irg')
726+
Role.objects.create(name_id='chair',group=group,person=person,email=person.email())
727+
r = self.client.get("/meeting/interim/request/")
728+
self.assertEqual(r.status_code, 200)
729+
q = PyQuery(r.content)
730+
count = person.role_set.filter(name='chair',group__type__in=('wg', 'rg'), group__state__in=('active', 'proposed')).count()
731+
self.assertEqual(count, len(q("#id_group option")) - 1) # -1 for options placeholder
713732

714733
def test_interim_request_single_virtual(self):
715734
make_meeting_test_data()

0 commit comments

Comments
 (0)