Skip to content

Commit d20e6ce

Browse files
committed
Merged in [13499] from rcross@amsl.com:
Add non WG Area choices to Parent field of secretariat groups edit form. Fixes ietf-tools#1344. - Legacy-Id: 13513 Note: SVN reference [13499] has been migrated to Git commit a63d513
2 parents ed1e9cd + a63d513 commit d20e6ce

2 files changed

Lines changed: 40 additions & 4 deletions

File tree

ietf/secr/groups/forms.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import re
22

33
from django import forms
4-
from django.db.models import Q
4+
from django.db.models import Count
55

66
from ietf.group.models import Group, GroupMilestone, Role
77
from ietf.name.models import GroupStateName, GroupTypeName, RoleName
@@ -33,6 +33,13 @@ def get_person(name):
3333
return None
3434
return person
3535

36+
def get_parent_group_choices():
37+
area_choices = [(g.id, g.name) for g in Group.objects.filter(type='area',state='active')]
38+
other_parents = Group.objects.annotate(children=Count('group')).filter(children__gt=0).order_by('name').exclude(type='area')
39+
other_choices = [(g.id, g.name) for g in other_parents]
40+
choices = (('Working Group Areas',area_choices),('Other',other_choices))
41+
return choices
42+
3643
# ---------------------------------------------
3744
# Forms
3845
# ---------------------------------------------
@@ -66,7 +73,7 @@ def save(self, force_insert=False, force_update=False, commit=True):
6673

6774
class GroupModelForm(forms.ModelForm):
6875
type = forms.ModelChoiceField(queryset=GroupTypeName.objects.all(),empty_label=None)
69-
parent = forms.ModelChoiceField(queryset=Group.objects.filter(Q(type='area',state='active')|Q(acronym='irtf')),required=False)
76+
parent = forms.ModelChoiceField(queryset=Group.objects.all(),required=False)
7077
ad = forms.ModelChoiceField(queryset=Person.objects.filter(role__name='ad',role__group__state='active',role__group__type='area'),required=False)
7178
state = forms.ModelChoiceField(queryset=GroupStateName.objects.exclude(slug__in=('dormant','unknown')),empty_label=None)
7279
liaison_contacts = forms.CharField(max_length=255,required=False,label='Default Liaison Contacts')
@@ -82,8 +89,9 @@ def __init__(self, *args, **kwargs):
8289
self.fields['list_archive'].label = 'List Archive'
8390
self.fields['ad'].label = 'Area Director'
8491
self.fields['comments'].widget.attrs['rows'] = 3
85-
self.fields['parent'].label = 'Area'
86-
92+
self.fields['parent'].label = 'Area / Parent'
93+
self.fields['parent'].choices = get_parent_group_choices()
94+
8795
if self.instance.pk:
8896
lsgc = self.instance.liaisonstatementgroupcontacts_set.first() # there can only be one
8997
if lsgc:

ietf/secr/groups/tests.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@
22
from django.urls import reverse
33
from ietf.utils.test_utils import TestCase
44
from ietf.group.models import Group
5+
from ietf.secr.groups.forms import get_parent_group_choices
6+
from ietf.group.factories import GroupFactory
57
from ietf.person.models import Person
68
from ietf.utils.test_data import make_test_data
79
import debug # pyflakes:ignore
810

911
class GroupsTest(TestCase):
12+
def test_get_parent_group_choices(self):
13+
make_test_data()
14+
choices = get_parent_group_choices()
15+
area = Group.objects.filter(type='area',state='active').first()
16+
self.assertEqual(choices[0][1][0][0],area.id)
17+
1018
# ------- Test Search -------- #
1119
def test_search(self):
1220
"Test Search"
@@ -107,6 +115,26 @@ def test_edit_valid(self):
107115
self.assertRedirects(response, target)
108116
self.failUnless('changed successfully' in response.content)
109117

118+
def test_edit_non_wg_group(self):
119+
make_test_data()
120+
parent_sdo = GroupFactory.create(type_id='sdo',state_id='active')
121+
child_sdo = GroupFactory.create(type_id='sdo',state_id='active',parent=parent_sdo)
122+
url = reverse('ietf.secr.groups.views.edit', kwargs={'acronym':child_sdo.acronym})
123+
target = reverse('ietf.secr.groups.views.view', kwargs={'acronym':child_sdo.acronym})
124+
post_data = {'acronym':child_sdo.acronym,
125+
'name':'New Name',
126+
'type':'sdo',
127+
'state':child_sdo.state_id,
128+
'parent':parent_sdo.id,
129+
'ad':'',
130+
'groupurl_set-TOTAL_FORMS':'2',
131+
'groupurl_set-INITIAL_FORMS':'0',
132+
'submit':'Save'}
133+
self.client.login(username="secretary", password="secretary+password")
134+
response = self.client.post(url,post_data,follow=True)
135+
self.assertRedirects(response, target)
136+
self.failUnless('changed successfully' in response.content)
137+
110138
# ------- Test People -------- #
111139
def test_people_delete(self):
112140
make_test_data()

0 commit comments

Comments
 (0)