Skip to content

Commit

Permalink
Add group field to Roles add form validation. Fixes #2292. Commit rea…
Browse files Browse the repository at this point in the history
…dy for merge.

 - Legacy-Id: 13276
  • Loading branch information
rpcross committed May 9, 2017
1 parent 462fc1a commit 4d9bdca
Show file tree
Hide file tree
Showing 9 changed files with 38 additions and 20 deletions.
4 changes: 4 additions & 0 deletions ietf/secr/groups/forms.py
Expand Up @@ -182,10 +182,14 @@ def clean(self):
person = cleaned_data['person']
email = cleaned_data['email']
name = cleaned_data['name']
group_acronym = cleaned_data['group_acronym']

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

if not group_acronym:
raise forms.ValidationError('You must select a group.')

return cleaned_data

class SearchForm(forms.Form):
Expand Down
3 changes: 2 additions & 1 deletion ietf/secr/groups/tests.py
Expand Up @@ -124,7 +124,8 @@ def test_people_add(self):
person = Person.objects.get(name='Areað Irector')
group = Group.objects.filter(acronym='mars')[0]
url = reverse('ietf.secr.groups.views.people', kwargs={'acronym':group.acronym})
post_data = {'name':'chair',
post_data = {'group_acronym':group.acronym,
'name':'chair',
'person':'Joe Smith - (%s)' % person.id,
'email':person.email_set.all()[0].address,
'submit':'Add'}
Expand Down
2 changes: 1 addition & 1 deletion ietf/secr/groups/views.py
Expand Up @@ -347,7 +347,7 @@ def people(request, acronym):
messages.success(request, 'New %s added successfully!' % name)
return redirect('ietf.secr.groups.views.people', acronym=group.acronym)
else:
form = RoleForm(initial={'name':'chair'},group=group)
form = RoleForm(initial={'name':'chair', 'group_acronym':group.acronym}, group=group)

return render(request, 'groups/people.html', {
'form':form,
Expand Down
8 changes: 8 additions & 0 deletions ietf/secr/meetings/forms.py
Expand Up @@ -88,6 +88,14 @@ def valid_value(self, value):
#----------------------------------------------------------
# Forms
#----------------------------------------------------------
class MeetingSelectForm(forms.Form):
meeting = forms.ChoiceField()

def __init__(self,*args,**kwargs):
choices = kwargs.pop('choices')
super(MeetingSelectForm, self).__init__(*args,**kwargs)
self.fields['meeting'].widget.choices = choices

class MeetingModelForm(forms.ModelForm):
idsubmit_cutoff_time_utc = ietf.utils.fields.DurationField()
idsubmit_cutoff_warning_days = ietf.utils.fields.DurationField()
Expand Down
4 changes: 4 additions & 0 deletions ietf/secr/meetings/tests.py
Expand Up @@ -43,10 +43,14 @@ def tearDown(self):

def test_main(self):
"Main Test"
meeting = make_meeting_test_data()
url = reverse('ietf.secr.meetings.views.main')
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
response = self.client.post(url, {'meeting':meeting.number})
url = reverse('ietf.secr.meetings.views.view', kwargs={'meeting_id':meeting.number})
self.assertRedirects(response,url)

def test_view(self):
"View Test"
Expand Down
6 changes: 3 additions & 3 deletions ietf/secr/meetings/views.py
Expand Up @@ -20,7 +20,7 @@
from ietf.group.models import Group, GroupEvent
from ietf.person.models import Person
from ietf.secr.meetings.blue_sheets import create_blue_sheets
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm,
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm, MeetingSelectForm,
MeetingRoomForm, NewSessionForm, NonSessionEditForm, NonSessionForm, TimeSlotForm,
UploadBlueSheetForm, get_next_slot )
from ietf.secr.proceedings.views import build_choices
Expand Down Expand Up @@ -433,10 +433,10 @@ def main(request):
meetings = Meeting.objects.filter(type='ietf').order_by('-number')

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

choices = [ (str(x.number),str(x.number)) for x in meetings ]
form = GroupSelectForm(choices=choices)
form = MeetingSelectForm(choices=choices)

return render(request, 'meetings/main.html', {
'form': form,
Expand Down
14 changes: 14 additions & 0 deletions ietf/secr/roles/tests.py
Expand Up @@ -52,3 +52,17 @@ def test_roles_add(self):
self.assertRedirects(response, target)
self.failUnless('added successfully' in response.content)

def test_roles_add_no_group(self):
make_test_data()
augment_data()
person = Person.objects.get(name='Areað Irector')
url = reverse('ietf.secr.roles.views.main')
post_data = {'group_acronym':'',
'name':'chair',
'person':'Joe Smith - (%s)' % person.id,
'email':person.email_set.all()[0].address,
'submit':'Add'}
self.client.login(username="secretary", password="secretary+password")
response = self.client.post(url,post_data,follow=True)
self.assertEqual(response.status_code, 200)
self.failUnless('You must select a group' in response.content)
16 changes: 1 addition & 15 deletions ietf/secr/sreq/views.py
Expand Up @@ -12,7 +12,7 @@
from ietf.meeting.models import Meeting, Session, Constraint, ResourceAssociation
from ietf.meeting.helpers import get_meeting
from ietf.name.models import SessionStatusName, ConstraintName
from ietf.secr.sreq.forms import SessionForm, GroupSelectForm, ToolStatusForm
from ietf.secr.sreq.forms import SessionForm, ToolStatusForm
from ietf.secr.utils.decorators import check_permissions
from ietf.secr.utils.group import groups_by_session
from ietf.utils.mail import send_mail
Expand Down Expand Up @@ -487,26 +487,13 @@ def main(request):
'message': message},
)

# TODO this is not currently used in the main template
if request.method == 'POST':
button_text = request.POST.get('submit', '')
if button_text == 'Group will not meet':
return redirect('ietf.secr.sreq.views.no_session', acronym=request.POST['group'])
else:
return redirect('ietf.secr.sreq.views.new', acronym=request.POST['group'])

meeting = get_meeting()
scheduled_groups,unscheduled_groups = groups_by_session(request.user, meeting, types=['wg','rg','ag'])

# warn if there are no associated groups
if not scheduled_groups and not unscheduled_groups:
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)

# load form select with unscheduled groups
choices = zip([ g.pk for g in unscheduled_groups ],
[ str(g) for g in unscheduled_groups ])
form = GroupSelectForm(choices=choices)

# add session status messages for use in template
for group in scheduled_groups:
sessions = group.session_set.filter(meeting=meeting)
Expand All @@ -522,7 +509,6 @@ def main(request):

return render(request, 'sreq/main.html', {
'is_locked': is_locked,
'form': form,
'meeting': meeting,
'scheduled_groups': scheduled_groups,
'unscheduled_groups': unscheduled_groups},
Expand Down
1 change: 1 addition & 0 deletions ietf/secr/templates/groups/people.html
Expand Up @@ -45,6 +45,7 @@ <h2>People</h2>
<h3>Add Role</h3>
<form id="groups-people" action="" method="post">{% csrf_token %}
{{ form.non_field_errors }}
{{ form.group_acronym }}
<table class="full-width">
<tr>
<td>{{ form.name.errors }}{{ form.name }}</td>
Expand Down

0 comments on commit 4d9bdca

Please sign in to comment.