Skip to content

Commit 4d9bdca

Browse files
committed
Add group field to Roles add form validation. Fixes ietf-tools#2292. Commit ready for merge.
- Legacy-Id: 13276
1 parent 462fc1a commit 4d9bdca

9 files changed

Lines changed: 38 additions & 20 deletions

File tree

ietf/secr/groups/forms.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,14 @@ def clean(self):
182182
person = cleaned_data['person']
183183
email = cleaned_data['email']
184184
name = cleaned_data['name']
185+
group_acronym = cleaned_data['group_acronym']
185186

186187
if Role.objects.filter(name=name,group=self.group,person=person,email=email):
187188
raise forms.ValidationError('ERROR: This is a duplicate entry')
188189

190+
if not group_acronym:
191+
raise forms.ValidationError('You must select a group.')
192+
189193
return cleaned_data
190194

191195
class SearchForm(forms.Form):

ietf/secr/groups/tests.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ def test_people_add(self):
124124
person = Person.objects.get(name='Areað Irector')
125125
group = Group.objects.filter(acronym='mars')[0]
126126
url = reverse('ietf.secr.groups.views.people', kwargs={'acronym':group.acronym})
127-
post_data = {'name':'chair',
127+
post_data = {'group_acronym':group.acronym,
128+
'name':'chair',
128129
'person':'Joe Smith - (%s)' % person.id,
129130
'email':person.email_set.all()[0].address,
130131
'submit':'Add'}

ietf/secr/groups/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ def people(request, acronym):
347347
messages.success(request, 'New %s added successfully!' % name)
348348
return redirect('ietf.secr.groups.views.people', acronym=group.acronym)
349349
else:
350-
form = RoleForm(initial={'name':'chair'},group=group)
350+
form = RoleForm(initial={'name':'chair', 'group_acronym':group.acronym}, group=group)
351351

352352
return render(request, 'groups/people.html', {
353353
'form':form,

ietf/secr/meetings/forms.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ def valid_value(self, value):
8888
#----------------------------------------------------------
8989
# Forms
9090
#----------------------------------------------------------
91+
class MeetingSelectForm(forms.Form):
92+
meeting = forms.ChoiceField()
93+
94+
def __init__(self,*args,**kwargs):
95+
choices = kwargs.pop('choices')
96+
super(MeetingSelectForm, self).__init__(*args,**kwargs)
97+
self.fields['meeting'].widget.choices = choices
98+
9199
class MeetingModelForm(forms.ModelForm):
92100
idsubmit_cutoff_time_utc = ietf.utils.fields.DurationField()
93101
idsubmit_cutoff_warning_days = ietf.utils.fields.DurationField()

ietf/secr/meetings/tests.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,14 @@ def tearDown(self):
4343

4444
def test_main(self):
4545
"Main Test"
46+
meeting = make_meeting_test_data()
4647
url = reverse('ietf.secr.meetings.views.main')
4748
self.client.login(username="secretary", password="secretary+password")
4849
response = self.client.get(url)
4950
self.assertEqual(response.status_code, 200)
51+
response = self.client.post(url, {'meeting':meeting.number})
52+
url = reverse('ietf.secr.meetings.views.view', kwargs={'meeting_id':meeting.number})
53+
self.assertRedirects(response,url)
5054

5155
def test_view(self):
5256
"View Test"

ietf/secr/meetings/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from ietf.group.models import Group, GroupEvent
2121
from ietf.person.models import Person
2222
from ietf.secr.meetings.blue_sheets import create_blue_sheets
23-
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm,
23+
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm, MeetingSelectForm,
2424
MeetingRoomForm, NewSessionForm, NonSessionEditForm, NonSessionForm, TimeSlotForm,
2525
UploadBlueSheetForm, get_next_slot )
2626
from ietf.secr.proceedings.views import build_choices
@@ -433,10 +433,10 @@ def main(request):
433433
meetings = Meeting.objects.filter(type='ietf').order_by('-number')
434434

435435
if request.method == 'POST':
436-
return redirect('ietf.secr.meetings.views.view', meeting_id=request.POST['group'])
436+
return redirect('ietf.secr.meetings.views.view', meeting_id=request.POST['meeting'])
437437

438438
choices = [ (str(x.number),str(x.number)) for x in meetings ]
439-
form = GroupSelectForm(choices=choices)
439+
form = MeetingSelectForm(choices=choices)
440440

441441
return render(request, 'meetings/main.html', {
442442
'form': form,

ietf/secr/roles/tests.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,17 @@ def test_roles_add(self):
5252
self.assertRedirects(response, target)
5353
self.failUnless('added successfully' in response.content)
5454

55+
def test_roles_add_no_group(self):
56+
make_test_data()
57+
augment_data()
58+
person = Person.objects.get(name='Areað Irector')
59+
url = reverse('ietf.secr.roles.views.main')
60+
post_data = {'group_acronym':'',
61+
'name':'chair',
62+
'person':'Joe Smith - (%s)' % person.id,
63+
'email':person.email_set.all()[0].address,
64+
'submit':'Add'}
65+
self.client.login(username="secretary", password="secretary+password")
66+
response = self.client.post(url,post_data,follow=True)
67+
self.assertEqual(response.status_code, 200)
68+
self.failUnless('You must select a group' in response.content)

ietf/secr/sreq/views.py

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from ietf.meeting.models import Meeting, Session, Constraint, ResourceAssociation
1313
from ietf.meeting.helpers import get_meeting
1414
from ietf.name.models import SessionStatusName, ConstraintName
15-
from ietf.secr.sreq.forms import SessionForm, GroupSelectForm, ToolStatusForm
15+
from ietf.secr.sreq.forms import SessionForm, ToolStatusForm
1616
from ietf.secr.utils.decorators import check_permissions
1717
from ietf.secr.utils.group import groups_by_session
1818
from ietf.utils.mail import send_mail
@@ -487,26 +487,13 @@ def main(request):
487487
'message': message},
488488
)
489489

490-
# TODO this is not currently used in the main template
491-
if request.method == 'POST':
492-
button_text = request.POST.get('submit', '')
493-
if button_text == 'Group will not meet':
494-
return redirect('ietf.secr.sreq.views.no_session', acronym=request.POST['group'])
495-
else:
496-
return redirect('ietf.secr.sreq.views.new', acronym=request.POST['group'])
497-
498490
meeting = get_meeting()
499491
scheduled_groups,unscheduled_groups = groups_by_session(request.user, meeting, types=['wg','rg','ag'])
500492

501493
# warn if there are no associated groups
502494
if not scheduled_groups and not unscheduled_groups:
503495
messages.warning(request, 'The account %s is not associated with any groups. If you have multiple Datatracker accounts you may try another or report a problem to ietf-action@ietf.org' % request.user)
504496

505-
# load form select with unscheduled groups
506-
choices = zip([ g.pk for g in unscheduled_groups ],
507-
[ str(g) for g in unscheduled_groups ])
508-
form = GroupSelectForm(choices=choices)
509-
510497
# add session status messages for use in template
511498
for group in scheduled_groups:
512499
sessions = group.session_set.filter(meeting=meeting)
@@ -522,7 +509,6 @@ def main(request):
522509

523510
return render(request, 'sreq/main.html', {
524511
'is_locked': is_locked,
525-
'form': form,
526512
'meeting': meeting,
527513
'scheduled_groups': scheduled_groups,
528514
'unscheduled_groups': unscheduled_groups},

ietf/secr/templates/groups/people.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ <h2>People</h2>
4545
<h3>Add Role</h3>
4646
<form id="groups-people" action="" method="post">{% csrf_token %}
4747
{{ form.non_field_errors }}
48+
{{ form.group_acronym }}
4849
<table class="full-width">
4950
<tr>
5051
<td>{{ form.name.errors }}{{ form.name }}</td>

0 commit comments

Comments
 (0)